Websocket client/server work - get statistic counter streaming working in place of the polling method
This commit is contained in:
parent
438effda5b
commit
279e3ed5bd
37
app.js
37
app.js
|
@ -229,20 +229,14 @@ leases_per_minute_counter_timer = setInterval(function(){
|
||||||
|
|
||||||
|
|
||||||
/* Websockets statistics subscription broadcast */
|
/* Websockets statistics subscription broadcast */
|
||||||
if(ws_is_subscribed('dhcp_statistics')) {
|
if(ws_event_subscribers('dhcp_statistics')) {
|
||||||
|
|
||||||
return_data = {
|
return_data = {
|
||||||
"cpu_utilization": cpu_utilization,
|
"cpu_utilization": cpu_utilization,
|
||||||
"leases_per_second": current_leases_per_second,
|
"leases_per_second": current_leases_per_second,
|
||||||
"leases_per_minute": leases_per_minute
|
"leases_per_minute": leases_per_minute
|
||||||
};
|
};
|
||||||
wss.broadcast_event(JSON.stringify(return_data), 'dhcp_statistics');
|
wss.broadcast_event(JSON.stringify(return_data), 'dhcp_statistics');
|
||||||
|
|
||||||
console.log('Returning stats');
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
console.log('Stats not subscribed');
|
|
||||||
}
|
|
||||||
|
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
|
@ -392,14 +386,29 @@ function isJson(str) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ws_is_subscribed(event){
|
function ws_event_subscribers(event){
|
||||||
if(typeof ws === "undefined")
|
if(typeof wss === "undefined")
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
if(ws.event_subscription[event])
|
var is_listening = false;
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
wss.clients.forEach(function each(ws) {
|
||||||
|
|
||||||
|
/* Count event listeners */
|
||||||
|
for (var event_listening in ws.event_subscription) {
|
||||||
|
if (event_listening == event) {
|
||||||
|
is_listening = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
if (is_listening) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wss.on('connection', function connection(ws) {
|
wss.on('connection', function connection(ws) {
|
||||||
|
@ -462,7 +471,7 @@ function stale_connections_audit() {
|
||||||
/* Keepalive - kill stale connections (30s poll) */
|
/* Keepalive - kill stale connections (30s poll) */
|
||||||
const interval = setInterval(function ping() {
|
const interval = setInterval(function ping() {
|
||||||
stale_connections_audit();
|
stale_connections_audit();
|
||||||
}, 30000);
|
}, 3000);
|
||||||
|
|
||||||
var socket_clients = 0;
|
var socket_clients = 0;
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,12 @@ $(document).ready(function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
setTimeout(function(){
|
||||||
|
handle_websocket_subscription_navigation ();
|
||||||
}, 100);
|
}, 100);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -50,11 +56,6 @@ $(document).on('on_pjax_click', function (e, href) {
|
||||||
/* Unhook from all websocket events */
|
/* Unhook from all websocket events */
|
||||||
websockets_unsubscribe_all_events();
|
websockets_unsubscribe_all_events();
|
||||||
|
|
||||||
/* Stream dashboard stats */
|
|
||||||
if(document.location.pathname == "/"){
|
|
||||||
websockets_subscribe_event("dhcp_statistics");
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -66,6 +67,8 @@ $(document).on('on_pjax_complete', function (e) {
|
||||||
$('.overlay').css("display", "none");
|
$('.overlay').css("display", "none");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handle_websocket_subscription_navigation ();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Form input focus event
|
* Form input focus event
|
||||||
*/
|
*/
|
||||||
|
@ -99,10 +102,20 @@ $(document).on('on_pjax_complete', function (e) {
|
||||||
});
|
});
|
||||||
|
|
||||||
remove_init_form();
|
remove_init_form();
|
||||||
|
|
||||||
remove_init_form();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function handle_websocket_subscription_navigation () {
|
||||||
|
console.log(window.location.pathname);
|
||||||
|
|
||||||
|
/* Stream dashboard stats */
|
||||||
|
if(document.location.pathname == "/"){
|
||||||
|
websockets_subscribe_event("dhcp_statistics");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
websockets_unsubscribe_all_events();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function remove_init_form() {
|
function remove_init_form() {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
$('.form-line').removeClass("focused");
|
$('.form-line').removeClass("focused");
|
||||||
|
|
|
@ -77,9 +77,9 @@ function parse_log_stream (console_data){
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Note: the only thing I stream currently is dhcp log - so later incoming messages will need to be
|
Note: the only thing I stream currently is dhcp log - so later incoming messages will need to be
|
||||||
keyed by their "type" via json
|
keyed by their "type" via json
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var grep_value = document.getElementById("grep_fitler").value;
|
var grep_value = document.getElementById("grep_fitler").value;
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,12 @@ function websockets_unsubscribe_event(event){
|
||||||
}
|
}
|
||||||
|
|
||||||
function websockets_unsubscribe_all_events(){
|
function websockets_unsubscribe_all_events(){
|
||||||
socket.send(JSON.stringify({"event_unsubscribe": "all_events"}));
|
if(typeof subscribed_events !== "undefined") {
|
||||||
subscribed_events = [];
|
if(subscribed_events.length > 0 ) {
|
||||||
|
socket.send(JSON.stringify({"event_unsubscribe": "all_events"}));
|
||||||
|
subscribed_events = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect_websocket() {
|
function connect_websocket() {
|
||||||
|
@ -36,7 +40,7 @@ function connect_websocket() {
|
||||||
var event_data = JSON.parse(data.data);
|
var event_data = JSON.parse(data.data);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
{event: "dhcp_log_subscription", data: "Oct 3 16:02:59 DHCP-Server dhcpd[5303]: reuse_l…% threshold, reply with unaltered, existing lease"}
|
{event: "dhcp_log_subscription", data: "Oct 3 16:02:59 DHCP-Server dhcpd[5303]: reuse_l…% threshold, reply with unaltered, existing lease"}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!subscribed_events[event_data['event']])
|
if (!subscribed_events[event_data['event']])
|
||||||
|
@ -46,6 +50,9 @@ function connect_websocket() {
|
||||||
if (event_data['event'] == 'dhcp_log_subscription')
|
if (event_data['event'] == 'dhcp_log_subscription')
|
||||||
parse_log_stream (event_data.data);
|
parse_log_stream (event_data.data);
|
||||||
|
|
||||||
|
if (event_data['event'] == 'dhcp_statistics')
|
||||||
|
parse_statistics_stream (event_data.data);
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -283,14 +283,11 @@
|
||||||
}
|
}
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
var get_counters_timer = setInterval(function () {
|
function parse_statistics_stream(data){
|
||||||
if ($('#total-leases').length) {
|
data = JSON.parse(data);
|
||||||
$.get( "/api/get_server_info", function( data ) {
|
$('#cpu-utilization').html(data.cpu_utilization + "%");
|
||||||
$('#cpu-utilization').html(data.cpu_utilization + "%");
|
$('#leases-sec').html(data.leases_per_second.toLocaleString('en') + ' / ' + data.leases_per_minute.toLocaleString('en'));
|
||||||
$('#leases-sec').html(data.leases_per_second.toLocaleString('en') + ' / ' + data.leases_per_minute.toLocaleString('en'));
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
}, 1000);
|
|
||||||
|
|
||||||
var window_focus = true;
|
var window_focus = true;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue