kloudbuster/kb_web/app/scripts/controllers/config.js

537 lines
16 KiB
JavaScript

//Copyright 2015 Cisco Systems, Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
//not use this file except in compliance with the License. You may obtain
//a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
//License for the specific language governing permissions and limitations
//under the License.
'use strict';
/**
* @ngdoc function
* @name kbWebApp.controller:AboutCtrl
* @description
* # ConfigCtrl
* Controller of the kbWebApp
*/
angular.module('kbWebApp')
.controller('ConfigCtrl', function ($scope, $http, $location, showAlert, kbHttp, kbCookie, locationChange) {
this.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
if(kbCookie.getSessionID()==="") $location.path('/Login');
else kbCookie.checkMode('http');
//---------------------------------top navigation bar---------------------------------
$(window).on('hashchange', locationChange.change());
$scope.sessionID=kbCookie.getSessionID();
$scope.status=kbCookie.getStatus();
//------------------------------------------------------
$scope.dashstatus1="active";
$scope.dashstatus1vis=true;
$scope.dashstatus2="";
$scope.dashstatus2vis=false;
$scope.dashstatus3="";
$scope.dashstatus3vis=false;
$scope.setDashStatus = function(dashNum){
if(dashNum===1){
$scope.dashstatus2="";
$scope.dashstatus2vis=false;
$scope.dashstatus3="";
$scope.dashstatus3vis=false;
$scope.dashstatus1="active";
$scope.dashstatus1vis=true;
}
else if (dashNum===2){
$scope.dashstatus1="";
$scope.dashstatus1vis=false;
$scope.dashstatus3="";
$scope.dashstatus3vis=false;
$scope.dashstatus2="active";
$scope.dashstatus2vis=true;
}
else if (dashNum===3){
$scope.dashstatus1="";
$scope.dashstatus1vis=false;
$scope.dashstatus2="";
$scope.dashstatus2vis=false;
$scope.dashstatus3="active";
$scope.dashstatus3vis=true;
}
};
//----------------------------topology------------------------------
var userData;
$scope.setUserData = function(top){
var count = 1;
var x;
for(x in top){
userData.push({"id":count++,"firstName":top[x]});
}
$scope.listA = userData.slice(0,userData.length);
$scope.items = userData;
};
// init
function init()
{
$scope.selectedA = [];
$scope.selectedB = [];
$scope.selectedC = [];
userData=[];
$scope.listA = [];
$scope.listB = [];
$scope.listC = [];
$scope.toggle=false;
}
init();
//$scope.checkedA = false;
//$scope.checkedB = false;
function arrayObjectIndexOf(myArray, searchTerm, property) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i][property] === searchTerm) return i;
}
return -1;
}
function arrayObjectIndexOf2(myArray, searchTerm) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i] === searchTerm) return i;
}
return -1;
}
$scope.aToB = function() {
for (var i in $scope.selectedA) {
var moveId = arrayObjectIndexOf($scope.items, $scope.selectedA[i], "id");
$scope.listB.push($scope.items[moveId]);
var delId = arrayObjectIndexOf($scope.listA, $scope.selectedA[i], "id");
$scope.listA.splice(delId,1);
}
reset();
};
$scope.aToC = function() {
for (var i in $scope.selectedA) {
var moveId = arrayObjectIndexOf($scope.items, $scope.selectedA[i], "id");
$scope.listC.push($scope.items[moveId]);
var delId = arrayObjectIndexOf($scope.listA, $scope.selectedA[i], "id");
$scope.listA.splice(delId,1);
}
reset();
};
$scope.bToA = function() {
for (var i in $scope.selectedB) {
var moveId = arrayObjectIndexOf($scope.items, $scope.selectedB[i], "id");
$scope.listA.push($scope.items[moveId]);
var delId = arrayObjectIndexOf($scope.listB, $scope.selectedB[i], "id");
$scope.listB.splice(delId,1);
}
reset();
};
$scope.cToA = function() {
for (var i in $scope.selectedC) {
var moveId = arrayObjectIndexOf($scope.items, $scope.selectedC[i], "id");
$scope.listA.push($scope.items[moveId]);
var delId = arrayObjectIndexOf($scope.listC, $scope.selectedC[i], "id");
$scope.listC.splice(delId,1);
}
reset();
};
function reset(){
$scope.selectedA=[];
$scope.selectedB=[];
$scope.selectedC=[];
$scope.toggle=false;
}
$scope.toggleA = function() {
if ($scope.selectedA.length>0) {
reset();
}
else {
for (var i in $scope.listA) {
$scope.selectedB=[];
$scope.selectedC=[];
$scope.selectedA.push($scope.listA[i].id);
}
}
};
$scope.toggleB = function() {
if ($scope.selectedB.length>0) {
reset();
}
else {
for (var i in $scope.listB) {
$scope.selectedA=[];
$scope.selectedC=[];
$scope.selectedB.push($scope.listB[i].id);
}
}
};
$scope.toggleC = function() {
if ($scope.selectedC.length>0) {
reset();
}
else {
for (var i in $scope.listC) {
$scope.selectedA=[];
$scope.selectedB=[];
$scope.selectedC.push($scope.listC[i].id);
}
}
};
$scope.selectA = function(i) {
var delId = arrayObjectIndexOf2($scope.selectedA, i);
//console.log(delId,i);
if(delId===-1)
$scope.selectedA.push(i);
else
$scope.selectedA.splice(delId,1);
};
$scope.selectB = function(i) {
var delId = arrayObjectIndexOf2($scope.selectedB, i);
//console.log(delId,i);
if(delId===-1)
$scope.selectedB.push(i);
else
$scope.selectedB.splice(delId,1);
};
$scope.selectC = function(i) {
var delId = arrayObjectIndexOf2($scope.selectedC, i);
//console.log(delId,i);
if(delId===-1)
$scope.selectedC.push(i);
else
$scope.selectedC.splice(delId,1);
};
//-----------------------end of topology---------------------
$scope.checkStatus = function(){
if($scope.sessionID) {
kbHttp.getMethod2("/kloudbuster/status/" + $scope.sessionID)
.then(
function (response) { // .resolve
$scope.status = response.data.status;
kbCookie.setStatus($scope.status);
$scope.configStatus();
},
function (response) { // .reject
console.log("status error");
//console.log(response);
}
);
}
else
{
$scope.status = "NO SESSION ID";
kbCookie.setStatus("");
}
};
$scope.checkStatus();
var disabledStagingConfig=false;
$scope.disableConfig = function(disableId){
$("#"+disableId).find("input,button").each(function() {//show Config
$(this).attr("disabled", "disabled");
//$(this).removeAttr("disabled");
});
};
$scope.enableConfig = function(enableId){
$("#"+enableId).find("input,button").each(function() {//disable Config
//$(this).attr("disabled", "disabled");
$(this).removeAttr("disabled");
});
};
$scope.configStatus = function(){
if($scope.status === "READY")//show all config
{
if(disabledStagingConfig===true)
{
disabledStagingConfig=false;
$scope.enableConfig("stagingConfig2");
$scope.enableConfig("getButton");
$("md-radio-button").removeAttr("disabled");
}
}
else//no config can be modified
{
if(disabledStagingConfig===false)
{
disabledStagingConfig=true;
$scope.disableConfig("stagingConfig2");
$scope.disableConfig("getButton");
$("md-radio-button").attr("disabled", "disabled");
}
}
if(kbCookie.getIsOneCloud()===false)
{
$scope.disableConfig("topology");
}
};
$scope.getTopology = function() {
kbHttp.getMethod("/config/hypervisor_list/" + $scope.sessionID)
.then(
function (response) { // 调用承诺API获取数据 .resolve
$scope.setUserData(response.data.server);
//console.log("get hypervisor list");
},
function (response) { // 处理错误 .reject
console.log("get hypervisor list error:");
console.log(response);
//if (response.status == 400)
// showAlert.showAlert("Cannot get the hypervisor list!");
//else if (response.status == 404)
// showAlert.showAlert("The session_id is not found or invalid!");
//else if (response.status == -1)
// showAlert.showAlert("Cannot get the hypervisor list!");
}
)
};
//$scope.getTopology();
$scope.getDefaultConfig = function() {
kbHttp.getMethod("/config/default_config")
.then(
function(response) { // .resolve
kbCookie.setConfig(response.data);
$scope.config =response.data;
$scope.config.server.flavor.disk==0?$scope.choose_disk_size1=0:$scope.choose_disk_size1=1;
$scope.config.client.flavor.disk==0?$scope.choose_disk_size2=0:$scope.choose_disk_size2=1;
console.log("get & save default config");
},
function(response) { // .reject
//console.log("get default config error:");
//console.log(response);
showAlert.showAlert("Cannot get the Default Configuration!");
}
);
//$scope.config =JSON.stringify(response);
$scope.getTopology();
kbCookie.setTopology("");
$scope.availability_zone=1;
userData=[];
init();
};
$scope.getRunConfig = function() {
$scope.availability_zone=1;
kbHttp.getMethod("/config/running_config/" + $scope.sessionID)
.then(
function (response) { // .resolve
kbCookie.setConfig(response.data);
$scope.config = response.data;
$scope.config.server.flavor.disk==0?$scope.choose_disk_size1=0:$scope.choose_disk_size1=1;
$scope.config.client.flavor.disk==0?$scope.choose_disk_size2=0:$scope.choose_disk_size2=1;
if(($scope.config.server.availability_zone!=null && $scope.config.server.availability_zone!="") || ($scope.config.client.availability_zone!=null && $scope.client.server.availability_zone!=""))
{
$scope.availability_zone=2;
}
console.log("get & save running config");
},
function (response) { // .reject
console.log("get running config error:");
console.log(response);
}
);
kbHttp.getMethod("/config/az_list/" + $scope.sessionID)
.then(
function (response) { // .resolve
if(kbCookie.getIsOneCloud()===false)//two clouds
{
$scope.serversides = response.data.server;
$scope.clientsides = response.data.client;
}
else{//one clouds
$scope.serversides = response.data.server;
$scope.clientsides = response.data.server;
}
},
function (response) { // .reject
console.log("get AZ list error:");
console.log(response);
}
);
init();
$scope.getTopology();
kbHttp.getMethod("/config/topology_config/" + $scope.sessionID)
.then(
function (response) { // .resolve
//kbCookie.setConfig(response.data);
//$scope.config = response.data;
if(response.data!="null" && (response.data.servers_rack.length!=0 || response.data.clients_rack.length!=0))
{
$scope.availability_zone=3;
$scope.topology = {"servers_rack": response.data.servers_rack, "clients_rack": response.data.clients_rack};
kbCookie.setTopology($scope.topology);
console.log(response.data);
for (var i in $scope.topology.servers_rack) {
var moveId = arrayObjectIndexOf($scope.items, $scope.topology.servers_rack[i], "firstName");
$scope.listC.push($scope.items[moveId]);
var delId = arrayObjectIndexOf($scope.listA, $scope.topology.servers_rack[i], "firstName");
$scope.listA.splice(delId,1);
}
for (var i in $scope.topology.clients_rack) {
var moveId = arrayObjectIndexOf($scope.items, $scope.topology.clients_rack[i], "firstName");
$scope.listB.push($scope.items[moveId]);
var delId = arrayObjectIndexOf($scope.listA, $scope.topology.clients_rack[i], "firstName");
$scope.listA.splice(delId,1);
}
}
console.log("get & save topology config");
},
function (response) { // .reject
console.log("get topology config error:");
console.log(response);
}
);
};
$scope.getRunConfig();
$scope.changeConfig = function() {
if($scope.status==="READY"|| $scope.status==="") {
if ($scope.server.$valid == true && $scope.general.$valid == true && $scope.client.$valid == true) {
kbCookie.setConfig($scope.config);
if ($scope.availability_zone == 3) {
$scope.topology = {"servers_rack": [], "clients_rack": []};
for (var t in $scope.listC) {
$scope.topology.servers_rack.push($scope.listC[t].firstName);
}
for (var t in $scope.listB) {
$scope.topology.clients_rack.push($scope.listB[t].firstName);
}
kbCookie.setTopology($scope.topology);
//console.log($scope.topology);
}
else {
kbCookie.setTopology({"servers_rack": "", "clients_rack": ""});
}
$scope.chaCon = {"kb_cfg": {}, "topo_cfg": {}};
$scope.chaCon.kb_cfg = kbCookie.getConfig();
$scope.chaCon.topo_cfg = kbCookie.getTopology();
console.log($scope.chaCon);
kbHttp.putMethod("/config/running_config/" + $scope.sessionID, $scope.chaCon)
.then(
function (response) { // .resolve
console.log("change running config");
//showAlert.showAlert("Configuration updated successfully!");
},
function (response) { // .reject
//console.log("change running config error:");
//console.log(response);
showAlert.showAlert("Failed to update configuration!");
}
)
}
else{
showAlert.showAlert("Please check your inputs!");
}
}
else{
//console.log("config not allow to change now!");
showAlert.showAlert("Configuration cannot be changed now!");
}
};
$scope.changeTopology = function(){
if($scope.availability_zone==1)
{
$scope.config.server.availability_zone = "";
$scope.config.client.availability_zone = "";
$scope.topology = {};
kbCookie.setTopology({"servers_rack":"", "clients_rack": ""});
init();
$scope.getTopology();
}
else if($scope.availability_zone==2)
{
$scope.topology = {};
kbCookie.setTopology({"servers_rack":"", "clients_rack": ""});
init();
$scope.getTopology();
}
else if($scope.availability_zone==3)
{
//$scope.getTopology();
$scope.config.server.availability_zone = "";
$scope.config.client.availability_zone = "";
}
};
});
//.config(function($mdThemingProvider) {
// // Configure a dark theme with primary foreground yellow
// $mdThemingProvider.theme('docs-dark', 'default')
// .primaryPalette('yellow')
// .dark();
//});