diff --git a/client/cat3/main.html b/client/cat3/main.html index 7aee82223..f55d9bff2 100644 --- a/client/cat3/main.html +++ b/client/cat3/main.html @@ -111,6 +111,7 @@ + diff --git a/client/cat3/src/partials/sections/dashboard/analytics/analytics.js b/client/cat3/src/partials/sections/dashboard/analytics/analytics.js index eb2225dca..42aa1b518 100644 --- a/client/cat3/src/partials/sections/dashboard/analytics/analytics.js +++ b/client/cat3/src/partials/sections/dashboard/analytics/analytics.js @@ -25,6 +25,24 @@ url: "analytics/capacity/", templateUrl: "src/partials/sections/dashboard/analytics/view/capacity.html", controller: "capacityCtrl as capaCtr", + params:{filterView:{period:true,cost:true,viewBy:true,splitUpType:true,org:true}}, + resolve: { + auth: ["$q", function ($q) { + var deferred = $q.defer(); + // instead, go to a different page + if (modulePerms.analyticsBool()) { + // everything is fine, proceed + deferred.resolve(); + } else { + deferred.reject({redirectTo: 'dashboard'}); + } + return deferred.promise; + }] + } + }).state('dashboard.analytics.capacityReport', { + url: "analytics/capacityReport/", + templateUrl: "src/partials/sections/dashboard/analytics/view/capacityReport.html", + controller: "capacityReportCtrl as capRept", params:{filterView:{usage:true,org:true,provi:true,instanceType:true,period:true},dashboardHide:true,otherTab:'Capacity',otherTabView:true,reportHide:true}, resolve: { auth: ["$q", function ($q) { diff --git a/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityCtrl.js b/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityCtrl.js index 41e1ee9ab..500014e5a 100644 --- a/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityCtrl.js +++ b/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityCtrl.js @@ -1,20 +1,107 @@ (function (angular) { "use strict"; angular.module('dashboard.analytics') - .controller('capacityCtrl', ['$scope', '$rootScope', '$state','analyticsServices', 'genericServices','$timeout','$location', '$anchorScroll','$modal',function ($scope,$rootScope,$state,analyticsServices,genSevs,$timeout,$location, $anchorScroll,$modal){ + .controller('capacityCtrl', ['$scope', '$rootScope', '$state','analyticsServices', 'genericServices','$timeout', function ($scope,$rootScope,$state,analyticsServices,genSevs,$timeout){ $rootScope.stateItems = $state.params; //analyticsServices.initFilter(); - $scope.gototab = function(id) { - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash(id); - - // call $anchorScroll() - $anchorScroll(); - }; var capaCtr =this; capaCtr.chartData=[]; capaCtr.splitUp=null; + capaCtr.pieChat={ + option:{}, + totalCoust:'', + data: [] + }; + capaCtr.barChat={ + option:{}, + data: [] + }; + capaCtr.capaGridOptions={ + columnDefs:[], + data:[] + }; + capaCtr.createChart = function() { + capaCtr.pieChat = { + option: { + chart: { + type: 'pieChart', + margin: { + top: 20, + right: 0, + bottom: 60, + left: 0 + }, + height: 300, + x: function (d) { + return d.key; + }, + y: function (d) { + return d.value; + }, + pie: { + valueFormat: function (d) { + return d3.round(d); + } + }, + showLabels: false, + labelType: "value", + labelThreshold: 0.01, + labelSunbeamLayout: true, + legend: {} + } + }, + totalCoust: '', + data: [] + }; + + capaCtr.barChat = { + option: { + chart: { + type: 'multiBarChart', + height: 300, + margin: { + top: 20, + right: 20, + bottom: 60, + left: 60 + }, + duration:1000, + stacked: true, + x: function (d) { + return d.label; + }, + y: function (d) { + return d.value; + }, + showControls: true, + showValues: true, + xAxis: { + axisLabel: 'Aggregate', + showMaxMin: false, + staggerLabels:false + }, + yAxis: { + axisLabel: 'Count', + tickFormat: function (d) { + return d3.round(d); + } + } + } + }, + data: [] + }; + + capaCtr.capaGridOptions = { + enableGridMenu: true, + enableSelectAll: true, + exporterMenuPdf: false, + exporterCsvFilename: 'costFile.csv', + exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")), + onRegisterApi: function (gridApi) { + $scope.gridApi = gridApi; + } + }; + }; capaCtr.getCapacityData=function(fltObj){ var param = { // url: 'src/partials/sections/dashboard/analytics/data/cost.json?org' @@ -34,8 +121,6 @@ genSevs.promiseGet(param).then(function (result) { capaCtr.chartData=result; $rootScope.splitUpCapacities=[]; - capaCtr.serviceCapacity=result.capacity.AWS; - capaCtr.serviceType=Object.keys(capaCtr.serviceCapacity.services)[0]; if(result.splitUpCapacities && Object.keys(result.splitUpCapacities).length >0) { angular.forEach(result.splitUpCapacities, function (val, key) { var a=key.replace(/([A-Z])/g, ' $1').replace(/^./, function(str) { @@ -48,12 +133,178 @@ capaCtr.splitUp = $rootScope.splitUpCapacities[0].val; capaCtr.createLable(result, $rootScope.splitUpCapacities[0].id); } + } else { + capaCtr.createLable(result,'provider'); } - capaCtr.createList(); - }); }; + capaCtr.createLable= function(result,viewType){ + capaCtr.createChart(); + if(result && result.capacity) { + capaCtr.capaGridOptions.data = []; + capaCtr.capaGridOptions.columnDefs = [ + {name: 'name', field: 'name'}, + {name: 'totalCapacity', field: 'capacity.totalCapacity'} + ]; + capaCtr.pieChat.totalCoust = result.capacity.totalCapacity; + capaCtr.pieChat.data = []; + capaCtr.barChat.data = []; + // create bar + //if(viewType === 'ProviderView'){ + capaCtr.capaGridOptions.data = result.splitUpCapacities[viewType]; + if(result.splitUpCapacities && Object.keys(result.splitUpCapacities).length >0 ) { + angular.forEach(result.splitUpCapacities[viewType], function (value) { + capaCtr.pieChat.data.push({ + key: value.name, + value: value.capacity.totalCapacity + }); + }); + } else{ + capaCtr.pieChat.data.push({ + key: result.entity.name, + value: result.capacity.totalCapacity + }); + } + if(result.capacity && result.capacity.AWS && result.capacity.AWS.services) { + capaCtr.serviceCapacity = result.capacity.AWS.services; + angular.forEach(result.capacity.AWS.services, function (valueChild, keyChild) { + var va = []; + capaCtr.capaGridOptions.columnDefs.push({ + name: keyChild, + field: 'capacity.AWS.services.' + keyChild + }); + if(result.splitUpCapacities && Object.keys(result.splitUpCapacities).length >0 ) { + angular.forEach(result.splitUpCapacities[viewType], function (valBar) { + var chVal = ''; + if (valBar.capacity.AWS.services[keyChild]) { + chVal = valBar.capacity.AWS.services[keyChild]; + } else { + chVal = 0; + } + va.push( + { + "label": valBar.name, + "value": chVal + } + ); + }); + } else { + var chVal = ''; + if (result.capacity.AWS.services[keyChild]) { + chVal =result.capacity.AWS.services[keyChild]; + } else { + chVal = 0; + } + va.push( + { + "label": result.entity.name, + "value": chVal + } + ); + } + capaCtr.barChat.data.push({ + "key": keyChild, + "values": va + }); + }); + } + } + }; + capaCtr.trendsChart=function(fltObj){ + capaCtr.trendLineChart={}; + capaCtr.trendLineChart.options = { + chart: { + //type: 'stackedAreaChart', + type: 'lineChart', + height: 350, + margin: { + top: 20, + right: 20, + bottom: 40, + left: 60 + }, + x: function (d) { + return d[0]; + }, + y: function (d) { + return d[1]; + }, + useVoronoi: false, + clipEdge: true, + duration: 1000, + useInteractiveGuideline: true, + xAxis: { + showMaxMin: false, + axisLabel: 'Date', + tickFormat: function (d) { + return d3.time.format('%x')(new Date(d)); + } + }, + yAxis: { + axisLabel: 'Count', + tickFormat: function (d) { + return d3.round(d); + } + }, + zoom: { + enabled: true, + scaleExtent: [1, 10], + useFixedDomain: false, + useNiceScale: false, + horizontalOff: true, + verticalOff: true, + unzoomEventType: 'dblclick.zoom' + } + } + }; + capaCtr.trendLineChart.data = []; + var param = { + url: '' + }; + if(fltObj && fltObj.org){ + var entityId=null; + if(fltObj.provider){ + entityId=fltObj.provider.id; + } else { + entityId=fltObj.org.id; + } + //http://192.168.152.139:3001 + // param.url='/analytics/capacity/trend?parentEntityId='+fltObj.org.id+'&entityId='+fltObj.org.id+'&toTimeStamp='+new Date()+'&period='+fltObj.period+'&interval=86400' + } + + genSevs.promiseGet(param).then(function (result) { + if(result.capacityTrends && result.capacityTrends.length) { + capaCtr.trendLineChart.totalCapacity = result.capacity.totalCapacity; + capaCtr.trendLineChart.data = []; + angular.forEach(result.capacity.AWS.services, function (valueChild, keyChild) { + var va = []; + angular.forEach(result.capacityTrends, function (value) { + var chVal=''; + if(value.capacity.AWS.services[keyChild]){ + chVal=value.capacity.AWS.services[keyChild]; + } else { + chVal=0; + } + va.push([value.fromTime,chVal]); + }); + capaCtr.trendLineChart.data.push({ + "key": keyChild, + "values": va + }); + }); + capaCtr.trendLineChart.data[0].values.push([]); + } + }); + }; + $scope.$on('CHANGE_VIEW', function (event, data) { + if (data) { + capaCtr.splitUp = data.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) { + return str.toUpperCase(); + }); + capaCtr.createLable(capaCtr.chartData, data); + } + }); $rootScope.applyFilter =function(filterApp,period){ analyticsServices.applyFilter(filterApp,period); if($state.current.name === "dashboard.analytics.capacity") { @@ -61,214 +312,16 @@ } }; capaCtr.init =function(){ - $rootScope.organNewEnt.instanceType='Unassigned'; - $rootScope.organNewEnt.provider='0'; - $rootScope.$emit('INI_usage', 'Unassigned'); + analyticsServices.initFilter(); + capaCtr.createChart(); $timeout(function () { $rootScope.applyFilter(true,'month'); + capaCtr.trendsChart($rootScope.filterNewEnt); var treeNames = ['Cloud Management','Analytics','capacity']; $rootScope.$emit('treeNameUpdate', treeNames); },500); }; - // new e################################### - $scope.openChart=function (id) { - $modal.open({ - animation: true, - templateUrl: 'src/partials/sections/dashboard/analytics/view/capacityChart.html', - controller: 'capacityChartCtrl as capChat', - backdrop : 'static', - keyboard: false, - resolve: { - items: function() { - return id; - } - } - }). - result.then(function() { - - }, function() { - - }); - }; - $scope.chefConfig=function (id) { - var promise = genSevs.editRunlist(id); - }; - capaCtr.createList = function () { - capaCtr.listGrid=[]; - var fltrObj=$rootScope.filterNewEnt; - - // for(var value in capaCtr.serviceCapacity) { - var value='RDS'; - capaCtr.listGrid[value]=[]; - capaCtr.listGrid[value].data=[]; - capaCtr.listGrid[value].paginationPageSizes= [25, 50, 100]; - capaCtr.listGrid[value].paginationPageSize=25; - $scope.colArray=['platformId','state','orgName','privateIpAddress','os'] - capaCtr.listGrid[value].columnDefs=[ - {name: 'Instance Id', field: 'platformId', cellTooltip: true}, - {name: 'os', enableFiltering: true,displayName: 'os', field:'os',cellTooltip: true}, - {name: 'privateIpAddress', displayName: 'IP Address',cellTooltip: true}, - {name: 'state', displayName: 'Status',cellTooltip: true}, - {name: 'Region',displayName: 'Region', - field: 'providerData.region', - cellTooltip: true - }, - {name: 'orgName', displayName: 'Org Name', field: 'orgName', cellTooltip: true}, - {name: 'cost', displayName: 'cost',cellTemplate: ''}, - {name: 'Action', cellTooltip: true,cellTemplate:" " + - "   "} - // {name: 'Chef', cellTooltip: true,cellTemplate:""} - ]; - capaCtr.listGrid[value].onRegisterApi=function (gridApi) { - gridApi.grid.registerRowsProcessor($scope.singleFilter, 200); - $scope.gridApi = gridApi; - } - if(fltrObj && fltrObj.provider && fltrObj.provider.id) { - if($rootScope.organNewEnt.instanceType === 'Managed') { - $scope.instanceType= 'managedInstances'; - } else if($rootScope.organNewEnt.instanceType === 'Assigned'){ - $scope.instanceType= 'unmanagedInstances'; - } else if($rootScope.organNewEnt.instanceType === 'Unassigned'){ - $scope.instanceType= 'unassigned-instances'; - } - var param = { - url: '/providers/' + fltrObj.provider.id + '/'+$scope.instanceType - // url:'src/partials/sections/dashboard/analytics/data/ins.json' - }; - genSevs.promiseGet(param).then(function (instResult) { - if($rootScope.organNewEnt.instanceType === 'Managed') { - capaCtr.listGrid[value].data= instResult.managedInstances; - } else if($rootScope.organNewEnt.instanceType === 'Assigned'){ - capaCtr.listGrid[value].data= instResult.unmanagedInstances; - } else if($rootScope.organNewEnt.instanceType === 'Unassigned'){ - capaCtr.listGrid[value].data = instResult.data; - } - }); - } - - //} - }; - $scope.aggregateInstanceCost=function (cost) { - if(cost){ - return cost.symbol+' '+ cost.aggregateInstanceCost; - } else { - return '....'; - } - }; - $scope.Schedule =function (id) { - var a=[]; - a.push(id); - genSevs.scheduleTime(a); - }; - $scope.filterInst = function() { - $scope.gridApi.grid.refresh(); - }; - $scope.singleFilter = function( renderableRows ){ - var matcher = new RegExp(capaCtr.filterValue); - renderableRows.forEach( function( row ) { - var match = false; - angular.forEach($scope.colArray,function( field ){ - if ( row.entity[field] && row.entity[field].match(matcher) ){ - match = true; - } - }); - if ( !match ){ - row.visible = false; - } - }); - return renderableRows; - }; capaCtr.init(); - - }]).controller('capacityChartCtrl',['$scope','$rootScope','items','genericServices','$modalInstance',function($scope,$rootScope,items,genSevs,$modalInstance){ - var capChat=this; - capChat.items=items; - capChat.trendLineChart={ - options:{}, - data:[] - }; - capChat.splitUp='CPUUtilization'; - capChat.trendLineChart.options = { - chart: { - //type: 'stackedAreaChart', - type: 'lineChart', - height: 200, - margin: { - top: 20, - right: 20, - bottom:70, - left: 40 - }, - x: function (d) { - return d[0]; - }, - y: function (d) { - return d[1]; - }, - useVoronoi: false, - clipEdge: true, - duration: 10, - useInteractiveGuideline: true, - xAxis: { - axisLabel: 'Date', - showMaxMin: false, - tickFormat: function (d) { - return d3.time.format('%d/%m %H:%M')(new Date(d)); - } - }, - yAxis: { - tickFormat: function (d) { - return d3.format(',.2f')(d); - } - }, - zoom: { - enabled: true, - scaleExtent: [1, 10], - useFixedDomain: false, - useNiceScale: false, - horizontalOff: true, - verticalOff: true, - unzoomEventType: 'dblclick.zoom' - } - } - }; - capChat.legends=[]; - - capChat.getData=function(fltObj){ - capChat.trendLineChart.data = []; - var $today = new Date(); - var $yesterday = new Date($today); - $yesterday.setDate($today.getDate() - 1); - if(fltObj && fltObj.resources && fltObj.resources.length >0) { - var $today = new Date(); - var $yesterday = new Date($today); - $yesterday.setDate($today.getDate() - 1); - var param = { - url: '/analytics/trend/usage?resource=' + items._id + '&fromTimeStamp=' + $yesterday + '&toTimeStamp=' + $today + '&interval=3600' - //url:'src/partials/sections/dashboard/analytics/data/usage.json' - }; - genSevs.promiseGet(param).then(function (result) { - var va = []; - if (result) { - angular.forEach(result[capChat.splitUp].dataPoints, function (value) { - va.push([Date.parse(value.fromTime), value.average]); - }); - capChat.trendLineChart.data.push({ - "key": items.platformId, - "values": va - }); - } - // } - }); - } - }; - capChat.splitChange=function() { - capChat.getData($rootScope.filterNewEnt); - }; - capChat.getData($rootScope.filterNewEnt); - $scope.cancel = function() { - $modalInstance.dismiss('cancel'); - }; - }]); + }]); })(angular); diff --git a/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityReportCtrl.js b/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityReportCtrl.js new file mode 100644 index 000000000..41159783d --- /dev/null +++ b/client/cat3/src/partials/sections/dashboard/analytics/controller/capacityReportCtrl.js @@ -0,0 +1,358 @@ +(function (angular) { + "use strict"; + angular.module('dashboard.analytics') + .controller('capacityReportCtrl', ['$scope', '$rootScope', '$state','analyticsServices', 'genericServices','$timeout','$location', '$anchorScroll','$modal',function ($scope,$rootScope,$state,analyticsServices,genSevs,$timeout,$location, $anchorScroll,$modal){ + $rootScope.stateItems = $state.params; + //analyticsServices.initFilter(); + $scope.gototab = function(id) { + // set the location.hash to the id of + // the element you wish to scroll to. + $location.hash(id); + + // call $anchorScroll() + $anchorScroll(); + }; + var capRept =this; + capRept.chartData=[]; + capRept.splitUp=null; + capRept.getCapacityData=function(fltObj){ + var param = { + // url: 'src/partials/sections/dashboard/analytics/data/cost.json?org' + url:'' + }; + if(fltObj && fltObj.org){ + var entityId=null; + if(fltObj.provider){ + entityId=fltObj.provider.id; + } else { + entityId=fltObj.org.id; + } + //param.url='http://d4d.rlcatalyst.com/analytics/capacity?parentEntityId=46d1da9a-d927-41dc-8e9e-7e926d927537&entityId=46d1da9a-d927-41dc-8e9e-7e926d927537&toTimeStamp=Mon%20Nov%2014%202016%2010:41:29%20GMT+0530%20(IST)&period=month'; + param.url='/analytics/capacity?parentEntityId='+fltObj.org.id+'&entityId='+entityId+'&toTimeStamp='+new Date()+'&period=month'; + } + + genSevs.promiseGet(param).then(function (result) { + capRept.chartData=result; + $rootScope.splitUpCapacities=[]; + capRept.serviceCapacity=result.capacity.AWS; + + if(result.splitUpCapacities && Object.keys(result.splitUpCapacities).length >0) { + angular.forEach(result.splitUpCapacities, function (val, key) { + var a=key.replace(/([A-Z])/g, ' $1').replace(/^./, function(str) { + return str.toUpperCase(); + }); + $rootScope.splitUpCapacities.push({id:key,val:a}); + }); + if( $rootScope.splitUpCapacities && $rootScope.splitUpCapacities.length >0) { + $scope.$emit('CHANGE_splitUp', $rootScope.splitUpCapacities[0].id); + capRept.splitUp = $rootScope.splitUpCapacities[0].val; + capRept.createLable(result, $rootScope.splitUpCapacities[0].id); + } + } + capRept.createList(); + + }); + }; + + $rootScope.applyFilter =function(filterApp,period){ + analyticsServices.applyFilter(filterApp,period); + if($state.current.name === "dashboard.analytics.capacityReport") { + capRept.getCapacityData($rootScope.filterNewEnt); + } + }; + capRept.init =function(){ + capRept.serviceType='Instance'; + $rootScope.organNewEnt.instanceType='Unassigned'; + $rootScope.organNewEnt.provider='0'; + $rootScope.$emit('INI_usage', 'Unassigned'); + $timeout(function () { + $rootScope.applyFilter(true,'month'); + var treeNames = ['Cloud Management','Analytics','capacity']; + $rootScope.$emit('treeNameUpdate', treeNames); + },500); + }; + // new e################################### + $scope.openChart=function (id) { + $modal.open({ + animation: true, + templateUrl: 'src/partials/sections/dashboard/analytics/view/capacityChart.html', + controller: 'capacityChartCtrl as capChat', + backdrop : 'static', + keyboard: false, + resolve: { + items: function() { + return id; + } + } + }). + result.then(function() { + + }, function() { + + }); + }; + $scope.chefConfig=function (id) { + var promise = genSevs.editRunlist(id); + }; + capRept.createList = function () { + capRept.filterValue=''; + capRept.listGrid=[]; + var fltrObj=$rootScope.filterNewEnt; + + // for(var value in capRept.serviceCapacity) { + var value=capRept.serviceType; + capRept.listGrid[value]=[]; + capRept.listGrid[value].data=[]; + capRept.listGrid[value].paginationPageSizes= [25, 50, 100]; + capRept.listGrid[value].paginationPageSize=25; + $scope.colArray=['platformId','state','orgName','privateIpAddress','os'] + if(capRept.serviceType !== 'S3') { + capRept.listGrid[value].columnDefs = [ + {name: 'Instance Id', field: 'platformId', cellTooltip: true}, + {name: 'os', enableFiltering: true, displayName: 'OS', field: 'os', cellTooltip: true}, + {name: 'privateIpAddress', displayName: 'IP Address', cellTooltip: true}, + {name: 'state', displayName: 'Status', cellTooltip: true}, + { + name: 'Region', displayName: 'Region', + field: 'providerData.region', + cellTooltip: true + }, + {name: 'orgName', displayName: 'Org Name', field: 'orgName', cellTooltip: true}, + { + name: 'cost', + displayName: 'cost', + cellTemplate: '' + }, + { + name: 'Action', + cellTooltip: true, + cellTemplate: " " + + "   " + } + // {name: 'Chef', cellTooltip: true,cellTemplate:""} + ]; + } + if(capRept.serviceType === 'S3'){ + $scope.colArray=['bucketName','bucketOwnerName','orgName'] + capRept.listGrid[value].columnDefs=[ + {name: 'bucketName', field: 'bucketName', cellTooltip: true}, + {name: 'bucketOwnerName', field: 'bucketOwnerName', cellTooltip: true}, + {name: 'bucketSize', field: 'bucketSize', cellTooltip: true}, + {name: 'orgName', field: 'orgName', cellTooltip: true}, + {name: 'cost', displayName: 'cost',cellTemplate: ''}, + {name: 'Action', cellTooltip: true,cellTemplate:" " + + "   "} + ] + } + capRept.listGrid[value].onRegisterApi=function (gridApi) { + gridApi.grid.registerRowsProcessor($scope.singleFilter, 200); + $scope.gridApi = gridApi; + } + + if(capRept.serviceType === 'Instance' && fltrObj && fltrObj.provider && fltrObj.provider.id) { + if($rootScope.organNewEnt.instanceType === 'Managed') { + $scope.instanceType= 'managedInstances'; + } else if($rootScope.organNewEnt.instanceType === 'Assigned'){ + $scope.instanceType= 'unmanagedInstances'; + } else if($rootScope.organNewEnt.instanceType === 'Unassigned'){ + $scope.instanceType= 'unassigned-instances'; + } + var param = { + inlineLoader:true, + url: '/providers/' + fltrObj.provider.id + '/'+$scope.instanceType + // url:'src/partials/sections/dashboard/analytics/data/ins.json' + }; + genSevs.promiseGet(param).then(function (instResult) { + if($rootScope.organNewEnt.instanceType === 'Managed') { + capRept.listGrid[value].data= instResult.managedInstances; + } else if($rootScope.organNewEnt.instanceType === 'Assigned'){ + capRept.listGrid[value].data= instResult.unmanagedInstances; + } else if($rootScope.organNewEnt.instanceType === 'Unassigned'){ + capRept.listGrid[value].data = instResult.data; + } + if(capRept.listGrid[value].data && capRept.listGrid[value].data.length == 0){ + capRept.listGrid[value].nodataFound =true; + } else { + capRept.listGrid[value].nodataFound =false; + } + }); + } else if(fltrObj && fltrObj.provider && fltrObj.provider.id){ + var param = { + inlineLoader:true, + url: '/resources?filterBy=providerId:'+fltrObj.provider.id+'+resourceType:'+capRept.serviceType+'+category:'+$rootScope.organNewEnt.instanceType.toLowerCase() + //url:'?filterBy=providerId:57e3774d4e738a500b342889+resourceType:RDS+category:unassigned' + }; + genSevs.promiseGet(param).then(function (instResult) { + ///// + capRept.listGrid[value].data = instResult.data; + if(capRept.serviceType === 'RDS'){ + angular.forEach(instResult.data,function (va,ke) { + capRept.listGrid[value].data[ke].platformId = va.resourceDetails.dbInstanceIdentifier; + capRept.listGrid[value].data[ke].privateIpAddress = '....'; + capRept.listGrid[value].data[ke].state = va.resourceDetails.dbInstanceStatus; + capRept.listGrid[value].data[ke].providerData={}; + capRept.listGrid[value].data[ke].providerData.region = va.resourceDetails.region; + capRept.listGrid[value].data[ke].orgName = va.masterDetails.orgName; + }); + } + + if(capRept.serviceType === 'S3'){ + angular.forEach(instResult.data,function (va,ke) { + capRept.listGrid[value].data[ke].platformId= va.resourceDetails.bucketName; + capRept.listGrid[value].data[ke].bucketName = va.resourceDetails.bucketName; + capRept.listGrid[value].data[ke].bucketOwnerName = va.resourceDetails.bucketOwnerName; + capRept.listGrid[value].data[ke].bucketSize = va.resourceDetails.bucketSize; + capRept.listGrid[value].data[ke].orgName = va.masterDetails.orgName; + }); + + } + /// + + + if(capRept.listGrid[value].data && capRept.listGrid[value].data.length == 0){ + capRept.listGrid[value].nodataFound =true; + } else { + capRept.listGrid[value].nodataFound =false; + } + }); + } + + //} + }; + $scope.$watch('capRept.serviceType',function (newValue, oldValue) { + capRept.createList(); + }); + $scope.aggregateInstanceCost=function (cost) { + if(cost){ + return cost.symbol+' '+ cost.aggregateInstanceCost; + } else { + return '....'; + } + }; + $scope.Schedule =function (id) { + var a=[]; + a.push(id); + genSevs.scheduleTime(a); + }; + $scope.filterInst = function() { + $scope.gridApi.grid.refresh(); + }; + $scope.singleFilter = function( renderableRows ){ + var matcher = new RegExp(capRept.filterValue); + renderableRows.forEach( function( row ) { + var match = false; + angular.forEach($scope.colArray,function( field ){ + if ( row.entity[field] && row.entity[field].match(matcher) ){ + match = true; + } + }); + if ( !match ){ + row.visible = false; + } + }); + return renderableRows; + }; + capRept.init(); + + + }]).controller('capacityChartCtrl',['$scope','$rootScope','items','genericServices','$modalInstance',function($scope,$rootScope,items,genSevs,$modalInstance){ + var capChat=this; + capChat.items=items; + capChat.trendLineChart={ + options:{}, + data:[] + }; + capChat.result=[]; + capChat.trendLineChart.options = { + chart: { + //type: 'stackedAreaChart', + type: 'lineChart', + height: 200, + margin: { + top: 20, + right: 20, + bottom:70, + left: 40 + }, + x: function (d) { + return d[0]; + }, + y: function (d) { + return d[1]; + }, + useVoronoi: false, + clipEdge: true, + duration: 10, + useInteractiveGuideline: true, + xAxis: { + axisLabel: 'Date', + showMaxMin: false, + tickFormat: function (d) { + return d3.time.format('%d/%m %H:%M')(new Date(d)); + } + }, + yAxis: { + tickFormat: function (d) { + return d3.format(',.2f')(d); + } + }, + zoom: { + enabled: true, + scaleExtent: [1, 10], + useFixedDomain: false, + useNiceScale: false, + horizontalOff: true, + verticalOff: true, + unzoomEventType: 'dblclick.zoom' + } + } + }; + capChat.legends=[]; + + capChat.getData=function(fltObj){ + capChat.trendLineChart.data = []; + capChat.sliptOptions=[]; + var $today = new Date(); + var $yesterday = new Date($today); + $yesterday.setDate($today.getDate() - 1); + if(fltObj && fltObj.resources && fltObj.resources.length >0) { + var $today = new Date(); + var $yesterday = new Date($today); + $yesterday.setDate($today.getDate() - 1); + var param = { + url: '/analytics/trend/usage?resource=' + items._id + '&fromTimeStamp=' + $yesterday + '&toTimeStamp=' + $today + '&interval=3600' + //url:'src/partials/sections/dashboard/analytics/data/usage.json' + }; + genSevs.promiseGet(param).then(function (result) { + angular.forEach(result,function (val,ke) { + capChat.sliptOptions.push(ke); + }); + capChat.splitUp=Object.keys(result)[0]; + capChat.result=result; + capChat.createChart(); + // } + }); + } + }; + capChat.createChart=function () { + var va = []; + capChat.trendLineChart.data = []; + if (capChat.result) { + angular.forEach(capChat.result[capChat.splitUp].dataPoints, function (value) { + va.push([Date.parse(value.fromTime), value.average]); + }); + capChat.trendLineChart.data.push({ + "key": items.platformId, + "values": va + }); + } + }; + capChat.splitChange=function() { + capChat.createChart(); + }; + capChat.getData($rootScope.filterNewEnt); + $scope.cancel = function() { + $modalInstance.dismiss('cancel'); + }; + }]); +})(angular); diff --git a/client/cat3/src/partials/sections/dashboard/analytics/view/analyticsTreeMenu.html b/client/cat3/src/partials/sections/dashboard/analytics/view/analyticsTreeMenu.html index 16f1c72a9..d1c5e54bc 100644 --- a/client/cat3/src/partials/sections/dashboard/analytics/view/analyticsTreeMenu.html +++ b/client/cat3/src/partials/sections/dashboard/analytics/view/analyticsTreeMenu.html @@ -91,7 +91,7 @@ -
  • +
  • diff --git a/client/cat3/src/partials/sections/dashboard/analytics/view/capacity.html b/client/cat3/src/partials/sections/dashboard/analytics/view/capacity.html index d06fd4788..a47c3948b 100644 --- a/client/cat3/src/partials/sections/dashboard/analytics/view/capacity.html +++ b/client/cat3/src/partials/sections/dashboard/analytics/view/capacity.html @@ -1,51 +1,48 @@

    - - - - - - - - - - - - - - - +
    +
    + Total Capacity: {{capaCtr.pieChat.totalCoust}}           + Services + {{value}} : {{key}} + +
    +
    +
    + Segregated by + +
    +
    +
    - -
    +
    +

    Aggregate Capacity

    +
    +
    +
    +
    +
    +
    +

    Distribution of all services across {{capaCtr.splitUp}}

    -

    Instance - - -

    - - - - -
    -
    - -
    -
    -
    - No Data Available. -
    -
    +
    +
    +
    +
    +
    +

    Daily trends of cost across organization

    +
    -
    +
    diff --git a/client/cat3/src/partials/sections/dashboard/analytics/view/capacityChart.html b/client/cat3/src/partials/sections/dashboard/analytics/view/capacityChart.html index 3aed50ff3..a6ae0afe1 100644 --- a/client/cat3/src/partials/sections/dashboard/analytics/view/capacityChart.html +++ b/client/cat3/src/partials/sections/dashboard/analytics/view/capacityChart.html @@ -13,11 +13,8 @@
    diff --git a/client/cat3/src/partials/sections/dashboard/analytics/view/capacityReport.html b/client/cat3/src/partials/sections/dashboard/analytics/view/capacityReport.html new file mode 100644 index 000000000..0eb83d656 --- /dev/null +++ b/client/cat3/src/partials/sections/dashboard/analytics/view/capacityReport.html @@ -0,0 +1,72 @@ +
    +
    + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + + +

    +
    + + + + +
    +
    +
    + + +
    +
    +
    + No Data Available. +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + No Data Available. +
    +
    + +
    +
    + \ No newline at end of file