You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.9 KiB
119 lines
2.9 KiB
/*
|
|
** Zabbix
|
|
** Copyright (C) 2001-2023 Zabbix SIA
|
|
**
|
|
** This program is free software; you can redistribute it and/or modify
|
|
** it under the terms of the GNU General Public License as published by
|
|
** the Free Software Foundation; either version 2 of the License, or
|
|
** (at your option) any later version.
|
|
**
|
|
** This program is distributed in the hope that it will be useful,
|
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
** GNU General Public License for more details.
|
|
**
|
|
** You should have received a copy of the GNU General Public License
|
|
** along with this program; if not, write to the Free Software
|
|
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
**/
|
|
|
|
|
|
jQuery(function($) {
|
|
'use strict';
|
|
|
|
/**
|
|
* Object that sends ajax request for server status and show/hide warning messages.
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
var ServerChecker = {
|
|
$elem: null,
|
|
elem_offset_top: 0,
|
|
delay: 10000, // 10 seconds
|
|
warning: false,
|
|
|
|
/**
|
|
* Function to start check server status via RPC call.
|
|
*
|
|
* @param {object} $elem General element.
|
|
* @param {integer} timeout Check rate.
|
|
*/
|
|
start: function($elem, timeout) {
|
|
if (!$elem.length) {
|
|
return false;
|
|
}
|
|
|
|
this.prepareNext(timeout);
|
|
|
|
this.$elem = $elem;
|
|
this.updateWidth();
|
|
this.$elem.on('mouseenter', this.hideMessage.bind(this));
|
|
$(window).on('resize', this.updateWidth.bind(this));
|
|
},
|
|
|
|
prepareNext: function(delay) {
|
|
setTimeout(this.check.bind(this), delay || this.delay);
|
|
},
|
|
|
|
/**
|
|
* Sends ajax request to get Zabbix server availability and message to show if server is not available.
|
|
*/
|
|
check: function() {
|
|
new RPC.Call({
|
|
'method': 'zabbix.status',
|
|
'params': {nocache: true},
|
|
'onSuccess': this.onSuccess.bind(this)
|
|
});
|
|
},
|
|
|
|
onSuccess: function(response) {
|
|
if (response.result) {
|
|
this.hideMessage();
|
|
}
|
|
else {
|
|
this.$elem.html($('<span>').text(response.message));
|
|
this.showMessage()
|
|
}
|
|
|
|
this.prepareNext();
|
|
},
|
|
|
|
showMessage: function(e) {
|
|
if (!this.warning || (e && (e.pageY < this.elem_offset_top || e.type === 'mouseleave'))) {
|
|
$(document).off('mousemove.ServerChecker mouseleave.ServerChecker');
|
|
|
|
this.warning = true;
|
|
this.$elem
|
|
.css('display', 'flex')
|
|
.hide()
|
|
.fadeIn(200);
|
|
}
|
|
},
|
|
|
|
hideMessage: function(e) {
|
|
if (this.warning) {
|
|
if (e && e.type === 'mouseenter') {
|
|
$(document).on('mousemove.ServerChecker mouseleave.ServerChecker', this.showMessage.bind(this));
|
|
|
|
this.elem_offset_top = this.$elem.offset().top;
|
|
}
|
|
else {
|
|
this.warning = false;
|
|
}
|
|
|
|
this.$elem.fadeOut(200);
|
|
}
|
|
},
|
|
|
|
updateWidth: function() {
|
|
let $wrapper = $('.wrapper');
|
|
this.$elem.css({
|
|
left: $wrapper.offset().left + 10,
|
|
width: $wrapper[0].clientWidth - 20
|
|
});
|
|
}
|
|
};
|
|
|
|
ServerChecker.start($('#msg-global-footer'), 5000);
|
|
});
|