queryCtrl and utils module refactor. Suppress "use strict" warnings in modules.
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
"curly": true,
|
"curly": true,
|
||||||
"eqnull": true,
|
"eqnull": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
|
"module": true,
|
||||||
"devel": true,
|
"devel": true,
|
||||||
"eqeqeq": true,
|
"eqeqeq": true,
|
||||||
"forin": false,
|
"forin": false,
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ module.exports = function(grunt) {
|
|||||||
'**/*',
|
'**/*',
|
||||||
'!**/datasource.js',
|
'!**/datasource.js',
|
||||||
'!**/module.js',
|
'!**/module.js',
|
||||||
|
'!**/queryCtrl.js',
|
||||||
|
'!**/utils.js',
|
||||||
'!**/*.scss'
|
'!**/*.scss'
|
||||||
],
|
],
|
||||||
dest: 'dist/src'
|
dest: 'dist/src'
|
||||||
@@ -47,8 +49,10 @@ module.exports = function(grunt) {
|
|||||||
cwd: 'src',
|
cwd: 'src',
|
||||||
expand: true,
|
expand: true,
|
||||||
src: [
|
src: [
|
||||||
'**/**/datasource.js',
|
|
||||||
'**/**/module.js',
|
'**/**/module.js',
|
||||||
|
'**/**/datasource.js',
|
||||||
|
'**/**/queryCtrl.js',
|
||||||
|
'**/**/utils.js',
|
||||||
],
|
],
|
||||||
dest: 'dist/src',
|
dest: 'dist/src',
|
||||||
ext:'.js'
|
ext:'.js'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//import angular from 'angular';
|
//import angular from 'angular';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import {parse as dateMathParse} from 'app/core/utils/datemath';
|
import * as dateMath from 'app/core/utils/datemath';
|
||||||
import Utils from './utils';
|
import * as utils from './utils';
|
||||||
import metricFunctions from './metricFunctions';
|
import metricFunctions from './metricFunctions';
|
||||||
import {zabbixHelperSrv} from './helperFunctions';
|
import {zabbixHelperSrv} from './helperFunctions';
|
||||||
import {ZabbixAPI} from './zabbixAPI';
|
import {ZabbixAPI} from './zabbixAPI';
|
||||||
@@ -29,7 +29,7 @@ export class ZabbixAPIDatasource {
|
|||||||
|
|
||||||
// Set cache update interval
|
// Set cache update interval
|
||||||
var ttl = instanceSettings.jsonData.cacheTTL || '1h';
|
var ttl = instanceSettings.jsonData.cacheTTL || '1h';
|
||||||
this.cacheTTL = Utils.parseInterval(ttl);
|
this.cacheTTL = utils.parseInterval(ttl);
|
||||||
|
|
||||||
// Initialize Zabbix API
|
// Initialize Zabbix API
|
||||||
this.zabbixAPI = new ZabbixAPI(this.url, this.username, this.password, this.basicAuth, this.withCredentials);
|
this.zabbixAPI = new ZabbixAPI(this.url, this.username, this.password, this.basicAuth, this.withCredentials);
|
||||||
@@ -103,9 +103,9 @@ export class ZabbixAPIDatasource {
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// get from & to in seconds
|
// get from & to in seconds
|
||||||
var from = Math.ceil(dateMathParse(options.range.from) / 1000);
|
var from = Math.ceil(dateMath.parse(options.range.from) / 1000);
|
||||||
var to = Math.ceil(dateMathParse(options.range.to) / 1000);
|
var to = Math.ceil(dateMath.parse(options.range.to) / 1000);
|
||||||
var useTrendsFrom = Math.ceil(dateMathParse('now-' + this.trendsFrom) / 1000);
|
var useTrendsFrom = Math.ceil(dateMath.parse('now-' + this.trendsFrom) / 1000);
|
||||||
|
|
||||||
// Create request for each target
|
// Create request for each target
|
||||||
var promises = _.map(options.targets, function(target) {
|
var promises = _.map(options.targets, function(target) {
|
||||||
@@ -330,8 +330,8 @@ export class ZabbixAPIDatasource {
|
|||||||
/////////////////
|
/////////////////
|
||||||
|
|
||||||
annotationQuery(options) {
|
annotationQuery(options) {
|
||||||
var from = Math.ceil(dateMathParse(options.rangeRaw.from) / 1000);
|
var from = Math.ceil(dateMath.parse(options.rangeRaw.from) / 1000);
|
||||||
var to = Math.ceil(dateMathParse(options.rangeRaw.to) / 1000);
|
var to = Math.ceil(dateMath.parse(options.rangeRaw.to) / 1000);
|
||||||
var annotation = options.annotation;
|
var annotation = options.annotation;
|
||||||
var self = this;
|
var self = this;
|
||||||
var showEvents = annotation.showOkEvents ? [0, 1] : 1;
|
var showEvents = annotation.showOkEvents ? [0, 1] : 1;
|
||||||
@@ -347,9 +347,9 @@ export class ZabbixAPIDatasource {
|
|||||||
.then(function(triggers) {
|
.then(function(triggers) {
|
||||||
|
|
||||||
// Filter triggers by description
|
// Filter triggers by description
|
||||||
if (Utils.isRegex(annotation.trigger)) {
|
if (utils.isRegex(annotation.trigger)) {
|
||||||
triggers = _.filter(triggers, function(trigger) {
|
triggers = _.filter(triggers, function(trigger) {
|
||||||
return Utils.buildRegex(annotation.trigger).test(trigger.description);
|
return utils.buildRegex(annotation.trigger).test(trigger.description);
|
||||||
});
|
});
|
||||||
} else if (annotation.trigger) {
|
} else if (annotation.trigger) {
|
||||||
triggers = _.filter(triggers, function(trigger) {
|
triggers = _.filter(triggers, function(trigger) {
|
||||||
@@ -393,7 +393,7 @@ export class ZabbixAPIDatasource {
|
|||||||
// Show event type (OK or Problem)
|
// Show event type (OK or Problem)
|
||||||
title += Number(e.value) ? 'Problem' : 'OK';
|
title += Number(e.value) ? 'Problem' : 'OK';
|
||||||
|
|
||||||
var formatted_acknowledges = Utils.formatAcknowledges(e.acknowledges);
|
var formatted_acknowledges = utils.formatAcknowledges(e.acknowledges);
|
||||||
return {
|
return {
|
||||||
annotation: annotation,
|
annotation: annotation,
|
||||||
time: e.clock * 1000,
|
time: e.clock * 1000,
|
||||||
|
|||||||
@@ -1,242 +1,237 @@
|
|||||||
define([
|
/*define([
|
||||||
'app/plugins/sdk',
|
'app/plugins/sdk',
|
||||||
'angular',
|
'angular',
|
||||||
'lodash',
|
'lodash',
|
||||||
'./metricFunctions',
|
'./metricFunctions',
|
||||||
'./utils'
|
'./utils'
|
||||||
],
|
],*/
|
||||||
function (sdk, angular, _, metricFunctions, utils) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var ZabbixQueryCtrl = (function(_super) {
|
import {QueryCtrl} from 'app/plugins/sdk';
|
||||||
|
import _ from 'lodash';
|
||||||
|
import * as utils from './utils';
|
||||||
|
import metricFunctions from './metricFunctions';
|
||||||
|
|
||||||
// ZabbixQueryCtrl constructor
|
export class ZabbixQueryCtrl extends QueryCtrl {
|
||||||
function ZabbixQueryCtrl($scope, $injector, $sce, $q, templateSrv) {
|
|
||||||
|
|
||||||
// Call superclass constructor
|
// ZabbixQueryCtrl constructor
|
||||||
_super.call(this, $scope, $injector);
|
constructor($scope, $injector, $sce, $q, templateSrv) {
|
||||||
|
|
||||||
this.editorModes = {
|
// Call superclass constructor
|
||||||
0: 'num',
|
super($scope, $injector);
|
||||||
1: 'itservice',
|
|
||||||
2: 'text'
|
this.editorModes = {
|
||||||
|
0: 'num',
|
||||||
|
1: 'itservice',
|
||||||
|
2: 'text'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Map functions for bs-typeahead
|
||||||
|
this.getGroupNames = _.partial(getMetricNames, this, 'groupList');
|
||||||
|
this.getHostNames = _.partial(getMetricNames, this, 'filteredHosts');
|
||||||
|
this.getApplicationNames = _.partial(getMetricNames, this, 'filteredApplications');
|
||||||
|
this.getItemNames = _.partial(getMetricNames, this, 'filteredItems');
|
||||||
|
|
||||||
|
this.init = function() {
|
||||||
|
|
||||||
|
this.templateSrv = templateSrv;
|
||||||
|
var target = this.target;
|
||||||
|
|
||||||
|
var scopeDefaults = {
|
||||||
|
metric: {}
|
||||||
};
|
};
|
||||||
|
_.defaults(this, scopeDefaults);
|
||||||
|
|
||||||
// Map functions for bs-typeahead
|
// Load default values
|
||||||
this.getGroupNames = _.partial(getMetricNames, this, 'groupList');
|
var targetDefaults = {
|
||||||
this.getHostNames = _.partial(getMetricNames, this, 'filteredHosts');
|
mode: 0,
|
||||||
this.getApplicationNames = _.partial(getMetricNames, this, 'filteredApplications');
|
group: { filter: "" },
|
||||||
this.getItemNames = _.partial(getMetricNames, this, 'filteredItems');
|
host: { filter: "" },
|
||||||
|
application: { filter: "" },
|
||||||
this.init = function() {
|
item: { filter: "" },
|
||||||
|
functions: [],
|
||||||
this.templateSrv = templateSrv;
|
|
||||||
var target = this.target;
|
|
||||||
|
|
||||||
var scopeDefaults = {
|
|
||||||
metric: {}
|
|
||||||
};
|
|
||||||
_.defaults(this, scopeDefaults);
|
|
||||||
|
|
||||||
// Load default values
|
|
||||||
var targetDefaults = {
|
|
||||||
mode: 0,
|
|
||||||
group: { filter: "" },
|
|
||||||
host: { filter: "" },
|
|
||||||
application: { filter: "" },
|
|
||||||
item: { filter: "" },
|
|
||||||
functions: [],
|
|
||||||
};
|
|
||||||
_.defaults(target, targetDefaults);
|
|
||||||
|
|
||||||
// Create function instances from saved JSON
|
|
||||||
target.functions = _.map(target.functions, function(func) {
|
|
||||||
return metricFunctions.createFuncInstance(func.def, func.params);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (target.mode === 0 ||
|
|
||||||
target.mode === 2) {
|
|
||||||
|
|
||||||
this.downsampleFunctionList = [
|
|
||||||
{name: "avg", value: "avg"},
|
|
||||||
{name: "min", value: "min"},
|
|
||||||
{name: "max", value: "max"}
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set avg by default
|
|
||||||
if (!target.downsampleFunction) {
|
|
||||||
target.downsampleFunction = this.downsampleFunctionList[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.initFilters();
|
|
||||||
}
|
|
||||||
else if (target.mode === 1) {
|
|
||||||
this.slaPropertyList = [
|
|
||||||
{name: "Status", property: "status"},
|
|
||||||
{name: "SLA", property: "sla"},
|
|
||||||
{name: "OK time", property: "okTime"},
|
|
||||||
{name: "Problem time", property: "problemTime"},
|
|
||||||
{name: "Down time", property: "downtimeTime"}
|
|
||||||
];
|
|
||||||
this.itserviceList = [{name: "test"}];
|
|
||||||
this.updateITServiceList();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
_.defaults(target, targetDefaults);
|
||||||
|
|
||||||
this.init();
|
// Create function instances from saved JSON
|
||||||
}
|
target.functions = _.map(target.functions, function(func) {
|
||||||
|
return metricFunctions.createFuncInstance(func.def, func.params);
|
||||||
ZabbixQueryCtrl.templateUrl = 'partials/query.editor.html';
|
|
||||||
|
|
||||||
ZabbixQueryCtrl.prototype = Object.create(_super.prototype);
|
|
||||||
ZabbixQueryCtrl.prototype.constructor = ZabbixQueryCtrl;
|
|
||||||
|
|
||||||
var p = ZabbixQueryCtrl.prototype;
|
|
||||||
|
|
||||||
p.initFilters = function () {
|
|
||||||
this.filterGroups();
|
|
||||||
this.filterHosts();
|
|
||||||
this.filterApplications();
|
|
||||||
this.filterItems();
|
|
||||||
};
|
|
||||||
|
|
||||||
p.filterHosts = function () {
|
|
||||||
var self = this;
|
|
||||||
var groupFilter = this.templateSrv.replace(this.target.group.filter);
|
|
||||||
this.datasource.queryProcessor.filterHosts(groupFilter).then(function(hosts) {
|
|
||||||
self.metric.filteredHosts = hosts;
|
|
||||||
});
|
});
|
||||||
};
|
|
||||||
|
|
||||||
p.filterGroups = function() {
|
if (target.mode === 0 ||
|
||||||
var self = this;
|
target.mode === 2) {
|
||||||
this.datasource.queryProcessor.filterGroups().then(function(groups) {
|
|
||||||
self.metric.groupList = groups;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
p.filterApplications = function () {
|
this.downsampleFunctionList = [
|
||||||
var self = this;
|
{name: "avg", value: "avg"},
|
||||||
var groupFilter = this.templateSrv.replace(this.target.group.filter);
|
{name: "min", value: "min"},
|
||||||
var hostFilter = this.templateSrv.replace(this.target.host.filter);
|
{name: "max", value: "max"}
|
||||||
this.datasource.queryProcessor.filterApplications(groupFilter, hostFilter)
|
];
|
||||||
.then(function(apps) {
|
|
||||||
self.metric.filteredApplications = apps;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
p.filterItems = function () {
|
// Set avg by default
|
||||||
var self = this;
|
if (!target.downsampleFunction) {
|
||||||
var item_type = this.editorModes[this.target.mode];
|
target.downsampleFunction = this.downsampleFunctionList[0];
|
||||||
var groupFilter = this.templateSrv.replace(this.target.group.filter);
|
}
|
||||||
var hostFilter = this.templateSrv.replace(this.target.host.filter);
|
|
||||||
var appFilter = this.templateSrv.replace(this.target.application.filter);
|
|
||||||
this.datasource.queryProcessor.filterItems(groupFilter, hostFilter, appFilter,
|
|
||||||
item_type, this.target.showDisabledItems).then(function(items) {
|
|
||||||
self.metric.filteredItems = items;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
p.onTargetPartChange = function (targetPart) {
|
this.initFilters();
|
||||||
var regexStyle = {'color': '#CCA300'};
|
}
|
||||||
targetPart.isRegex = utils.isRegex(targetPart.filter);
|
else if (target.mode === 1) {
|
||||||
targetPart.style = targetPart.isRegex ? regexStyle : {};
|
this.slaPropertyList = [
|
||||||
};
|
{name: "Status", property: "status"},
|
||||||
|
{name: "SLA", property: "sla"},
|
||||||
p.onTargetBlur = function() {
|
{name: "OK time", property: "okTime"},
|
||||||
this.initFilters();
|
{name: "Problem time", property: "problemTime"},
|
||||||
this.parseTarget();
|
{name: "Down time", property: "downtimeTime"}
|
||||||
this.panelCtrl.refresh();
|
];
|
||||||
};
|
this.itserviceList = [{name: "test"}];
|
||||||
|
this.updateITServiceList();
|
||||||
p.parseTarget = function() {
|
|
||||||
// Parse target
|
|
||||||
};
|
|
||||||
|
|
||||||
// Validate target and set validation info
|
|
||||||
p.validateTarget = function () {};
|
|
||||||
|
|
||||||
p.targetChanged = function() {
|
|
||||||
this.panelCtrl.refresh();
|
|
||||||
};
|
|
||||||
|
|
||||||
p.addFunction = function(funcDef) {
|
|
||||||
var newFunc = metricFunctions.createFuncInstance(funcDef);
|
|
||||||
newFunc.added = true;
|
|
||||||
this.target.functions.push(newFunc);
|
|
||||||
|
|
||||||
this.moveAliasFuncLast();
|
|
||||||
|
|
||||||
if (newFunc.params.length && newFunc.added ||
|
|
||||||
newFunc.def.params.length === 0) {
|
|
||||||
this.targetChanged();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
p.removeFunction = function(func) {
|
this.init();
|
||||||
this.target.functions = _.without(this.target.functions, func);
|
|
||||||
this.targetChanged();
|
|
||||||
};
|
|
||||||
|
|
||||||
p.moveAliasFuncLast = function() {
|
|
||||||
var aliasFunc = _.find(this.target.functions, function(func) {
|
|
||||||
return func.def.name === 'alias' ||
|
|
||||||
func.def.name === 'aliasByNode' ||
|
|
||||||
func.def.name === 'aliasByMetric';
|
|
||||||
});
|
|
||||||
|
|
||||||
if (aliasFunc) {
|
|
||||||
this.target.functions = _.without(this.target.functions, aliasFunc);
|
|
||||||
this.target.functions.push(aliasFunc);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Switch query editor to specified mode.
|
|
||||||
* Modes:
|
|
||||||
* 0 - items
|
|
||||||
* 1 - IT services
|
|
||||||
* 2 - Text metrics
|
|
||||||
*/
|
|
||||||
p.switchEditorMode = function (mode) {
|
|
||||||
this.target.mode = mode;
|
|
||||||
this.init();
|
|
||||||
};
|
|
||||||
|
|
||||||
/////////////////
|
|
||||||
// IT Services //
|
|
||||||
/////////////////
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update list of IT services
|
|
||||||
*/
|
|
||||||
p.updateITServiceList = function () {
|
|
||||||
var self = this;
|
|
||||||
this.datasource.zabbixAPI.getITService().then(function (iteservices) {
|
|
||||||
self.itserviceList = [];
|
|
||||||
self.itserviceList = self.itserviceList.concat(iteservices);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call when IT service is selected.
|
|
||||||
*/
|
|
||||||
p.selectITService = function () {
|
|
||||||
if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) {
|
|
||||||
this.oldTarget = angular.copy(this.target);
|
|
||||||
this.panelCtrl.refresh();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return ZabbixQueryCtrl;
|
|
||||||
|
|
||||||
})(sdk.QueryCtrl);
|
|
||||||
|
|
||||||
return ZabbixQueryCtrl;
|
|
||||||
|
|
||||||
// Get list of metric names for bs-typeahead directive
|
|
||||||
function getMetricNames(scope, metricList) {
|
|
||||||
return _.uniq(_.map(scope.metric[metricList], 'name'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
initFilters() {
|
||||||
|
this.filterGroups();
|
||||||
|
this.filterHosts();
|
||||||
|
this.filterApplications();
|
||||||
|
this.filterItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
filterHosts() {
|
||||||
|
var self = this;
|
||||||
|
var groupFilter = this.templateSrv.replace(this.target.group.filter);
|
||||||
|
this.datasource.queryProcessor.filterHosts(groupFilter).then(function(hosts) {
|
||||||
|
self.metric.filteredHosts = hosts;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
filterGroups() {
|
||||||
|
var self = this;
|
||||||
|
this.datasource.queryProcessor.filterGroups().then(function(groups) {
|
||||||
|
self.metric.groupList = groups;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
filterApplications() {
|
||||||
|
var self = this;
|
||||||
|
var groupFilter = this.templateSrv.replace(this.target.group.filter);
|
||||||
|
var hostFilter = this.templateSrv.replace(this.target.host.filter);
|
||||||
|
this.datasource.queryProcessor.filterApplications(groupFilter, hostFilter)
|
||||||
|
.then(function(apps) {
|
||||||
|
self.metric.filteredApplications = apps;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
filterItems() {
|
||||||
|
var self = this;
|
||||||
|
var item_type = this.editorModes[this.target.mode];
|
||||||
|
var groupFilter = this.templateSrv.replace(this.target.group.filter);
|
||||||
|
var hostFilter = this.templateSrv.replace(this.target.host.filter);
|
||||||
|
var appFilter = this.templateSrv.replace(this.target.application.filter);
|
||||||
|
this.datasource.queryProcessor.filterItems(groupFilter, hostFilter, appFilter,
|
||||||
|
item_type, this.target.showDisabledItems).then(function(items) {
|
||||||
|
self.metric.filteredItems = items;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onTargetPartChange(targetPart) {
|
||||||
|
var regexStyle = {'color': '#CCA300'};
|
||||||
|
targetPart.isRegex = utils.isRegex(targetPart.filter);
|
||||||
|
targetPart.style = targetPart.isRegex ? regexStyle : {};
|
||||||
|
}
|
||||||
|
|
||||||
|
onTargetBlur() {
|
||||||
|
this.initFilters();
|
||||||
|
this.parseTarget();
|
||||||
|
this.panelCtrl.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
parseTarget() {
|
||||||
|
// Parse target
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate target and set validation info
|
||||||
|
validateTarget() {
|
||||||
|
// validate
|
||||||
|
}
|
||||||
|
|
||||||
|
targetChanged() {
|
||||||
|
this.panelCtrl.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
addFunction(funcDef) {
|
||||||
|
var newFunc = metricFunctions.createFuncInstance(funcDef);
|
||||||
|
newFunc.added = true;
|
||||||
|
this.target.functions.push(newFunc);
|
||||||
|
|
||||||
|
this.moveAliasFuncLast();
|
||||||
|
|
||||||
|
if (newFunc.params.length && newFunc.added ||
|
||||||
|
newFunc.def.params.length === 0) {
|
||||||
|
this.targetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removeFunction(func) {
|
||||||
|
this.target.functions = _.without(this.target.functions, func);
|
||||||
|
this.targetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
moveAliasFuncLast() {
|
||||||
|
var aliasFunc = _.find(this.target.functions, function(func) {
|
||||||
|
return func.def.name === 'alias' ||
|
||||||
|
func.def.name === 'aliasByNode' ||
|
||||||
|
func.def.name === 'aliasByMetric';
|
||||||
|
});
|
||||||
|
|
||||||
|
if (aliasFunc) {
|
||||||
|
this.target.functions = _.without(this.target.functions, aliasFunc);
|
||||||
|
this.target.functions.push(aliasFunc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switch query editor to specified mode.
|
||||||
|
* Modes:
|
||||||
|
* 0 - items
|
||||||
|
* 1 - IT services
|
||||||
|
* 2 - Text metrics
|
||||||
|
*/
|
||||||
|
switchEditorMode(mode) {
|
||||||
|
this.target.mode = mode;
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// IT Services //
|
||||||
|
/////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update list of IT services
|
||||||
|
*/
|
||||||
|
updateITServiceList() {
|
||||||
|
var self = this;
|
||||||
|
this.datasource.zabbixAPI.getITService().then(function (iteservices) {
|
||||||
|
self.itserviceList = [];
|
||||||
|
self.itserviceList = self.itserviceList.concat(iteservices);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call when IT service is selected.
|
||||||
|
*/
|
||||||
|
selectITService() {
|
||||||
|
if (!_.isEqual(this.oldTarget, this.target) && _.isEmpty(this.target.errors)) {
|
||||||
|
this.oldTarget = angular.copy(this.target);
|
||||||
|
this.panelCtrl.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set templateUrl as static property
|
||||||
|
ZabbixQueryCtrl.templateUrl = 'partials/query.editor.html';
|
||||||
|
|
||||||
|
// Get list of metric names for bs-typeahead directive
|
||||||
|
function getMetricNames(scope, metricList) {
|
||||||
|
return _.uniq(_.map(scope.metric[metricList], 'name'));
|
||||||
|
}
|
||||||
@@ -1,77 +1,67 @@
|
|||||||
define([
|
import _ from 'lodash';
|
||||||
'lodash',
|
import moment from 'moment';
|
||||||
'moment'
|
|
||||||
],
|
|
||||||
function (_, moment) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function Utils() {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expand Zabbix item name
|
* Expand Zabbix item name
|
||||||
*
|
*
|
||||||
* @param {string} name item name, ie "CPU $2 time"
|
* @param {string} name item name, ie "CPU $2 time"
|
||||||
* @param {string} key item key, ie system.cpu.util[,system,avg1]
|
* @param {string} key item key, ie system.cpu.util[,system,avg1]
|
||||||
* @return {string} expanded name, ie "CPU system time"
|
* @return {string} expanded name, ie "CPU system time"
|
||||||
*/
|
*/
|
||||||
this.expandItemName = function(name, key) {
|
export function expandItemName(name, key) {
|
||||||
|
|
||||||
// extract params from key:
|
// extract params from key:
|
||||||
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
||||||
var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');
|
var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');
|
||||||
|
|
||||||
// replace item parameters
|
|
||||||
for (var i = key_params.length; i >= 1; i--) {
|
|
||||||
name = name.replace('$' + i, key_params[i - 1]);
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Pattern for testing regex
|
|
||||||
var regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
|
||||||
|
|
||||||
this.isRegex = function (str) {
|
|
||||||
return regexPattern.test(str);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.buildRegex = function (str) {
|
|
||||||
var matches = str.match(regexPattern);
|
|
||||||
var pattern = matches[1];
|
|
||||||
var flags = matches[2] !== "" ? matches[2] : undefined;
|
|
||||||
return new RegExp(pattern, flags);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.parseInterval = function(interval) {
|
|
||||||
var intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g;
|
|
||||||
var momentInterval = intervalPattern.exec(interval);
|
|
||||||
return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format acknowledges.
|
|
||||||
*
|
|
||||||
* @param {array} acknowledges array of Zabbix acknowledge objects
|
|
||||||
* @return {string} HTML-formatted table
|
|
||||||
*/
|
|
||||||
this.formatAcknowledges = function(acknowledges) {
|
|
||||||
if (acknowledges.length) {
|
|
||||||
var formatted_acknowledges = '<br><br>Acknowledges:<br><table><tr><td><b>Time</b></td>'
|
|
||||||
+ '<td><b>User</b></td><td><b>Comments</b></td></tr>';
|
|
||||||
_.each(_.map(acknowledges, function (ack) {
|
|
||||||
var timestamp = moment.unix(ack.clock);
|
|
||||||
return '<tr><td><i>' + timestamp.format("DD MMM YYYY HH:mm:ss") + '</i></td><td>' + ack.alias
|
|
||||||
+ ' (' + ack.name + ' ' + ack.surname + ')' + '</td><td>' + ack.message + '</td></tr>';
|
|
||||||
}), function (ack) {
|
|
||||||
formatted_acknowledges = formatted_acknowledges.concat(ack);
|
|
||||||
});
|
|
||||||
formatted_acknowledges = formatted_acknowledges.concat('</table>');
|
|
||||||
return formatted_acknowledges;
|
|
||||||
} else {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
// replace item parameters
|
||||||
|
for (var i = key_params.length; i >= 1; i--) {
|
||||||
|
name = name.replace('$' + i, key_params[i - 1]);
|
||||||
}
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
return new Utils();
|
// Pattern for testing regex
|
||||||
});
|
var regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
||||||
|
|
||||||
|
export function isRegex(str) {
|
||||||
|
return regexPattern.test(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function buildRegex(str) {
|
||||||
|
var matches = str.match(regexPattern);
|
||||||
|
var pattern = matches[1];
|
||||||
|
var flags = matches[2] !== "" ? matches[2] : undefined;
|
||||||
|
return new RegExp(pattern, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseInterval(interval) {
|
||||||
|
var intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g;
|
||||||
|
var momentInterval = intervalPattern.exec(interval);
|
||||||
|
return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format acknowledges.
|
||||||
|
*
|
||||||
|
* @param {array} acknowledges array of Zabbix acknowledge objects
|
||||||
|
* @return {string} HTML-formatted table
|
||||||
|
*/
|
||||||
|
export function formatAcknowledges(acknowledges) {
|
||||||
|
if (acknowledges.length) {
|
||||||
|
var formatted_acknowledges = '<br><br>Acknowledges:<br><table><tr><td><b>Time</b></td>'
|
||||||
|
+ '<td><b>User</b></td><td><b>Comments</b></td></tr>';
|
||||||
|
_.each(_.map(acknowledges, function (ack) {
|
||||||
|
var timestamp = moment.unix(ack.clock);
|
||||||
|
return '<tr><td><i>' + timestamp.format("DD MMM YYYY HH:mm:ss") + '</i></td><td>' + ack.alias
|
||||||
|
+ ' (' + ack.name + ' ' + ack.surname + ')' + '</td><td>' + ack.message + '</td></tr>';
|
||||||
|
}), function (ack) {
|
||||||
|
formatted_acknowledges = formatted_acknowledges.concat(ack);
|
||||||
|
});
|
||||||
|
formatted_acknowledges = formatted_acknowledges.concat('</table>');
|
||||||
|
return formatted_acknowledges;
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user