'use strict'; angular.module('yardStickGui2App') .controller('MainCtrl', ['$scope', '$state', '$stateParams', 'mainFactory', 'Upload', 'toaster', 'ngDialog', '$localStorage', '$loading', '$interval', function($scope, $state, $stateParams, mainFactory, Upload, toaster, ngDialog, $localStorage, $loading, $interval) { init(); $scope.project = 0; $scope.showloading = false; $scope.showEnvrionment = false; $scope.loadingOPENrc = false; $scope.uuidEnv = null; $scope.showPod = null; $scope.showImage = null; $scope.showContainer = null; $scope.showNextOpenRc = null; $scope.showNextPod = 1; $scope.displayContainerInfo = []; $scope.containerList = [{ value: 'create_influxdb', name: "InfluxDB" }, { value: 'create_grafana', name: "Grafana" }] $scope.$on('$destroy', function() { $interval.cancel($scope.intervalImgae) }); $scope.showImageStatus = 0; function init() { $scope.gotoProject = gotoProject; $scope.gotoEnvironment = gotoEnvironment; $scope.gotoTask = gotoTask; $scope.gotoExcute = gotoExcute; $scope.gotoReport = gotoReport; $scope.deleteEnvItem = deleteEnvItem; $scope.addInfo = addInfo; $scope.submitOpenRcFile = submitOpenRcFile; $scope.uploadFilesPod = uploadFilesPod; $scope.uploadFiles = uploadFiles; $scope.showEnvriomentStatus = showEnvriomentStatus; $scope.openEnvironmentDialog = openEnvironmentDialog; $scope.getEnvironmentList = getEnvironmentList; $scope.gotoDetail = gotoDetail; $scope.addEnvironment = addEnvironment; $scope.createContainer = createContainer; $scope.chooseResult = chooseResult; getEnvironmentList(); } function gotoProject() { $scope.project = 1; } function gotoEnvironment() { $scope.project = 0; } function gotoTask() { $scope.project = 2; } function gotoExcute() { $scope.project = 3; } function gotoReport() { $scope.project = 4; } $scope.skipPod = function skipPod() { $scope.showContainer = 1; } $scope.skipContainer = function skipContainer() { getEnvironmentList(); ngDialog.close(); } $scope.goToImage = function goToImage() { getImageList(); $scope.showImage = 1; } $scope.goToPod = function goToPod() { $scope.showPod = 1; } $scope.goToPodPrev = function goToPodPrev() { $scope.showImage = null; } $scope.skipPodPrev = function skipPodPrev() { $scope.showImage = 1; $scope.showPod = null; } $scope.skipContainerPrev = function skipContainerPrev() { $scope.showPod = 1; $scope.showContainer = null; } $scope.envInfo = [ { name: 'OS_USERNAME', value: '' }, { name: 'OS_PASSWORD', value: '' }, { name: 'OS_PROJECT_NAME', value: '' }, { name: 'EXTERNAL_NETWORK', value: '' } ]; function deleteEnvItem(index) { $scope.envInfo.splice(index, 1); } function addInfo() { var tempKey = null; var tempValue = null; var temp = { name: tempKey, value: tempValue } $scope.envInfo.push(temp); } function submitOpenRcFile() { $scope.showloading = true; var postData = {}; postData['action'] = 'update_openrc'; rebuildEnvInfo(); postData['args'] = {}; postData.args["openrc"] = $scope.postEnvInfo; postData.args['environment_id'] = $scope.uuidEnv; mainFactory.postEnvironmentVariable().post(postData).$promise.then(function(response) { $scope.showloading = false; if (response.status == 1) { $scope.openrcInfo = response.result; toaster.pop({ type: 'success', title: 'create success', body: 'you can go next step', timeout: 3000 }); $scope.showEnvrionment = true; // $scope.showImage = response.status; $scope.showNextOpenRc = 1; } else { toaster.pop({ type: 'error', title: 'fail', body: response.error_msg, timeout: 3000 }); } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } function uploadFiles($file, $invalidFiles) { $scope.openrcInfo = {}; $scope.loadingOPENrc = true; $scope.displayOpenrcFile = $file; timeConstruct($scope.displayOpenrcFile.lastModified); Upload.upload({ url: Base_URL + '/api/v2/yardstick/openrcs', data: { file: $file, 'environment_id': $scope.uuidEnv, 'action': 'upload_openrc' } }).then(function(response) { $scope.loadingOPENrc = false; if (response.data.status == 1) { toaster.pop({ type: 'success', title: 'upload success', body: 'you can go next step', timeout: 3000 }); $scope.openrcInfo = response.data.result; getItemIdDetailforOpenrc(); $scope.showNextOpenRc = 1; } else { toaster.pop({ type: 'error', title: 'fail', body: response.error_msg, timeout: 3000 }); } }, function(error) { $scope.uploadfile = null; toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } //reconstruc EnvInfo function rebuildEnvInfo() { $scope.postEnvInfo = {}; for (var i = 0; i < $scope.envInfo.length; i++) { $scope.postEnvInfo[$scope.envInfo[i].name] = $scope.envInfo[i].value; } } function uploadFilesPod($file, $invalidFiles) { $scope.loadingOPENrc = true; $scope.displayPodFile = $file; timeConstruct($scope.displayPodFile.lastModified); Upload.upload({ url: Base_URL + '/api/v2/yardstick/pods', data: { file: $file, 'environment_id': $scope.uuidEnv, 'action': 'upload_pod_file' } }).then(function(response) { $scope.loadingOPENrc = false; if (response.data.status == 1) { toaster.pop({ type: 'success', title: 'upload success', body: 'you can go next step', timeout: 3000 }); $scope.podData = response.data.result; } else { toaster.pop({ type: 'error', title: 'fail', body: response.error_msg, timeout: 3000 }); } }, function(error) { $scope.uploadfile = null; toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } function timeConstruct(array) { var date = new Date(1398250549490); var Y = date.getFullYear() + '-'; var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; var D = date.getDate() + ' '; var h = date.getHours() + ':'; var m = date.getMinutes() + ':'; var s = date.getSeconds(); $scope.filelastModified = Y + M + D + h + m + s; } //display environment function showEnvriomentStatus() { $scope.showEnvironment = true; } //open Environment dialog function openEnvironmentDialog() { $scope.showEnvrionment = false; $scope.loadingOPENrc = false; $scope.uuidEnv = null; $scope.showPod = null; $scope.showImage = null; $scope.showContainer = null; $scope.showNextOpenRc = null; $scope.showNextPod = 1; $scope.displayContainerInfo = []; $scope.displayPodFile = null; $scope.name = null; $scope.openrcInfo = null; $scope.envInfo = [ { name: 'OS_USERNAME', value: '' }, { name: 'OS_PASSWORD', value: '' }, { name: 'OS_PROJECT_NAME', value: '' }, { name: 'EXTERNAL_NETWORK', value: '' } ]; $scope.displayOpenrcFile = null; $scope.podData = null; $scope.displayContainerInfo = null; ngDialog.open({ preCloseCallback: function(value) { getEnvironmentList(); }, template: 'views/modal/environmentDialog.html', scope: $scope, className: 'ngdialog-theme-default', width: 950, showClose: true, closeByDocument: false }) } function getEnvironmentList() { $loading.start('key'); mainFactory.getEnvironmentList().get().$promise.then(function(response) { $scope.environmentList = response.result.environments; $loading.finish('key'); }, function(error) { $loading.finish('key'); toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } //go to detail page function gotoDetail(ifNew, uuid) { $state.go('app.environmentDetail', { uuid: uuid, ifNew: ifNew }); } function addEnvironment(name) { mainFactory.addEnvName().post({ 'action': 'create_environment', args: { 'name': name } }).$promise.then(function(response) { if (response.status == 1) { toaster.pop({ type: 'success', title: 'create name success', body: 'you can go next step', timeout: 3000 }); $scope.uuidEnv = response.result.uuid; $scope.name = name; } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } $scope.goBack = function goBack() { $state.go('app.projectList'); } $scope.displayContainerInfo = []; function createContainer(selectContainer) { $scope.showloading = true; mainFactory.runAcontainer().post({ 'action': selectContainer.value, 'args': { 'environment_id': $scope.uuidEnv, } }).$promise.then(function(response) { $scope.showloading = false; if (response.status == 1) { toaster.pop({ type: 'success', title: 'create container success', body: 'you can go next step', timeout: 3000 }); setTimeout(function() { getItemIdDetail(); }, 10000); $scope.ifskipOrClose = 1; } else { toaster.pop({ type: 'error', title: 'Wrong', body: response.result, timeout: 3000 }); } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } function getConDetail(id) { mainFactory.containerDetail().get({ 'containerId': id }).$promise.then(function(response) { if (response.status == 1) { // $scope.podData = response.result; $scope.displayContainerInfo.push(response.result.container); } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } function chooseResult(name) { $scope.selectContainer = name; } function getItemIdDetail() { $scope.displayContainerInfo = []; mainFactory.ItemDetail().get({ 'envId': $scope.uuidEnv }).$promise.then(function(response) { if (response.status == 1) { $scope.envName = response.result.environment.name; $scope.containerId = response.result.environment.container_id; if ($scope.containerId != null) { var keysArray = Object.keys($scope.containerId); for (var k in $scope.containerId) { getConDetail($scope.containerId[k]); } } else { $scope.podData = null; } } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } $scope.yardstickImage = { 'yardstick-image': { 'name': 'yardstick-image', 'description': '', 'status': 'N/A' }, 'Ubuntu-16.04': { 'name': 'Ubuntu-16.04', 'description': '', 'status': 'N/A' }, 'cirros-0.3.5': { 'name': 'cirros-0.3.5', 'description': '', 'status': 'N/A' } }; $scope.selectImageList = []; $scope.selectImage = function(name){ $scope.selectImageList.push(name); } $scope.unselectImage = function(name){ var index = $scope.selectImageList.indexOf(name); $scope.selectImageList.splice(index, 1); } $scope.uploadImage = function() { $scope.imageStatus = 0; $scope.showImageStatus = 1; $scope.showloading = true; var updateImageTask = $interval(function(){ mainFactory.ImageList().get({}).$promise.then(function(response){ if(response.status == 1){ var isOk = true; angular.forEach($scope.selectImageList, function(ele){ if(typeof(response.result.images[ele]) != 'undefined' && response.result.images[ele].status == 'ACTIVE'){ $scope.yardstickImage[ele] = response.result.images[ele]; }else{ isOk = false; } }); if(isOk){ $interval.cancel(updateImageTask); $scope.imageStatus = 1; } }else{ mainFactory.errorHandler1(response); } }, function(response){ mainFactory.errorHandler2(response); }); }, 10000); angular.forEach($scope.selectImageList, function(ele){ mainFactory.uploadImage().post({ 'action': 'load_image', 'args': { 'name': ele } }).$promise.then(function(response) { if(response.status == 1){ $scope.showloading = false; $scope.showNextPod = 1; }else{ mainFactory.errorHandler1(response); } }, function(response) { mainFactory.errorHandler2(response); }) }); } function getImageList() { mainFactory.ImageList().get({}).$promise.then(function(response) { if (response.status == 1) { angular.forEach($scope.yardstickImage, function(value, key){ if(typeof(response.result.images[key]) != 'undefined'){ $scope.yardstickImage[key] = response.result.images[key]; } }); $scope.imageStatus = response.result.status; }else{ mainFactory.errorHandler1(response); } }, function(response) { mainFactory.errorHandler2(response); }) } $scope.openDeleteEnv = function openDeleteEnv(id, name) { $scope.deleteName = name; $scope.deleteId = id; ngDialog.open({ template: 'views/modal/deleteConfirm.html', scope: $scope, className: 'ngdialog-theme-default', width: 500, showClose: true, closeByDocument: false }) } $scope.deleteEnv = function deleteEnv() { mainFactory.deleteEnv().delete({ 'env_id': $scope.deleteId }).$promise.then(function(response) { if (response.status == 1) { toaster.pop({ type: 'success', title: 'delete environment success', body: 'you can go next step', timeout: 3000 }); ngDialog.close(); getEnvironmentList(); } else { toaster.pop({ type: 'error', title: 'Wrong', body: response.result, timeout: 3000 }); } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } function getItemIdDetailforOpenrc() { mainFactory.ItemDetail().get({ 'envId': $scope.uuidEnv }).$promise.then(function(response) { if (response.status == 1) { $scope.baseElementInfo = response.result.environment; if ($scope.ifNew != 'true') { $scope.baseElementInfo = response.result.environment; if ($scope.baseElementInfo.openrc_id != null) { getOpenrcDetailForOpenrc($scope.baseElementInfo.openrc_id); } } } else { toaster.pop({ type: 'error', title: 'fail', body: response.error_msg, timeout: 3000 }); } }, function(error) { toaster.pop({ type: 'error', title: 'fail', body: 'unknow error', timeout: 3000 }); }) } //getopenRcid function getOpenrcDetailForOpenrc(openrcId) { mainFactory.getEnvironmentDetail().get({ 'openrc_id': openrcId }).$promise.then(function(response) { $scope.openrcInfo = response.result; buildToEnvInfoOpenrc($scope.openrcInfo.openrc) }, function(response) { toaster.pop({ type: 'error', title: 'error', body: 'unknow error', timeout: 3000 }); }) } //buildtoEnvInfo function buildToEnvInfoOpenrc(object) { var tempKeyArray = Object.keys(object); $scope.envInfo = []; for (var i = 0; i < tempKeyArray.length; i++) { var tempkey = tempKeyArray[i]; var tempValue = object[tempKeyArray[i]]; var temp = { name: tempkey, value: tempValue }; $scope.envInfo.push(temp); } } } ]);