commit
This commit is contained in:
171
htdocs/js/smokeping.js
Normal file
171
htdocs/js/smokeping.js
Normal file
@@ -0,0 +1,171 @@
|
||||
/*++ from bonsai.js ++ urlObj +++++++++++++++++++++++++++++++++++++++++*/
|
||||
function urlObj(url) {
|
||||
var urlBaseAndParameters;
|
||||
|
||||
urlBaseAndParameters = url.split("?");
|
||||
this.urlBase = urlBaseAndParameters[0];
|
||||
this.urlParameters = urlBaseAndParameters[1].split(/[;&]/);
|
||||
|
||||
this.getUrlBase = urlObjGetUrlBase;
|
||||
}
|
||||
|
||||
/*++ from bonsai.js ++ urlObjGetUrlBase +++++++++++++++++++++++++++++++*/
|
||||
|
||||
function urlObjGetUrlBase() {
|
||||
return this.urlBase;
|
||||
}
|
||||
|
||||
function parseRelativeTime(currTime) {
|
||||
var unit = '';
|
||||
var offset = 0;
|
||||
var sign = -1;
|
||||
var table = {
|
||||
s : 1, // 1
|
||||
m : 60, // s * 60
|
||||
h : 3600, // m * 60
|
||||
d : 86400, // h * 24
|
||||
w : 604800, // d * 7
|
||||
mo : 2592000, // d * 30
|
||||
y : 31536000, // d * 365
|
||||
};
|
||||
var regexStr = currTime.match(/[+\-]|[^a-z]+|[a-zA-Z]+/gi);
|
||||
if (regexStr[0] == '+')
|
||||
sign = 1;
|
||||
for (i=1; i< regexStr.length; i=i+2) {
|
||||
unit = regexStr[i+1].slice(0,1);
|
||||
if (regexStr[i+1].slice(0,2) == 'mo' || (regexStr[i+1] == 'm' && Math.abs(regexStr[i]) <= 5))
|
||||
unit = 'mo';
|
||||
offset += regexStr[i]*table[unit];
|
||||
|
||||
}
|
||||
offset = offset*sign;
|
||||
return Math.floor(Date.now()/1000) + offset;
|
||||
}
|
||||
|
||||
// example with minimum dimensions
|
||||
var myCropper;
|
||||
|
||||
var StartEpoch = 0;
|
||||
var EndEpoch = 0;
|
||||
|
||||
|
||||
|
||||
function changeRRDImage(coords,dimensions){
|
||||
|
||||
// disable reloading the RRD image while zoomed in
|
||||
try {
|
||||
window.stop();
|
||||
} catch (exception) {
|
||||
// fallback for IE
|
||||
document.execCommand('Stop');
|
||||
}
|
||||
|
||||
var SelectLeft = Math.min(coords.x1,coords.x2);
|
||||
|
||||
var SelectRight = Math.max(coords.x1,coords.x2);
|
||||
|
||||
if (SelectLeft == SelectRight)
|
||||
return; // abort if nothing is selected.
|
||||
|
||||
var RRDLeft = 67; // difference between left border of RRD image and content
|
||||
var RRDRight = 26; // difference between right border of RRD image and content
|
||||
var RRDImgWidth = $('zoom').getDimensions().width; // Width of the Smokeping RRD Graphik
|
||||
var RRDImgUsable = RRDImgWidth - RRDRight - RRDLeft;
|
||||
var form = $('range_form');
|
||||
|
||||
if (StartEpoch == 0) {
|
||||
StartEpoch = +$F('epoch_start');
|
||||
if (isNaN(StartEpoch))
|
||||
StartEpoch = parseRelativeTime($F('epoch_start'));
|
||||
}
|
||||
if (EndEpoch == 0) {
|
||||
EndEpoch = +$F('epoch_end');
|
||||
if (isNaN(EndEpoch))
|
||||
EndEpoch = parseRelativeTime($F('epoch_end'));
|
||||
}
|
||||
var DivEpoch = EndEpoch - StartEpoch;
|
||||
|
||||
var Target = $F('target');
|
||||
var Hierarchy = $F('hierarchy');
|
||||
|
||||
// construct Image URL
|
||||
var myURLObj = new urlObj(document.URL);
|
||||
|
||||
var myURL = myURLObj.getUrlBase();
|
||||
|
||||
// Generate Selected Range in Unix Timestamps
|
||||
var LeftFactor = 1;
|
||||
var RightFactor = 1;
|
||||
|
||||
if (SelectLeft < RRDLeft)
|
||||
LeftFactor = 10;
|
||||
|
||||
StartEpoch = Math.floor(StartEpoch + (SelectLeft - RRDLeft) * DivEpoch / RRDImgUsable * LeftFactor );
|
||||
|
||||
if (SelectRight > RRDImgWidth - RRDRight)
|
||||
RightFactor = 10;
|
||||
|
||||
EndEpoch = Math.ceil(EndEpoch + (SelectRight - (RRDImgWidth - RRDRight) ) * DivEpoch / RRDImgUsable * RightFactor);
|
||||
|
||||
|
||||
$('zoom').src = myURL + '?displaymode=a;start=' + StartEpoch + ';end=' + EndEpoch + ';target=' + Target + ';hierarchy=' + Hierarchy;
|
||||
|
||||
myCropper.setParams();
|
||||
|
||||
};
|
||||
|
||||
if($('range_form') != null && $('range_form').length){
|
||||
$('range_form').on('submit', (function() {
|
||||
$form = $(this);
|
||||
var cgiurl = $form.action.split("?");
|
||||
var action = $form.serialize().split("&");
|
||||
action = action.map(i=> i + ';');
|
||||
$form.action = cgiurl[0] + "?" + action[4] + action[5] + action[6] + action[3];
|
||||
}));
|
||||
}
|
||||
|
||||
Event.observe(
|
||||
window,
|
||||
'load',
|
||||
function() {
|
||||
let refresh = setTimeout(function () {
|
||||
location.reload();
|
||||
}, window.options.step * 1000);
|
||||
|
||||
$('menu-button').observe('click', function (e) {
|
||||
if ($('sidebar').getStyle('left') == '0px') {
|
||||
$('body').addClassName('sidebar-hidden');
|
||||
$('body').removeClassName('sidebar-visible');
|
||||
} else {
|
||||
$('body').removeClassName('sidebar-hidden');
|
||||
$('body').addClassName('sidebar-visible');
|
||||
}
|
||||
Event.stop(e);
|
||||
});
|
||||
$('refresh-button').observe('click', function (e) {
|
||||
if (localStorage.getItem("noRefresh")) {
|
||||
localStorage.removeItem("noRefresh");
|
||||
refresh = setTimeout(function () {
|
||||
location.reload();
|
||||
}, window.options.step * 1000);
|
||||
$('refresh-button').style.textDecoration = "line-through";
|
||||
} else {
|
||||
clearTimeout(refresh);
|
||||
localStorage.setItem("noRefresh", true);
|
||||
$('refresh-button').style.textDecoration = "none";
|
||||
}
|
||||
Event.stop(e);
|
||||
});
|
||||
if ($('zoom') != null) {
|
||||
myCropper = new Cropper.Img(
|
||||
'zoom',
|
||||
{
|
||||
minHeight: $('zoom').getDimensions().height,
|
||||
maxHeight: $('zoom').getDimensions().height,
|
||||
onEndCrop: changeRRDImage
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user