Change how and when we fetch and parse namespace info

Signed-off-by: Alistair Hey <alistair@heyal.co.uk>
This commit is contained in:
Alistair Hey
2019-12-17 15:17:18 +00:00
committed by Alex Ellis
parent 2fd7989d3f
commit 59b7839236
4 changed files with 53 additions and 61 deletions

View File

@ -17,13 +17,14 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
$scope.invocationStatus = "";
$scope.invocationStart = new Date().getTime();
$scope.roundTripDuration = "";
$scope.selectedNamespace = "openfaas-fn";
$scope.allNamespaces = ["openfaas-fn"];
$scope.selectedNamespace = "";
$scope.allNamespaces = [""];
$scope.invocation = {
contentType: "text"
};
$scope.baseUrl = $location.absUrl().replace(/\ui\/$/, '');
try {
$scope.canCopyToClipboard = document.queryCommandSupported('copy');
} catch (err) {
@ -65,15 +66,19 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
var fetchFunctionsDelay = 3500;
var queryFunctionDelay = 2500;
var fetchNamespacesInterval = function() {
$http.get("../system/namespaces")
.then(function(response) {
$scope.allNamespaces = response.data;
})
};
$http.get("../system/namespaces")
.then(function(response) {
$scope.allNamespaces = response.data;
if ($scope.selectedNamespace === "" && response.data && response.data[0] && response.data[0] !== "") {
$scope.selectedNamespace = response.data[0]
refreshData($scope.selectedNamespace)
}
})
var fetchFunctionsInterval = $interval(function() {
refreshData($scope.selectedNamespace);
}, fetchFunctionsDelay);
@ -86,13 +91,16 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
$scope.setNamespace = function(namespace) {
$scope.selectedNamespace = namespace;
refreshData($scope.selectedNamespace)
$scope.selectedFunction = undefined;
$scope.functions = [];
refreshData($scope.selectedNamespace)
}
var refreshFunction = function(functionInstance) {
$http.get("../system/function/" + functionInstance.name + "?namespace=" + $scope.selectedNamespace)
const url = "/system/function/" + functionInstance.name;
$http.get(buildNamespaceAwareURL(url, $scope.selectedNamespace))
.then(function(response) {
functionInstance.ready = (response.data && response.data.availableReplicas && response.data.availableReplicas > 0);
$scope.selectedFunction.ready = (response.data && response.data.availableReplicas && response.data.availableReplicas > 0);
})
.catch(function(err) {
console.error(err);
@ -114,7 +122,7 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
requestContentType = "binary/octet-stream";
}
var fnNamespace = ($scope.selectedNamespace !== "openfaas-fn") ? "." + $scope.selectedNamespace : "";
var fnNamespace = ($scope.selectedNamespace && $scope.selectedNamespace.length > 0) ? "." + $scope.selectedNamespace : "";
var options = {
url: "../function/" + $scope.selectedFunction.name + fnNamespace,
data: $scope.invocation.request,
@ -204,42 +212,16 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
};
var refreshData = function (selectedNamespace) {
var previous = $scope.functions;
$http.get(buildNamespaceAwareURL("/system/functions", selectedNamespace)).then(function (response) {
const curNamespace = ($scope.functions.length > 0 && $scope.functions[0].namespace && $scope.functions[0].namespace) ? $scope.functions[0].namespace : "";
const newNamespace = (response.data && response.data[0] && response.data[0].namespace) ? response.data[0].namespace : "";
var cl = function (previousItems) {
$http.get("../system/functions?namespace=" + selectedNamespace).then(function (response) {
if (response && response.data) {
if (previousItems.length != response.data.length) {
$scope.functions = response.data;
// update the selected function object because the newly fetched object from the API becomes a different object
var filteredSelectedFunction = $filter('filter')($scope.functions, { name: $scope.selectedFunction.name }, true);
if (filteredSelectedFunction && filteredSelectedFunction.length > 0) {
$scope.selectedFunction = filteredSelectedFunction[0];
} else {
$scope.selectedFunction = undefined;
}
} else {
for (var i = 0; i < $scope.functions.length; i++) {
for (var j = 0; j < response.data.length; j++) {
if ($scope.functions[i].name == response.data[j].name) {
$scope.functions[i].image = response.data[j].image;
$scope.functions[i].replicas = response.data[j].replicas;
$scope.functions[i].invocationCount = response.data[j].invocationCount;
$scope.functions[i].namespace = response.data[j].namespace;
}
}
}
}
}
});
};
cl(previous);
}
var fetch = function() {
$http.get("../system/functions?namespace=" + $scope.selectedNamespace).then(function(response) {
$scope.functions = response.data;
if (response && response.data && (curNamespace !== newNamespace || $scope.functions.length != response.data.length)) {
$scope.functions = response.data;
if (!$scope.functions.indexOf($scope.selectedFunction )) {
$scope.selectedFunction = undefined;
}
}
});
};
@ -267,13 +249,13 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
templateUrl: "templates/newfunction.html",
locals: {
item: $scope.functionTemplate,
allNamespaces: $scope.allNamespaces
selectedNamespace: $scope.selectedNamespace
},
controller: DialogController
controller: DialogController,
});
};
var DialogController = function($scope, $mdDialog, item) {
var DialogController = function($scope, $mdDialog, item, selectedNamespace) {
var fetchNamespaces = function () {
$http.get("../system/namespaces")
.then(function(response) {
@ -294,7 +276,7 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
$scope.annotationFieldsVisible = false;
$scope.annotationInputs = [{key: "", value: ""}];
$scope.namespaceSelect = "openfaas-fn";
$scope.namespaceSelect = selectedNamespace;
fetchNamespaces();
@ -354,7 +336,7 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
item.labels = {};
item.annotations = {};
item.secrets = [];
item.namespace = "openfaas-fn";
item.namespace = "";
$scope.validationError = "";
$scope.closeDialog();
@ -572,7 +554,8 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
$mdDialog.show(confirm)
.then(function() {
var options = {
url: "../system/functions?namespace=" + $scope.selectedNamespace,
url: buildNamespaceAwareURL("/system/functions", $scope.selectedNamespace),
data: {
functionName: $scope.selectedFunction.name
},
@ -592,9 +575,6 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f
}
});
};
fetch();
fetchNamespacesInterval();
}
]);
@ -603,4 +583,13 @@ function uuidv4() {
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, function(c) {
return (c ^ cryptoInstance.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
})
}
}
function buildNamespaceAwareURL(path, namespace) {
let newUrl = path.startsWith("/")? ".." + path: "../" + path;
if (namespace && namespace.length > 0){
newUrl += "?namespace=" + namespace
}
return newUrl
}