aggregation-platform/plugins/developer/ts/projectEnvironments.ts

172 lines
6.2 KiB
TypeScript

/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="developerNavigation.ts"/>
module Developer {
export var ProjectEnvironmentsController = controller("ProjectEnvironmentsController",
["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "$element",
($scope, KubernetesModel:Kubernetes.KubernetesModelService, KubernetesState,
$templateCache:ng.ITemplateCacheService, $location:ng.ILocationService, $routeParams, $http, $timeout, KubernetesApiURL, $element) => {
$scope.kubernetes = KubernetesState;
$scope.model = KubernetesModel;
ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list');
Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL);
$scope.breadcrumbConfig = createProjectBreadcrumbs();
$scope.subTabConfig = Developer.createWorkspaceSubNavBars();
$scope.tableConfig = {
data: 'model.environments',
showSelectionCheckbox: true,
enableRowClickSelection: false,
multiSelect: true,
selectedItems: [],
filterOptions: {
filterText: $location.search()["q"] || ''
},
columnDefs: [
{
field: 'order',
displayName: 'Order'
},
{
field: 'name',
displayName: 'Environment',
cellTemplate: $templateCache.get("environmentNameTemplate.html")
},
{
field: 'key',
displayName: 'Actions',
cellTemplate: $templateCache.get("environmentEditTemplate.html")
},
{
field: 'namespace',
displayName: 'Namespace'
},
{
field: 'clusterUrl',
displayName: 'Cluster URL'
}
]
};
var kubeClient = Kubernetes.createKubernetesClient("configmaps");
$scope.editEntityLink = (entity) => {
if (entity) {
var key = entity.key;
if (key) {
return UrlHelpers.join(HawtioCore.documentBase(), '/workspaces', $scope.namespace, "/environments/edit", key);
}
return "";
}
};
$scope.editEntity = () => {
var selectedItems = $scope.tableConfig.selectedItems || [];
if (selectedItems.length) {
var entity = selectedItems[0] || {};
var key = entity.key;
if (key) {
$location.path(UrlHelpers.join('/workspaces', $scope.namespace, "/environments/edit", key));
} else {
log.warn("No key for environment " + angular.toJson(entity));
}
}
};
$scope.deletePrompt = (selected) => {
UI.multiItemConfirmActionDialog(<UI.MultiItemConfirmActionOptions>{
collection: selected,
index: 'label',
onClose: (result:boolean) => {
if (result) {
deleteEnvironments(selected);
}
},
title: 'Delete Environments',
action: 'The following Environments will be deleted:',
okText: 'Delete',
okClass: 'btn-danger',
custom: "This operation is permanent once completed!",
customClass: "alert alert-warning"
}).open();
};
function deleteEnvironments(selected, callback = null) {
var configMap = Kubernetes.getNamed($scope.model.configmaps, Kubernetes.environemntsConfigMapName);
if (configMap) {
var changed = false;
angular.forEach(selected, (entity) => {
var key = (entity || {}).key;
if (key) {
delete configMap.data[key];
changed = true;
}
});
if (changed) {
kubeClient.put(configMap, (data) => {
log.info("Deleted environments " + selected);
if (angular.isFunction(callback)) {
callback();
}
});
}
}
}
$scope.moveEntity = (entity, up, callback = null) => {
var environments = _.sortBy($scope.model.environments, (element) => element['order']);
var index = _.indexOf(environments, entity);
log.info("Moving entity " + entity['key'] + " at index " + index + " up: " + up);
var nextIndex = up ? index - 1 : index + 1;
function getKey(idx) {
if (idx >= 0 || idx < environments.length) {
var env = environments[idx];
return (env || {})['key']
} else {
return null;
}
}
var key1 = getKey(index);
var key2 = getKey(nextIndex);
if (key1 && key2) {
var configMap = Kubernetes.getNamed($scope.model.configmaps, Kubernetes.environemntsConfigMapName);
if (configMap) {
var configMapData = configMap.data;
var data1 = jsyaml.load(configMapData[key1]);
var data2 = jsyaml.load(configMapData[key2]);
var tmp = data1.order || 0;
data1.order = data2.order || 0;
data2.order = tmp;
var yaml1 = jsyaml.safeDump(data1);
var yaml2 = jsyaml.safeDump(data2);
configMapData[key1] = yaml1;
configMapData[key2] = yaml2;
kubeClient.put(configMap, (data) => {
log.info("Switched order of " + key1 + " and " + key2);
log.info("Environments are now: " + angular.toJson(configMapData));
if (angular.isFunction(callback)) {
callback();
}
});
}
} else {
log.warn("Could not find keys for index " + index + " and " + nextIndex + ". Found " + key1 + " and " + key2);
}
};
}]);
}