From 72e5a40e7e9ca9d53d53dfdea22f3bbde6017184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 6 Aug 2014 16:09:26 +0200 Subject: [PATCH] began work on overview panel --- src/app/panels/overview/module.html | 20 +++++ src/app/panels/overview/module.js | 117 ++++++++++++++++++++++++++ src/test/specs/overview-ctrl-specs.js | 40 +++++++++ 3 files changed, 177 insertions(+) create mode 100644 src/app/panels/overview/module.html create mode 100644 src/app/panels/overview/module.js create mode 100644 src/test/specs/overview-ctrl-specs.js diff --git a/src/app/panels/overview/module.html b/src/app/panels/overview/module.html new file mode 100644 index 00000000000..04084088adc --- /dev/null +++ b/src/app/panels/overview/module.html @@ -0,0 +1,20 @@ +
+ +

hello

+ +
+ +
+
+
+
+
+ +
+
+
+
+ +
diff --git a/src/app/panels/overview/module.js b/src/app/panels/overview/module.js new file mode 100644 index 00000000000..1e71de1e847 --- /dev/null +++ b/src/app/panels/overview/module.js @@ -0,0 +1,117 @@ +define([ + 'angular', + 'app', + 'underscore', + 'services/panelSrv' +], +function (angular, app, _) { + 'use strict'; + + var module = angular.module('grafana.panels.overview', []); + app.useModule(module); + + module.controller('OverviewCtrl', function($scope, panelSrv) { + + $scope.panelMeta = { + description : "A panel to show an overview of different metrics through avg, total, current numbers and sparklines", + fullEditorTabs : [ + { + title: 'General', + src:'app/partials/panelgeneral.html' + }, + { + title: 'Metrics', + src:'app/partials/metrics.html' + } + ], + fullscreenEdit: true, + }; + + // Set and populate defaults + var _d = { + targets: [{}] + }; + + _.defaults($scope.panel, _d); + + $scope.init = function() { + panelSrv.init(this); + + $scope.get_data(); + //$scope.$on('refresh', $scope.render); + //$scope.render(); + }; + + $scope.get_data = function() { + delete $scope.panel.error; + $scope.panelMeta.loading = true; + + $scope.rangeUnparsed = $scope.filter.timeRange(false); + + var metricsQuery = { + range: $scope.rangeUnparsed, + interval: '1min', + targets: $scope.panel.targets, + maxDataPoints: 100, + }; + + return $scope.datasource.query($scope.filter, metricsQuery) + .then($scope.dataHandler) + .then(null, function(err) { + $scope.panelMeta.loading = false; + $scope.panel.error = err.message || "Timeseries data request error"; + $scope.inspector.error = err; + $scope.render([]); + }); + }; + + $scope.dataHandler = function(results) { + $scope.panelMeta.loading = false; + var data = _.map(results.data, $scope.seriesHandler); + $scope.render(data); + }; + + $scope.seriesHandler = function(seriesData, index) { + var datapoints = seriesData.datapoints; + var alias = seriesData.target; + var color = $scope.panel.aliasColors[alias] || $scope.colors[index]; + var yaxis = $scope.panel.aliasYAxis[alias] || 1; + + var seriesInfo = { + alias: alias, + color: color, + enable: true, + yaxis: yaxis + }; + + $scope.legend.push(seriesInfo); + + var series = new timeSeries.ZeroFilled({ + datapoints: datapoints, + info: seriesInfo, + }); + + if (datapoints && datapoints.length > 0) { + var last = moment.utc(datapoints[datapoints.length - 1][1] * 1000); + var from = moment.utc($scope.range.from); + if (last - from < -10000) { + $scope.datapointsOutside = true; + } + + $scope.datapointsCount += datapoints.length; + } + + return series; + }; + + $scope.render = function() { + + }; + + $scope.openEditor = function() { + }; + + $scope.init(); + + }); +}); diff --git a/src/test/specs/overview-ctrl-specs.js b/src/test/specs/overview-ctrl-specs.js new file mode 100644 index 00000000000..7a50c9a8d4d --- /dev/null +++ b/src/test/specs/overview-ctrl-specs.js @@ -0,0 +1,40 @@ +define([ + 'panels/overview/module' +], function() { + 'use strict'; + + describe('OverviewCtrl', function() { + var _controller; + var _scope; + + beforeEach(module('grafana.services')); + beforeEach(module('grafana.panels.overview')); + + beforeEach(module(function($provide){ + $provide.value('datasourceSrv',{ + getMetricSources: function() { + }, + get: function() { + return {}; + } + }); + })); + + beforeEach(inject(function($controller, $rootScope) { + _scope = $rootScope.$new(); + _scope.panel = { targets: [] }; + _controller = $controller('OverviewCtrl', { + $scope: _scope + }); + })); + + describe('init', function() { + beforeEach(function() { + }); + + it('description', function() { + + }); + }); + }); +});