Add a message handler for Openstack Telemetry view
Change-Id: I2803ac6e8f3c90e005bc73c43a5b867934daa80f
diff --git a/apps/openstacktelemetry/app/src/main/resources/app/view/openstacktelemetry/openstacktelemetry.js b/apps/openstacktelemetry/app/src/main/resources/app/view/openstacktelemetry/openstacktelemetry.js
new file mode 100644
index 0000000..129eaaf
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/main/resources/app/view/openstacktelemetry/openstacktelemetry.js
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2016-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.
+ */
+
+/*
+ ONOS GUI -- Openstack Telemetry View Module
+ */
+(function () {
+ 'use strict';
+
+ // injected references
+ var $log, $scope, $location, ks, fs, cbs, ns;
+
+ var hasFlow;
+
+ var gFlowId;
+ var gPeriod;
+
+ var labels = new Array(1);
+ var data = new Array(2);
+ for (var i = 0; i < 2; i++) {
+ data[i] = new Array(1);
+ }
+
+ var max;
+
+ function ceil(num) {
+ if (isNaN(num)) {
+ return 0;
+ }
+ var pre = num.toString().length - 1
+ var pow = Math.pow(10, pre);
+ return (Math.ceil(num / pow)) * pow;
+ }
+
+ function maxInArray(array) {
+ var merged = [].concat.apply([], array);
+ return Math.max.apply(null, merged);
+ }
+
+ angular.module('ovOpenstacktelemetry', ["chart.js"])
+ .controller('OvOpenstacktelemetryCtrl',
+ ['$log', '$scope', '$location', 'FnService', 'ChartBuilderService', 'NavService',
+
+ function (_$log_, _$scope_, _$location_, _fs_, _cbs_, _ns_) {
+ var params;
+ $log = _$log_;
+ $scope = _$scope_;
+ $location = _$location_;
+ fs = _fs_;
+ cbs = _cbs_;
+ ns = _ns_;
+
+ params = $location.search();
+
+ if (params.hasOwnProperty('flowOpt')) {
+ $scope.flowOpt = params['flowOpt'];
+ hasFlow = true;
+ } else if (params.hasOwnProperty('periodOpt')) {
+ $scope.periodOpt = params['periodOpt'];
+ hasFlow = true;
+ } else {
+ hasFlow = false;
+ }
+
+ cbs.buildChart({
+ scope: $scope,
+ tag: 'openstacktelemetry',
+ query: params
+ });
+
+ $scope.$watch('chartData', function () {
+ if (!fs.isEmptyObject($scope.chartData)) {
+ $scope.showLoader = false;
+ var length = $scope.chartData.length;
+ labels = new Array(length);
+ for (var i = 0; i < 2; i++) {
+ data[i] = new Array(length);
+ }
+
+ $scope.chartData.forEach(function (cm, idx) {
+ data[0][idx] = (cm.curr_acc_packet - cm.prev_acc_packet);
+ data[1][idx] = (cm.curr_acc_byte - cm.prev_acc_byte);
+
+ labels[idx] = cm.label;
+ });
+ }
+
+ max = maxInArray(data)
+ $scope.labels = labels;
+ $scope.data = data;
+ $scope.options = {
+ scaleOverride : true,
+ scaleSteps : 10,
+ scaleStepWidth : ceil(max) / 10,
+ scaleStartValue : 0,
+ scaleFontSize : 16
+ };
+ $scope.onClick = function (points, evt) {
+ var label = labels[points[0]._index];
+ if (label) {
+ ns.navTo('openstacktelemetry', { flowOpt: label });
+ $log.log(label);
+ }
+ };
+
+ if (!fs.isEmptyObject($scope.annots)) {
+ $scope.flowIds = JSON.parse($scope.annots.flowIds);
+ $scope.periodOptions = JSON.parse($scope.annots.periodOptions);
+ }
+
+ $scope.onChange = function (flowId) {
+ gFlowId = flowId;
+ ns.navTo('openstacktelemetry', { periodOpt: gPeriod , flowOpt: flowId });
+ };
+
+ $scope.onPeriodChange = function (period) {
+ gPeriod = period;
+ ns.navTo('openstacktelemetry', { periodOpt: period , flowOpt: gFlowId });
+ };
+ });
+
+ $scope.series = ['Current Packet', 'Current Byte'];
+
+ $scope.labels = labels;
+ $scope.data = data;
+
+ $scope.chartColors = [
+ '#286090',
+ '#F7464A',
+ '#46BFBD',
+ '#FDB45C',
+ '#97BBCD',
+ '#4D5360',
+ '#8c4f9f'
+ ];
+ Chart.defaults.global.colours = $scope.chartColors;
+
+ $scope.showLoader = true;
+
+ $log.log('OvOpenstacktelemetryCtrl has been created');
+ }]);
+
+}());