diff --git a/gateway/assets/index.html b/gateway/assets/index.html index 48937e7957..ab0ead39ce 100644 --- a/gateway/assets/index.html +++ b/gateway/assets/index.html @@ -57,7 +57,7 @@

- + {{ namespace }} @@ -140,7 +140,7 @@

- + diff --git a/gateway/assets/script/bootstrap.js b/gateway/assets/script/bootstrap.js index d31604fbb7..d4e6334fec 100644 --- a/gateway/assets/script/bootstrap.js +++ b/gateway/assets/script/bootstrap.js @@ -17,8 +17,8 @@ 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" }; @@ -65,14 +65,24 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f var fetchFunctionsDelay = 3500; var queryFunctionDelay = 2500; - var fetchNamespacesInterval = function() { + + + + var fetchNamespaces = function() { $http.get("../system/namespaces") .then(function(response) { $scope.allNamespaces = response.data; + if ($scope.selectedNamespace === "") { + $scope.selectedNamespace = response.data[0] + } }) - }; - + } + fetchNamespaces() + $scope.selectedNamespace = $scope.allNamespaces[0] // First returned namespace + var fetchNamespacesInterval = $interval(function() { + fetchNamespaces() + }, fetchFunctionsDelay); var fetchFunctionsInterval = $interval(function() { refreshData($scope.selectedNamespace); @@ -86,13 +96,14 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f $scope.setNamespace = function(namespace) { $scope.selectedNamespace = namespace; + $scope.selectedFunction = undefined refreshData($scope.selectedNamespace) } var refreshFunction = function(functionInstance) { - $http.get("../system/function/" + functionInstance.name + "?namespace=" + $scope.selectedNamespace) + $http.get("../system/function/" + functionInstance.name + getNamespaceSuffix($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 +125,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,41 +215,27 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f }; var refreshData = function (selectedNamespace) { - var previous = $scope.functions; - - 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; - } - } - } - } + var cl = function () { + + $http.get("../system/functions" + getNamespaceSuffix(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 : ""; + + + 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; + } } }); }; - cl(previous); + cl(); } var fetch = function() { - $http.get("../system/functions?namespace=" + $scope.selectedNamespace).then(function(response) { + $http.get("../system/functions" + getNamespaceSuffix($scope.selectedNamespace)).then(function(response) { $scope.functions = response.data; }); }; @@ -267,13 +264,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 +291,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 +351,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 +569,8 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f $mdDialog.show(confirm) .then(function() { var options = { - url: "../system/functions?namespace=" + $scope.selectedNamespace, + + url: "../system/functions" + getNamespaceSuffix($scope.selectedNamespace), data: { functionName: $scope.selectedFunction.name }, @@ -594,7 +592,6 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f }; fetch(); - fetchNamespacesInterval(); } ]); @@ -603,4 +600,8 @@ 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) }) -} \ No newline at end of file +} + +function getNamespaceSuffix(namespace) { + return namespace && namespace.length > 0 ? "?namespace=" + namespace : "" +} \ No newline at end of file diff --git a/gateway/assets/templates/newfunction.html b/gateway/assets/templates/newfunction.html index 891ab185ef..2ee5f68f53 100644 --- a/gateway/assets/templates/newfunction.html +++ b/gateway/assets/templates/newfunction.html @@ -63,7 +63,7 @@

Deploy A New Function

Namespace your function runs in i.e. 'openfaas-fn'. Only namespaces OpenFaaS can manage will show here - + {{ namespace }}