206 lines
6.3 KiB
JavaScript
206 lines
6.3 KiB
JavaScript
angular.module("trendsApp", ["ui.bootstrap", "ui.utils",
|
|
"nagiosDecorations", "nagiosTime"])
|
|
|
|
// Spinner options
|
|
.constant("spinnerOpts", {
|
|
lines: 11, // The number of lines to draw
|
|
length: 11, // The length of each line
|
|
width: 6, // The line thickness
|
|
radius: 11, // The radius of the inner circle
|
|
corners: 1, // Corner roundness (0..1)
|
|
rotate: 0, // The rotation offset
|
|
direction: 1, // 1: clockwise, -1: counterclockwise
|
|
color: '#000', // #rgb or #rrggbb or array of colors
|
|
speed: 1, // Rounds per second
|
|
trail: 58, // Afterglow percentage
|
|
shadow: false, // Whether to render a shadow
|
|
hwaccel: false, // Whether to use hardware acceleration
|
|
className: 'spinner', // The CSS class to assign to the spinner
|
|
zIndex: 2e9, // The z-index (defaults to 2000000000)
|
|
top: '50%', // Top position relative to parent
|
|
left: '50%' // Left position relative to parent
|
|
})
|
|
|
|
.config(function($locationProvider) {
|
|
$locationProvider.html5Mode({
|
|
enabled: true,
|
|
requireBase: false
|
|
})
|
|
})
|
|
|
|
.controller("trendsCtrl", function($scope, $location, $modal, $http,
|
|
nagiosTimeService) {
|
|
$scope.search = $location.search();
|
|
|
|
// URL parameters
|
|
$scope.params = {
|
|
cgiurl: $scope.search.cgiurl ? $scope.search.cgiurl :
|
|
$location.absUrl().replace(/trends\.html.*$/, "cgi-bin/"),
|
|
reporttype: $scope.search.reporttype ?
|
|
$scope.search.reporttype : "",
|
|
host: $scope.search.host ? $scope.search.host : "",
|
|
service: $scope.search.service ?
|
|
$scope.search.service : "",
|
|
timeperiod: $scope.search.timeperiod ?
|
|
$scope.search.timeperiod : "",
|
|
t1: $scope.search.t1 ? $scope.search.t1 : 0,
|
|
t2: $scope.search.t2 ? $scope.search.t2 : 0,
|
|
assumeinitialstates: $scope.search.assumeinitialstates ?
|
|
true : false,
|
|
assumestateretention: $scope.search.assumestateretention ?
|
|
true : false,
|
|
assumestatesduringnotrunning:
|
|
$scope.search.assumestatesduringnotrunning ?
|
|
true : false,
|
|
includesoftstates: $scope.search.includesoftstates ?
|
|
$scope.search.includesoftstates : false,
|
|
initialassumedhoststate:
|
|
$scope.search.initialassumedhoststate ?
|
|
$scope.search.initialassumedhoststate : "",
|
|
initialassumedservicestate:
|
|
$scope.search.initialassumedservicestate ?
|
|
$scope.search.initialassumedservicestate : "",
|
|
backtrack: $scope.search.backtrack ?
|
|
parseInt($scope.search.backtrack) : 4,
|
|
nopopups: $scope.search.nopopups ? true : false,
|
|
nomap: $scope.search.nomap ? true : false
|
|
};
|
|
|
|
// Decoration-related variables
|
|
$scope.lastUpdate = "none";
|
|
|
|
var notBlank = function(value) {
|
|
return value != undefined && value != "";
|
|
};
|
|
|
|
// Determine the report type if not specified
|
|
if ($scope.params.reporttype == "") {
|
|
if (notBlank($scope.params.host) &&
|
|
notBlank($scope.params.service)) {
|
|
$scope.params.reporttype = "services";
|
|
}
|
|
else if (notBlank($scope.params.host)) {
|
|
$scope.params.reporttype = "hosts";
|
|
}
|
|
}
|
|
|
|
// Calculate start and end times based on report timeperiod
|
|
if (nagiosTimeService.isCannedTimeperiod($scope.params.timeperiod)) {
|
|
var times = nagiosTimeService.calculateReportTimes(new Date(),
|
|
$scope.params.timeperiod);
|
|
$scope.params.t1 = times.start.getTime() / 1000;
|
|
$scope.params.t2 = times.end.getTime() / 1000;
|
|
}
|
|
else if ($scope.params.t1 == 0 && $scope.params.t2 == 0) {
|
|
// or s* and e* variables, if specified
|
|
var now = new Date();
|
|
if ($scope.search.syear || $scope.search.smon ||
|
|
$scope.search.sday || $scope.search.shour ||
|
|
$scope.search.smin || $scope.search.ssec) {
|
|
var year = $scope.search.syear ?
|
|
parseInt($scope.search.syear) : now.getFullYear();
|
|
var month = $scope.search.smon ?
|
|
parseInt($scope.search.smon) - 1 : now.getMonth();
|
|
var day = $scope.search.sday ?
|
|
parseInt($scope.search.sday) : now.getDate();
|
|
var hour = $scope.search.shour ?
|
|
parseInt($scope.search.shour) : 0;
|
|
var min = $scope.search.smin ?
|
|
parseInt($scope.search.smin) : 0;
|
|
var sec = $scope.search.ssec ?
|
|
parseInt($scope.search.ssec) : 0;
|
|
var start = new Date(year, month, day, hour, min, sec);
|
|
$scope.params.t1 = start.getTime() / 1000;
|
|
}
|
|
if ($scope.search.eyear || $scope.search.emon ||
|
|
$scope.search.eday || $scope.search.ehour ||
|
|
$scope.search.emin || $scope.search.esec) {
|
|
var year = $scope.search.eyear ?
|
|
parseInt($scope.search.eyear) : now.getFullYear();
|
|
var month = $scope.search.emon ?
|
|
parseInt($scope.search.emon) - 1 : now.getMonth();
|
|
var day = $scope.search.eday ?
|
|
parseInt($scope.search.eday) : now.getDate();
|
|
var hour = $scope.search.ehour ?
|
|
parseInt($scope.search.ehour) : 0;
|
|
var min = $scope.search.emin ?
|
|
parseInt($scope.search.emin) : 0;
|
|
var sec = $scope.search.esec ?
|
|
parseInt($scope.search.esec) : 0;
|
|
var end = new Date(year, month, day, hour, min, sec);
|
|
$scope.params.t2 = end.getTime() / 1000;
|
|
}
|
|
}
|
|
|
|
// Application state variables
|
|
$scope.reload = 0;
|
|
|
|
// Do we have everything necessary to build a trend?
|
|
$scope.canBuildTrend = function() {
|
|
switch ($scope.params.reporttype) {
|
|
case "services":
|
|
if ((($scope.params.timeperiod != "") ||
|
|
(($scope.params.t1 != 0) &&
|
|
($scope.params.t2 != 0)))) {
|
|
return true;
|
|
}
|
|
return false;
|
|
break;
|
|
case "hosts":
|
|
if ((($scope.params.timeperiod != "") ||
|
|
(($scope.params.t1 != 0) &&
|
|
($scope.params.t2 != 0)))) {
|
|
$scope.params.reporttype = "hosts";
|
|
return true;
|
|
}
|
|
return false;
|
|
break;
|
|
default:
|
|
return false;
|
|
break;
|
|
}
|
|
};
|
|
|
|
$scope.displayForm = function(size) {
|
|
$scope.formDisplayed = true;
|
|
var modalInstance = $modal.open({
|
|
templateUrl: 'trends-form.html',
|
|
controller: 'trendsFormCtrl',
|
|
size: size,
|
|
resolve: {
|
|
params: function () {
|
|
return $scope.params;
|
|
}
|
|
}
|
|
});
|
|
|
|
modalInstance.result.then(function(params) {
|
|
$scope.formDisplayed = false;
|
|
$scope.params = params;
|
|
$scope.reload++;
|
|
},
|
|
function(reason) {
|
|
$scope.formDisplayed = false;
|
|
});
|
|
};
|
|
|
|
if(!$scope.canBuildTrend()) {
|
|
$scope.displayForm();
|
|
};
|
|
|
|
$scope.infoBoxTitle = function() {
|
|
switch ($scope.params.reporttype) {
|
|
case "hosts":
|
|
return "Host State Trends";
|
|
break;
|
|
case "services":
|
|
return "Service State Trends";
|
|
break;
|
|
default:
|
|
return "Host and Service State Trends";
|
|
break;
|
|
}
|
|
};
|
|
|
|
});
|