nagios4/html/js/nagios-time.js

165 lines
5.5 KiB
JavaScript

angular.module("nagiosTime", [])
.filter("duration", function () {
return function (duration) {
var d, h, m, s;
var timeLeft = duration;
d = Math.floor(timeLeft / 86400000);
timeLeft -= d * 86400000;
h = Math.floor(timeLeft / 3600000);
timeLeft -= h * 3600000;
m = Math.floor(timeLeft / 60000);
timeLeft -= m * 60000;
s = Math.floor(timeLeft / 1000);
return d + "d " + h + "h " + m + "m " + s + "s";
}
})
.service("nagiosTimeService", function() {
return {
cannedTimeperiods: [
{ "value": "today", "label": "Today" },
{ "value": "last24hours", "label": "Last 24 Hours" },
{ "value": "yesterday", "label": "Yesterday" },
{ "value": "thisweek", "label": "This Week" },
{ "value": "last7days", "label": "Last 7 Days" },
{ "value": "lastweek", "label": "Last Week" },
{ "value": "thismonth", "label": "This Month" },
{ "value": "last31days", "label": "Last 31 Days" },
{ "value": "lastmonth", "label": "Last Month" },
{ "value": "thisyear", "label": "This Year" },
{ "value": "lastyear", "label": "Last Year" }
],
timeperiodlist: function() {
// TODO: Only define this once
var list = this.cannedTimeperiods.concat([]);
list.push({
value: "custom",
label: "* CUSTOM REPORT PERIOD *"
});
return list;
},
isCannedTimeperiod: function(timeperiod) {
for (var i = 0; i < this.cannedTimeperiods.length; i++) {
if (timeperiod == this.cannedTimeperiods[i].value) {
return true;
}
}
return false;
},
calculateReportTimes: function(now, period) {
// Calculate report start and end times based on current
// time and the pre-defined period selected
// Initialize the start and end times to something
// reasonable
var starttime = new Date(now.getFullYear(), now.getMonth(),
now.getDate(), 0, 0, 0);
var endtime = new Date(now);
// For canned report periods, calculate the start and
// end times
switch(period) {
case "today":
starttime = new Date(now.getFullYear(), now.getMonth(),
now.getDate(), 0, 0, 0);
endtime = new Date(now);
break;
case "last24hours":
starttime = new Date(now.getTime() -
(24 * 60 * 60 * 1000));
endtime = new Date(now);
break;
case "yesterday":
// This is a change from the legacy trends in that
// it accounts for DST changes. The legacy trends
// used the 24 hour period ending at midnight today.
var oneDayAgo = new Date(now.getTime() -
(24 * 60 * 60 * 1000));
starttime = new Date(oneDayAgo.getFullYear(),
oneDayAgo.getMonth(), oneDayAgo.getDate(),
0, 0, 0);
endtime = new Date(now.getFullYear(), now.getMonth(),
now.getDate(), 0, 0, 0);
break;
case "thisweek":
var thisTimeSunday = new Date(now.getTime() -
(24 * 60 * 60 * 1000 * now.getDay()));
starttime = new Date(thisTimeSunday.getFullYear(),
thisTimeSunday.getMonth(),
thisTimeSunday.getDate(), 0, 0, 0);
endtime = new Date(now);
break;
case "last7days":
// This is a change from the legacy trends in that
// it accounts for DST changes. The legacy trends
// set the start time to be a week's worth of
// seconds (7*24*60*60) before now.
var thisTimeLastWeek = new Date(now.getTime() -
(7 * 24 * 60 * 60 * 1000));
starttime = new Date(thisTimeLastWeek.getFullYear(),
thisTimeLastWeek.getMonth(),
thisTimeLastWeek.getDate(),
now.getHours(), now.getMinutes(),
now.getSeconds());
endtime = new Date(now);
break;
case "lastweek":
// This is a change from the legacy trends in that
// it accounts for DST changes. The legacy trends
// set the start time to be a week's worth of seconds
// (7*24*60*60) before last Sunday at midnight.
var thisTimeLastSunday = new Date(now.getTime() -
(24 * 60 * 60 * 1000 * (now.getDay() + 7)));
var thisTimeSunday = new Date(now.getTime() -
(24 * 60 * 60 * 1000 * now.getDay()));
starttime = new Date(thisTimeLastSunday.getFullYear(),
thisTimeLastSunday.getMonth(),
thisTimeLastSunday.getDate(), 0, 0, 0);
endtime = new Date(thisTimeSunday.getFullYear(),
thisTimeSunday.getMonth(),
thisTimeSunday.getDate(), 0, 0, 0);
break;
case "thismonth":
starttime = new Date(now.getFullYear(), now.getMonth(),
1, 0, 0, 0);
endtime = new Date(now);
break;
case "last31days":
// This is a change from the legacy trends in that
// it accounts for DST changes. The legacy trends
// set the start time to be a months's worth of
// seconds (31*24*60*60) before now.
var daysAgo31 = new Date(now.getTime() -
(31 * 24 * 60 * 60 * 1000));
starttime = new Date(daysAgo31.getFullYear(),
daysAgo31.getMonth(), daysAgo31.getDate(),
now.getHours(), now.getMinutes(),
now.getSeconds());
endtime = new Date(now);
break;
case "lastmonth":
endtime = new Date(now.getFullYear(), now.getMonth(),
1, 0, 0, 0);
var lastMonthEnd = new Date(endtime.getTime() - 1);
starttime = new Date(lastMonthEnd.getFullYear(),
lastMonthEnd.getMonth(), 1, 0, 0, 0);
break;
case "thisyear":
starttime = new Date(now.getFullYear(), 0, 1, 0, 0, 0);
endtime = new Date(now);
break;
case "lastyear":
starttime = new Date(now.getFullYear() - 1,
0, 1, 0, 0, 0);
endtime = new Date(now.getFullYear(), 0, 1, 0, 0, 0);
break;
}
return {start: starttime, end: endtime};
}
};
});