blob: 8f8487d5f11aa287392fb4cd7b913e5f7142b483 [file] [log] [blame]
Matteo Scandolof0577ac2016-03-21 17:27:42 -07001/**
2 * © OpenCORD
3 *
4 * Visit http://guide.xosproject.org/devguide/addview/ for more information
5 *
6 * Created by teone on 3/21/16.
7 */
8
9(function () {
10 'use strict';
11
12 angular.module('xos.ceilometerDashboard')
13 .directive('ceilometerDashboard', function(lodash){
14 return {
15 restrict: 'E',
16 scope: {},
17 bindToController: true,
18 controllerAs: 'vm',
19 templateUrl: 'templates/ceilometer-dashboard.tpl.html',
20 controller: function(Ceilometer){
21
22 this.showStats = false;
23
24 // this open the accordion
25 this.accordion = {
26 open: {}
27 };
28
29 /**
30 * Open the active panel base on the service stored values
31 */
32 this.openPanels = () => {
33 if(Ceilometer.selectedService){
34 this.accordion.open[Ceilometer.selectedService] = true;
35 if(Ceilometer.selectedSlice){
36 this.loadSliceMeter(Ceilometer.selectedSlice, Ceilometer.selectedService);
37 this.selectedSlice = Ceilometer.selectedSlice;
38 if(Ceilometer.selectedResource){
39 this.selectedResource = Ceilometer.selectedResource;
40 }
41 }
42 }
43 };
44
45 /**
46 * Load the list of service and slices
47 */
48
49 this.loadMappings = () => {
50 this.loader = true;
51 Ceilometer.getMappings()
52 .then((services) => {
53
54 // rename thing in UI
55 services.map((service) => {
56 if(service.service === 'service_ONOS_vBNG'){
57 service.service = 'ONOS_FABRIC';
58 }
59 if(service.service === 'service_ONOS_vOLT'){
60 service.service = 'ONOS_CORD';
61 }
62
63 service.slices.map(s => {
64 if(s.slice === 'mysite_onos_volt'){
65 s.slice = 'ONOS_CORD';
66 }
67 if(s.slice === 'mysite_onos_vbng'){
68 s.slice = 'ONOS_FABRIC';
69 }
70 if(s.slice === 'mysite_vbng'){
71 s.slice = 'mysite_vRouter';
72 }
73 });
74
75 return service;
76 });
77 // end rename thing in UI
78
79 this.services = services;
80 this.openPanels();
81 })
82 .catch(err => {
83 this.error = (err.data && err.data.detail) ? err.data.detail : 'An Error occurred. Please try again later.';
84 })
85 .finally(() => {
86 this.loader = false;
87 });
88 };
89
90 this.loadMappings();
91
92 /**
93 * Load the list of a single slice
94 */
95
96 this.loadSliceMeter = (slice, service_name) => {
97
98 Ceilometer.selectedSlice = null;
99 Ceilometer.selectedService = null;
100 Ceilometer.selectedResources = null;
101
102 // visualization info
103 this.loader = true;
104 this.error = null;
105 this.ceilometerError = null;
106
107 Ceilometer.getMeters({tenant: slice.project_id})
108 .then((sliceMeters) => {
109 this.selectedSlice = slice.slice;
110 this.selectedTenant = slice.project_id;
111
112 // store the status
113 Ceilometer.selectedSlice = slice;
114 Ceilometer.selectedService = service_name;
115
116 // rename things in UI
117 sliceMeters.map(m => {
118 m.resource_name = m.resource_name.replace('mysite_onos_vbng', 'ONOS_FABRIC');
119 m.resource_name = m.resource_name.replace('mysite_onos_volt', 'ONOS_CORD');
120 m.resource_name = m.resource_name.replace('mysite_vbng', 'mysite_vRouter');
121 return m;
122 });
123 // end rename things in UI
124
125 this.selectedResources = lodash.groupBy(sliceMeters, 'resource_name');
126
127 // hacky
128 if(Ceilometer.selectedResource){
129 this.selectedMeters = this.selectedResources[Ceilometer.selectedResource];
130 }
131 })
132 .catch(err => {
133
134 // this means that ceilometer is not yet ready
135 if(err.status === 503){
136 return this.ceilometerError = err.data.detail.specific_error;
137 }
138
139 this.error = (err.data && err.data.detail && err.data.detail.specific_error) ? err.data.detail.specific_error : 'An Error occurred. Please try again later.';
140 })
141 .finally(() => {
142 this.loader = false;
143 });
144 };
145
146 /**
147 * Select Meters for a resource
148 *
149 * @param Array meters The list of selected resources
150 * @returns void
151 */
152 this.selectedMeters = null;
153 this.selectMeters = (meters, resource) => {
154 this.selectedMeters = meters;
155
156 Ceilometer.selectedResource = resource;
157 this.selectedResource = resource;
158 }
159
160 }
161 };
162 })
163})();
164