291 lines
8.2 KiB
JavaScript
291 lines
8.2 KiB
JavaScript
'use strict';
|
|
angular.module('monitoring.controllers', [])
|
|
.constant('CHICKLET_TO_ICON', {
|
|
'chicklet-error': '/monitoring/img/critical-icon.png',
|
|
'chicklet-warning': '/monitoring/img/warning-icon.png',
|
|
'chicklet-unknown': '/monitoring/img/unknown-icon.png',
|
|
'chicklet-success': '/monitoring/img/ok-icon.png',
|
|
'chicklet-notfound': '/monitoring/img/notfound-icon.png'
|
|
})
|
|
.controller('timestampPickerController',[
|
|
"$scope", "$window", "$location",
|
|
function($scope, $window, $location){
|
|
var offset = getTimezoneOffset(),
|
|
queryParams = urlParams();
|
|
|
|
$scope.currentFormat = undefined;
|
|
$scope.currentOffset = undefined;
|
|
|
|
$scope.setUp = setUp;
|
|
|
|
function setUp(currentFormat){
|
|
if(currentFormat){
|
|
$scope.currentFormat = currentFormat;
|
|
}
|
|
$scope.$watch('currentFormat', onFormatChange);
|
|
if(queryParams['ts_mode'] === 'bl'){
|
|
$scope.currentOffset = queryParams['ts_offset'];
|
|
}
|
|
}
|
|
|
|
function onFormatChange(nval,oval){
|
|
var location;
|
|
|
|
if (nval !== '' && nval !== oval){
|
|
location = $location.path();
|
|
|
|
// overwrite to new values
|
|
queryParams['ts_mode'] = nval;
|
|
if (nval === 'utc') {
|
|
queryParams['ts_offset'] = 0;
|
|
} else {
|
|
queryParams['ts_offset'] = offset;
|
|
}
|
|
|
|
location = location.concat('?', paramsToSearch(queryParams));
|
|
|
|
$window.location = location;
|
|
}
|
|
}
|
|
|
|
function urlParams(url) {
|
|
url = url || window.location.href;
|
|
if (!url || (url.indexOf("?") < 0 && url.indexOf("&") < 0)) {
|
|
return {};
|
|
}
|
|
if (url.indexOf('#') > -1) {
|
|
url = url.substr(0, url.indexOf('#'));
|
|
}
|
|
return urlDecode(url.substr(url.indexOf("?") + 1));
|
|
}
|
|
|
|
function paramsToSearch(queryParams){
|
|
var str = '';
|
|
|
|
angular.forEach(queryParams, function it(val, key){
|
|
str = str.concat(key, '=', encodeURIComponent(val), '&');
|
|
});
|
|
|
|
str = str.substr(0, str.length-1);
|
|
|
|
return str;
|
|
}
|
|
|
|
function urlDecode(string, overwrite) {
|
|
var obj = {},
|
|
pairs = string.split('&'),
|
|
name,
|
|
value;
|
|
angular.forEach(pairs, function it(pair) {
|
|
pair = pair.split('=');
|
|
name = decodeURIComponent(pair[0]);
|
|
value = decodeURIComponent(pair[1]);
|
|
obj[name] = overwrite || !obj[name] ? value : [].concat(obj[name]).concat(value);
|
|
});
|
|
return obj;
|
|
}
|
|
|
|
function getTimezoneOffset() {
|
|
var offset = new Date().getTimezoneOffset();
|
|
var minutes = Math.abs(offset);
|
|
var hours = Math.floor(minutes / 60);
|
|
var prefix = offset < 0 ? "+" : "-";
|
|
return prefix + hours;
|
|
}
|
|
|
|
}])
|
|
.controller('monitoringController',[
|
|
"$scope", "$http", "$timeout", "$location", "CHICKLET_TO_ICON",
|
|
function ($scope, $http, $timeout, $location, CHICKLET_TO_ICON) {
|
|
var base_url;
|
|
|
|
$scope.fetchStatus = function(statics_url) {
|
|
if(statics_url && !base_url){
|
|
base_url = statics_url;
|
|
}
|
|
|
|
$http({method: 'GET', url: $location.absUrl().concat('status')}).
|
|
success(function(data, status, headers, config) {
|
|
// this callback will be called asynchronously
|
|
// when the response is available
|
|
$scope._serviceModel = data.series;
|
|
}).
|
|
error(function(data, status, headers, config) {
|
|
$scope.stop();
|
|
});
|
|
|
|
};
|
|
|
|
$scope.onTimeout = function(){
|
|
mytimeout = $timeout($scope.onTimeout,10000);
|
|
$scope.fetchStatus();
|
|
};
|
|
var mytimeout = $timeout($scope.onTimeout,10000);
|
|
|
|
$scope.stop = function(){
|
|
$timeout.cancel(mytimeout);
|
|
};
|
|
|
|
}])
|
|
.controller('alarmNotificationFieldController',
|
|
['$rootScope', NotificationField]
|
|
)
|
|
.controller('alarmMatchByController',
|
|
['$q', '$rootScope', MatchByController]
|
|
);
|
|
|
|
function MatchByController($q, $rootScope) {
|
|
// model
|
|
var vm = this;
|
|
|
|
vm.matchBy = [];
|
|
vm.matchByTags = [];
|
|
|
|
// api
|
|
vm.saveDimKey = saveDimKey;
|
|
vm.possibleDimKeys = possibleDimKeys;
|
|
|
|
function possibleDimKeys(query) {
|
|
return $q(function(resolve, reject) {
|
|
var dimList = [];
|
|
angular.forEach(vm.matchBy, function(value) {
|
|
if (value.indexOf(query) === 0) {
|
|
dimList.push(value);
|
|
}
|
|
});
|
|
resolve(dimList);
|
|
});
|
|
}
|
|
|
|
function saveDimKey() {
|
|
var matchByTags = [];
|
|
for (var i = 0; i < vm.matchByTags.length; i++) {
|
|
matchByTags.push(vm.matchByTags[i]['text']);
|
|
}
|
|
$('#id_match_by').val(matchByTags.join(','));
|
|
}
|
|
|
|
// init
|
|
$rootScope.$on('$destroy', (function() {
|
|
|
|
var watcher = $rootScope.$on('mon_match_by_changed', onMatchByChange);
|
|
|
|
return function destroyer() {
|
|
watcher();
|
|
};
|
|
|
|
function onMatchByChange(event, matchBy) {
|
|
// remove from tags those match by that do not match
|
|
vm.matchByTags = vm.matchByTags.filter(function filter(tag){
|
|
return matchBy.indexOf(tag['text']) >= 0;
|
|
});
|
|
vm.matchBy = matchBy || [];
|
|
}
|
|
|
|
}()));
|
|
}
|
|
|
|
function NotificationField($rootScope) {
|
|
|
|
var vm = this;
|
|
var allOptions = {};
|
|
var oldUndetermined = {};
|
|
|
|
vm.empty = true;
|
|
vm.list = [];
|
|
vm.select = {
|
|
model:null,
|
|
options:[]
|
|
};
|
|
vm.isDeterministic = false;
|
|
|
|
|
|
vm.init = function(data){
|
|
data = JSON.parse(data);
|
|
vm.empty = data.length === 0;
|
|
data.forEach(prepareNotify);
|
|
};
|
|
vm.add = function(){
|
|
var opt;
|
|
if (vm.select.model) {
|
|
opt = allOptions[vm.select.model];
|
|
|
|
oldUndetermined[opt.id] = opt.undetermined;
|
|
opt.undetermined = !vm.isDeterministic;
|
|
|
|
vm.list.push(opt);
|
|
|
|
removeFromSelect();
|
|
vm.select.model = undefined;
|
|
|
|
}
|
|
};
|
|
vm.remove = function(id){
|
|
for (var i = 0; i<vm.list.length; i+=1) {
|
|
if(vm.list[i].id === id){
|
|
vm.list.splice(i, 1);
|
|
vm.select.options.push(allOptions[id]);
|
|
break;
|
|
}
|
|
}
|
|
vm.select.model = null;
|
|
if (id in oldUndetermined) {
|
|
delete oldUndetermined[id];
|
|
}
|
|
};
|
|
|
|
$rootScope.$on('mon_deterministic_changed', onDeterministicChange);
|
|
|
|
function prepareNotify(item){
|
|
var selected = item[7];
|
|
var notify = {
|
|
id: item[0],
|
|
label: item[1] +' ('+ item[2] +')',
|
|
name: item[1],
|
|
type: item[2],
|
|
address: item[3],
|
|
alarm: item[4],
|
|
ok: item[5],
|
|
undetermined: item[6]
|
|
};
|
|
allOptions[notify.id] = notify;
|
|
if(selected){
|
|
vm.list.push(notify);
|
|
} else {
|
|
vm.select.options.push(notify);
|
|
}
|
|
}
|
|
|
|
function removeFromSelect(){
|
|
var opts = vm.select.options;
|
|
for (var i = 0; i<opts.length; i+=1) {
|
|
if(opts[i].id === vm.select.model){
|
|
opts.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function onDeterministicChange(event, isDeterministic) {
|
|
|
|
if (isDeterministic === vm.isDeterministic) {
|
|
return;
|
|
}
|
|
|
|
vm.isDeterministic = isDeterministic;
|
|
|
|
angular.forEach(vm.list, function(item) {
|
|
if(!(item.id in oldUndetermined)){
|
|
oldUndetermined[item.id] = [];
|
|
}
|
|
if (isDeterministic) {
|
|
oldUndetermined[item.id] = item.undetermined;
|
|
item.undetermined = !isDeterministic;
|
|
} else {
|
|
item.undetermined = oldUndetermined[item.id];
|
|
delete oldUndetermined[item.id];
|
|
}
|
|
});
|
|
}
|
|
}
|