|
@@ -25,6 +25,10 @@ function (angular, app, _, TimeSeries, kbn) {
|
|
|
{
|
|
{
|
|
|
title: 'Metrics',
|
|
title: 'Metrics',
|
|
|
src:'app/partials/metrics.html'
|
|
src:'app/partials/metrics.html'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'Display Styles',
|
|
|
|
|
+ src:'app/panels/stats/statsEditor.html'
|
|
|
}
|
|
}
|
|
|
],
|
|
],
|
|
|
fullscreenEdit: true,
|
|
fullscreenEdit: true,
|
|
@@ -32,28 +36,35 @@ function (angular, app, _, TimeSeries, kbn) {
|
|
|
|
|
|
|
|
// Set and populate defaults
|
|
// Set and populate defaults
|
|
|
var _d = {
|
|
var _d = {
|
|
|
- targets: [{}]
|
|
|
|
|
|
|
+ targets: [{}],
|
|
|
|
|
+ cacheTimeout: null,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
_.defaults($scope.panel, _d);
|
|
_.defaults($scope.panel, _d);
|
|
|
|
|
|
|
|
$scope.init = function() {
|
|
$scope.init = function() {
|
|
|
panelSrv.init($scope);
|
|
panelSrv.init($scope);
|
|
|
|
|
+ $scope.$on('refresh', $scope.get_data);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
$scope.formatValue = function(value) {
|
|
$scope.formatValue = function(value) {
|
|
|
return kbn.valueFormats.bytes(value, 0, -7);
|
|
return kbn.valueFormats.bytes(value, 0, -7);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- $scope.get_data = function() {
|
|
|
|
|
- console.log("stats get data");
|
|
|
|
|
|
|
+ $scope.updateTimeRange = function () {
|
|
|
|
|
+ $scope.range = timeSrv.timeRange();
|
|
|
$scope.rangeUnparsed = timeSrv.timeRange(false);
|
|
$scope.rangeUnparsed = timeSrv.timeRange(false);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ $scope.get_data = function() {
|
|
|
|
|
+ $scope.updateTimeRange();
|
|
|
|
|
|
|
|
var metricsQuery = {
|
|
var metricsQuery = {
|
|
|
range: $scope.rangeUnparsed,
|
|
range: $scope.rangeUnparsed,
|
|
|
interval: '1min',
|
|
interval: '1min',
|
|
|
targets: $scope.panel.targets,
|
|
targets: $scope.panel.targets,
|
|
|
maxDataPoints: 100,
|
|
maxDataPoints: 100,
|
|
|
|
|
+ cacheTimeout: $scope.panel.cacheTimeout
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
return $scope.datasource.query(metricsQuery)
|
|
return $scope.datasource.query(metricsQuery)
|
|
@@ -63,20 +74,26 @@ function (angular, app, _, TimeSeries, kbn) {
|
|
|
$scope.panelMeta.loading = false;
|
|
$scope.panelMeta.loading = false;
|
|
|
$scope.panelMeta.error = err.message || "Timeseries data request error";
|
|
$scope.panelMeta.error = err.message || "Timeseries data request error";
|
|
|
$scope.inspector.error = err;
|
|
$scope.inspector.error = err;
|
|
|
- $scope.render([]);
|
|
|
|
|
|
|
+ $scope.render();
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
$scope.dataHandler = function(results) {
|
|
$scope.dataHandler = function(results) {
|
|
|
$scope.panelMeta.loading = false;
|
|
$scope.panelMeta.loading = false;
|
|
|
- $scope.series = _.map(results.data, $scope.seriesHandler);
|
|
|
|
|
-
|
|
|
|
|
- if ($scope.series.length > 0) {
|
|
|
|
|
- var mainstat = $scope.series[0];
|
|
|
|
|
- $scope.mainstat = {};
|
|
|
|
|
- $scope.mainstat.value = $scope.formatValue(mainstat.stats.avg);
|
|
|
|
|
- $scope.mainstat.func = 'avg';
|
|
|
|
|
|
|
+ var data= {};
|
|
|
|
|
+ data.series = _.map(results.data, $scope.seriesHandler);
|
|
|
|
|
+ data.stats = [];
|
|
|
|
|
+
|
|
|
|
|
+ if (data.series.length > 0) {
|
|
|
|
|
+ var stat = {};
|
|
|
|
|
+ var firstSeries = data.series[0];
|
|
|
|
|
+ stat.value = $scope.formatValue(firstSeries.stats.avg);
|
|
|
|
|
+ stat.func = 'avg';
|
|
|
|
|
+ data.stats.push(stat);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ $scope.data = data;
|
|
|
|
|
+ $scope.render();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
$scope.seriesHandler = function(seriesData, index) {
|
|
$scope.seriesHandler = function(seriesData, index) {
|
|
@@ -102,11 +119,64 @@ function (angular, app, _, TimeSeries, kbn) {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
$scope.render = function() {
|
|
$scope.render = function() {
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- $scope.openEditor = function() {
|
|
|
|
|
|
|
+ $scope.$emit('render');
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
$scope.init();
|
|
$scope.init();
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ module.directive('statsPanel', function() {
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ link: function(scope, elem) {
|
|
|
|
|
+ var data;
|
|
|
|
|
+
|
|
|
|
|
+ console.log('asd');
|
|
|
|
|
+ scope.$on('render', function() {
|
|
|
|
|
+ data = scope.data;
|
|
|
|
|
+
|
|
|
|
|
+ if (!data || data.series.length === 0) {
|
|
|
|
|
+ elem.html('no data');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ render();
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ function render() {
|
|
|
|
|
+ var body = '';
|
|
|
|
|
+ var i, series;
|
|
|
|
|
+
|
|
|
|
|
+ if (scope.panel.stats) {
|
|
|
|
|
+ body += '<div class="stats-panel-value-container">';
|
|
|
|
|
+ body += '<span class="stats-panel-value">' + data.stats[0].value + '</span>';
|
|
|
|
|
+ body += ' <span class="stats-panel-func">(' + data.stats[0].func + ')</span>';
|
|
|
|
|
+ body += '</div>';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (scope.panel.table) {
|
|
|
|
|
+ body += '<table class="stats-panel-table">';
|
|
|
|
|
+ body += '<tr>';
|
|
|
|
|
+ body += '<th></th><th>avg</th><th>min</th><th>max</th><th>current</th><th>total</th>';
|
|
|
|
|
+ body += '</tr>';
|
|
|
|
|
+ for (i = 0; i < data.series.length; i++) {
|
|
|
|
|
+ series = data.series[i];
|
|
|
|
|
+ body += '<tr>';
|
|
|
|
|
+ body += '<td><i class="icon-minus pointer" style="color:' + series.color + '"></i> ';
|
|
|
|
|
+ body += series.info.alias + ' </td>';
|
|
|
|
|
+ body += '<td>' + series.info.avg + '</td>';
|
|
|
|
|
+ body += '<td>' + series.info.min + '</td>';
|
|
|
|
|
+ body += '<td>' + series.info.max + '</td>';
|
|
|
|
|
+ body += '<td>' + series.info.total + '</td>';
|
|
|
|
|
+ body += '<td>' + series.info.current + '</td>';
|
|
|
|
|
+ }
|
|
|
|
|
+ body += '</table>';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ elem.html(body);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
});
|
|
});
|