blob: 0dfa92b4fa11b6932344bd36217d01634e749368 [file] [log] [blame]
Matteo Scandoloe3de73d2015-12-04 10:14:40 -08001'use strict';
2
3angular.module('xos.ceilometerDashboard', [
4 'ngResource',
5 'ngCookies',
6 'ngLodash',
7 'ui.router',
8 'xos.helpers',
Matteo Scandolo52193d32015-12-05 18:44:45 -08009 // 'angularCharts',
10 'chart.js'
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080011])
12.config(($stateProvider) => {
13 $stateProvider
14 .state('ceilometerDashboard', {
15 url: '/',
16 template: '<ceilometer-dashboard></ceilometer-dashboard>'
Matteo Scandoloec8ad422015-12-04 15:55:20 -080017 })
18 .state('samples', {
19 url: '/:name/:tenant/samples',
20 template: '<ceilometer-samples></ceilometer-samples>'
Matteo Scandolo52193d32015-12-05 18:44:45 -080021 })
22 .state('split', {
23 url: '/split',
24 controller: () => {
25 console.log('split', Split);
26 Split(['#one', '#two', '#three'], {
27
28 });
29 },
30 templateUrl: 'templates/split.html'
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080031 });
32})
33.config(function($httpProvider){
34 $httpProvider.interceptors.push('NoHyperlinks');
35})
Matteo Scandoloec8ad422015-12-04 15:55:20 -080036.service('Ceilometer', function($http, $q){
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080037 this.getMeters = () => {
38 let deferred = $q.defer();
39
Matteo Scandoloec8ad422015-12-04 15:55:20 -080040 $http.get('xoslib/meters/', {cache: true})
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080041 .then((res) => {
Matteo Scandoloec8ad422015-12-04 15:55:20 -080042 deferred.resolve(res.data)
43 })
44 .catch((e) => {
45 deferred.reject(e);
46 });
47
48 return deferred.promise;
49 }
50
51 this.getSamples = (name, tenant) => {
52 let deferred = $q.defer();
53
54 $http.get(`xoslib/metersamples/`, {params: {meter: name, tenant: tenant}})
55 .then((res) => {
56 deferred.resolve(res.data)
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080057 })
58 .catch((e) => {
59 deferred.reject(e);
60 });
61
62 return deferred.promise;
63 }
64})
Matteo Scandoloec8ad422015-12-04 15:55:20 -080065.directive('ceilometerDashboard', function(lodash){
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080066 return {
67 restrict: 'E',
68 scope: {},
69 bindToController: true,
70 controllerAs: 'vm',
71 templateUrl: 'templates/ceilometer-dashboard.tpl.html',
72 controller: function(Ceilometer){
73
74 this.loadMeters = () => {
75 this.loader = true;
76
77 Ceilometer.getMeters()
78 .then(meters => {
Matteo Scandoloec8ad422015-12-04 15:55:20 -080079 this.projects = lodash.groupBy(meters, 'project_name');
80 lodash.forEach(Object.keys(this.projects), (project) => {
81 this.projects[project] = lodash.groupBy(this.projects[project], 'resource_id');
82 });
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080083 })
84 .catch(err => {
85 this.err = err;
86 })
87 .finally(() => {
88 this.loader = false;
89 });
90 }
91
92 this.loadMeters();
93
Matteo Scandoloe3de73d2015-12-04 10:14:40 -080094 }
95 };
Matteo Scandoloec8ad422015-12-04 15:55:20 -080096})
97.directive('ceilometerSamples', function(lodash, $stateParams){
98 return {
99 restrict: 'E',
100 scope: {
101 name: '=name',
102 tenant: '=tenant'
103 },
104 bindToController: true,
105 controllerAs: 'vm',
106 templateUrl: 'templates/ceilometer-samples.tpl.html',
107 controller: function(Ceilometer) {
108
109 if($stateParams.name && $stateParams.tenant){
110 this.name = $stateParams.name;
111 this.tenant = $stateParams.tenant;
112 }
113
114 this.formatDateLabels = (date) => {
115 // date = new Date(date);
116 // return `${date.getMonth()}/${date.getYear()}`
117 return date;
118 };
119
120 this.formatSamplesData = (data) => {
121
122 let formatted = [];
123
124 lodash.forEach(data, (item) => {
125 formatted.push({
126 x: this.formatDateLabels(item.timestamp),
127 y: [item.volume]
128 });
129 });
130
131 return lodash.sortBy(formatted, 'timestamp');
132 }
133
Matteo Scandolo52193d32015-12-05 18:44:45 -0800134 this.getLabels = (data) => {
135 return data.reduce((list, item) => {
136 let date = new Date(item.timestamp);
137 list.push(`${date.getHours()}:${(date.getMinutes()<10?'0':'') + date.getMinutes()}:${date.getSeconds()}`);
138 return list;
139 }, []);
140 };
141
142 this.getData = (data) => {
143 return data.reduce((list, item) => {
144 list.push(item.volume);
145 return list;
146 }, []);
147 }
148
Matteo Scandoloec8ad422015-12-04 15:55:20 -0800149 this.showSamples = () => {
150 this.loader = true;
151 Ceilometer.getSamples(this.name, this.tenant)
152 .then(res => {
Matteo Scandolo52193d32015-12-05 18:44:45 -0800153 res = lodash.sortBy(res, 'timestamp');
154 this.chart = {
155 series: [this.name],
156 labels: this.getLabels(res),
157 data: [this.getData(res)]
Matteo Scandoloec8ad422015-12-04 15:55:20 -0800158 }
159 })
160 .catch(err => {
161 console.warn(err);
162 })
163 .finally(() => {
164 this.loader = false;
165 });
166 };
167
168 this.showSamples();
Matteo Scandoloec8ad422015-12-04 15:55:20 -0800169 }
170 }
Matteo Scandoloe3de73d2015-12-04 10:14:40 -0800171});