| |
| /* |
| * Copyright 2017-present Open Networking Foundation |
| |
| * 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. |
| */ |
| |
| |
| /** |
| * © OpenCORD |
| * |
| * Visit http://guide.xosproject.org/devguide/addview/ for more information |
| * |
| * Created by teone on 3/21/16. |
| */ |
| |
| (function () { |
| 'use strict'; |
| |
| angular.module('xos.ceilometerDashboard') |
| .directive('ceilometerDashboard', function(_){ |
| return { |
| restrict: 'E', |
| scope: {}, |
| bindToController: true, |
| controllerAs: 'vm', |
| templateUrl: 'templates/ceilometer-dashboard.tpl.html', |
| controller: function(Ceilometer){ |
| |
| this.showStats = false; |
| |
| // this open the accordion |
| this.accordion = { |
| open: {} |
| }; |
| |
| /** |
| * Open the active panel base on the service stored values |
| */ |
| this.openPanels = () => { |
| if(Ceilometer.selectedService){ |
| this.accordion.open[Ceilometer.selectedService] = true; |
| if(Ceilometer.selectedSlice){ |
| this.loadSliceMeter(Ceilometer.selectedSlice, Ceilometer.selectedService); |
| this.selectedSlice = Ceilometer.selectedSlice; |
| if(Ceilometer.selectedResource){ |
| this.selectedResource = Ceilometer.selectedResource; |
| } |
| } |
| } |
| }; |
| |
| /** |
| * Load the list of service and slices |
| */ |
| this.loadMappings = () => { |
| this.loader = true; |
| Ceilometer.getMappings() |
| .then((services) => { |
| |
| // rename thing in UI |
| services.map((service) => { |
| if(service.service === 'service_ONOS_vBNG'){ |
| service.service = 'ONOS_FABRIC'; |
| } |
| if(service.service === 'service_ONOS_vOLT'){ |
| service.service = 'ONOS_CORD'; |
| } |
| |
| service.slices.map(s => { |
| if(s.slice === 'mysite_onos_volt'){ |
| s.slice = 'ONOS_CORD'; |
| } |
| if(s.slice === 'mysite_onos_vbng'){ |
| s.slice = 'ONOS_FABRIC'; |
| } |
| if(s.slice === 'mysite_vbng'){ |
| s.slice = 'mysite_vRouter'; |
| } |
| }); |
| |
| return service; |
| }); |
| // end rename thing in UI |
| |
| this.services = services; |
| this.openPanels(); |
| }) |
| .catch(err => { |
| this.error = (err.data && err.data.detail) ? err.data.detail : 'An Error occurred. Please try again later.'; |
| }) |
| .finally(() => { |
| this.loader = false; |
| }); |
| }; |
| |
| this.loadMappings(); |
| |
| /** |
| * Load the list of a single slice |
| */ |
| this.loadSliceMeter = (slice, service_name) => { |
| |
| Ceilometer.selectedSlice = null; |
| Ceilometer.selectedService = null; |
| Ceilometer.selectedResources = null; |
| |
| // visualization info |
| this.loader = true; |
| this.error = null; |
| this.ceilometerError = null; |
| |
| Ceilometer.getMeters({tenant: slice.project_id}) |
| .then((sliceMeters) => { |
| this.selectedSlice = slice.slice; |
| this.selectedTenant = slice.project_id; |
| |
| // store the status |
| Ceilometer.selectedSlice = slice; |
| Ceilometer.selectedService = service_name; |
| |
| // rename things in UI |
| sliceMeters.map(m => { |
| m.resource_name = m.resource_name.replace('mysite_onos_vbng', 'ONOS_FABRIC'); |
| m.resource_name = m.resource_name.replace('mysite_onos_volt', 'ONOS_CORD'); |
| m.resource_name = m.resource_name.replace('mysite_vbng', 'mysite_vRouter'); |
| return m; |
| }); |
| // end rename things in UI |
| |
| this.selectedResources = _.groupBy(sliceMeters, 'resource_name'); |
| |
| // hacky |
| if(Ceilometer.selectedResource){ |
| this.selectedMeters = this.selectedResources[Ceilometer.selectedResource]; |
| } |
| }) |
| .catch(err => { |
| |
| // this means that ceilometer is not yet ready |
| if(err.status === 503){ |
| return this.ceilometerError = err.data.detail.specific_error; |
| } |
| |
| this.ceilometerError = (err.data && err.data.detail && err.data.detail.specific_error) ? err.data.detail.specific_error : 'An Error occurred. Please try again later.'; |
| }) |
| .finally(() => { |
| this.loader = false; |
| }); |
| }; |
| |
| /** |
| * Select Meters for a resource |
| * |
| * @param Array meters The list of selected resources |
| * @returns void |
| */ |
| this.selectedMeters = null; |
| this.selectMeters = (meters, resource) => { |
| this.selectedMeters = meters; |
| |
| Ceilometer.selectedResource = resource; |
| this.selectedResource = resource; |
| } |
| |
| } |
| }; |
| }) |
| })(); |
| |