kibana-riya
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
76 lines (66 loc) • 2.07 kB
JavaScript
import _ from 'lodash';
import moment from 'moment';
import numeral from 'numeral';
import toTitleCase from './lib/to_title_case';
import formatNumber from './lib/format_number';
import readStatData from './lib/read_stat_data';
import uiModules from 'ui/modules';
import statusPageMetricTemplate from 'plugins/status_page/status_page_metric.html';
function calcAvg(metricList, metricNumberType) {
return metricList.map(function (data) {
const uglySum = data.values.reduce(function (sumSoFar, vector) {
return sumSoFar + vector.y;
}, 0);
return formatNumber(uglySum / data.values.length, metricNumberType);
});
}
uiModules
.get('kibana', [])
.directive('statusPageMetric', function () {
return {
restrict: 'E',
template: statusPageMetricTemplate,
scope: {
name: '@',
data: '='
},
controllerAs: 'metric',
controller: function ($scope) {
const self = this;
self.name = $scope.name;
self.title = toTitleCase(self.name);
self.extendedTitle = self.title;
self.numberType = 'precise';
self.seriesNames = [];
switch (self.name) {
case 'heapTotal':
case 'heapUsed':
self.numberType = 'byte';
break;
case 'responseTimeAvg':
case 'responseTimeMax':
self.numberType = 'ms';
break;
case 'load':
self.seriesNames = ['1min', '5min', '15min'];
break;
}
$scope.$watch('data', function (data) {
self.rawData = data;
self.chartData = readStatData(self.rawData, self.seriesNames);
self.averages = calcAvg(self.chartData, self.numberType);
let unit = '';
self.averages = self.averages.map(function (average) {
const parts = average.split(' ');
const value = parts.shift();
unit = parts.join(' ');
return value;
});
self.extendedTitle = self.title;
if (unit) {
self.extendedTitle = `${self.extendedTitle} (${unit})`;
}
});
}
};
});