1
- /* global $, window, document, alert */
2
1
/* eslint-disable import/no-unassigned-import */
2
+ /* global $, window, document, alert */
3
3
4
4
const ipc = require ( 'electron' ) . ipcRenderer ;
5
5
const { shell} = require ( 'electron' ) ;
@@ -85,6 +85,7 @@ const $gridDevices = $('#grid-devices');
85
85
const $gridLinks = $ ( '#grid-links' ) ;
86
86
const $gridRssi = $ ( '#grid-rssi' ) ;
87
87
const $gridMessages = $ ( '#grid-messages' ) ;
88
+ const $gridEvents = $ ( '#grid-events' ) ;
88
89
const $gridInterfaces = $ ( '#grid-interfaces' ) ;
89
90
90
91
const $tableEasymode = $ ( '#table-easymode' ) ;
@@ -189,6 +190,17 @@ ipcRpc.on('connection', connected => {
189
190
$ ( '#connection-indicator' ) . html ( `${ config . ccuAddress } <br><span style="font-size: 8px; font-weight: normal;">${ connections } </span>` ) ;
190
191
} ) ;
191
192
193
+ let eventRow = 0 ;
194
+ let newEvent = false ;
195
+
196
+ function pushEvent ( data ) {
197
+ newEvent = true ;
198
+ eventsData . push ( data ) ;
199
+ if ( eventsData . length > 8192 ) {
200
+ eventsData . splice ( 0 , 1 ) ;
201
+ }
202
+ }
203
+
192
204
// Incoming Events
193
205
ipcRpc . on ( 'rpc' , data => {
194
206
const [ method , params ] = data ;
@@ -201,6 +213,8 @@ ipcRpc.on('rpc', data => {
201
213
}
202
214
switch ( method ) {
203
215
case 'newDevices' : {
216
+ pushEvent ( { timestamp : ts ( ) , method, value : JSON . stringify ( params [ 1 ] ) } ) ;
217
+
204
218
const devArr = params [ 1 ] ;
205
219
$ ( 'div.ui-dialog[aria-describedby="dialog-alert"] .ui-dialog-title' ) . html ( _ ( 'New devices' ) ) ;
206
220
let count = 0 ;
@@ -224,6 +238,8 @@ ipcRpc.on('rpc', data => {
224
238
break ;
225
239
}
226
240
case 'deleteDevices' : {
241
+ pushEvent ( { timestamp : ts ( ) , method, value : JSON . stringify ( params [ 1 ] ) } ) ;
242
+
227
243
const devArr = params [ 1 ] ;
228
244
$ ( 'div.ui-dialog[aria-describedby="dialog-alert"] .ui-dialog-title' ) . html ( _ ( 'Devices deleted' ) ) ;
229
245
let count = 0 ;
@@ -249,6 +265,7 @@ ipcRpc.on('rpc', data => {
249
265
break ;
250
266
}
251
267
case 'replaceDevice' : {
268
+ pushEvent ( { timestamp : ts ( ) , method, value : JSON . stringify ( params [ 1 ] ) } ) ;
252
269
getNames ( ( ) => {
253
270
getDevices ( ( ) => {
254
271
getLinks ( ( ) => {
@@ -260,18 +277,14 @@ ipcRpc.on('rpc', data => {
260
277
}
261
278
case 'event' : {
262
279
const [ , address , param , value ] = params ;
263
-
264
- const timestamp = new Date ( ) ;
265
- const ts = timestamp . getFullYear ( ) + '-' +
266
- ( '0' + ( timestamp . getMonth ( ) + 1 ) . toString ( 10 ) ) . slice ( - 2 ) + '-' +
267
- ( '0' + ( timestamp . getDate ( ) ) . toString ( 10 ) ) . slice ( - 2 ) + ' ' +
268
- ( '0' + ( timestamp . getHours ( ) ) . toString ( 10 ) ) . slice ( - 2 ) + ':' +
269
- ( '0' + ( timestamp . getMinutes ( ) ) . toString ( 10 ) ) . slice ( - 2 ) + ':' +
270
- ( '0' + ( timestamp . getSeconds ( ) ) . toString ( 10 ) ) . slice ( - 2 ) ;
280
+ const [ device , channel ] = address . split ( ':' ) ;
271
281
272
282
const name = names && names [ address ] ? names [ address ] : '' ;
273
283
274
- $ ( '#event-table' ) . prepend ( '<tr class="ui-widget-content jqgrow ui-row-ltr "><td class="event-column-1 monospace">' + ts + '</td><td class="event-column-2">' + name + '</td><td class="event-column-3 monospace">' + address + '</td><td class="event-column-4 monospace">' + param + '</td><td class="event-column-5 monospace">' + value + '</td></tr>' ) ;
284
+ //$('#event-table').prepend('<tr class="ui-widget-content jqgrow ui-row-ltr "><td class="event-column-1 monospace">' + ts + '</td><td class="event-column-2">' + name + '</td><td class="event-column-3 monospace">' + address + '</td><td class="event-column-4 monospace">' + param + '</td><td class="event-column-5 monospace">' + value + '</td></tr>');
285
+
286
+ pushEvent ( { timestamp : ts ( ) , method : 'event' , channel, device, name, param, value} ) ;
287
+
275
288
276
289
// Service-Meldung?
277
290
if ( ! listMessages ) {
@@ -358,6 +371,8 @@ ipcRpc.on('rpc', data => {
358
371
break ;
359
372
}
360
373
default :
374
+ pushEvent ( { timestamp : ts ( ) , method, value : JSON . stringify ( params [ 1 ] ) } ) ;
375
+
361
376
}
362
377
} ) ;
363
378
@@ -411,15 +426,17 @@ function getConfig() {
411
426
translate ( ) ;
412
427
413
428
initTabs ( ) ;
414
- initDialogsMisc ( ) ;
415
- initDialogParamset ( ) ;
416
- initDialogLinkParamset ( ) ;
429
+ initGridEvents ( ) ;
417
430
418
431
initGridDevices ( ) ;
419
432
initGridMessages ( ) ;
420
433
initGridLinks ( ) ;
421
434
initConsole ( ) ;
422
435
436
+ initDialogsMisc ( ) ;
437
+ initDialogParamset ( ) ;
438
+ initDialogLinkParamset ( ) ;
439
+
423
440
$ ( '#loader' ) . hide ( ) ;
424
441
425
442
if ( ! config . ccuAddress ) {
@@ -472,12 +489,30 @@ function getNames(callback) {
472
489
}
473
490
} ) ;
474
491
}
492
+
493
+ let refreshEvents = false ;
494
+
495
+ setInterval ( ( ) => {
496
+ if ( refreshEvents ) {
497
+ if ( newEvent ) {
498
+ newEvent = false ;
499
+ $gridEvents . trigger ( 'reloadGrid' ) ;
500
+ }
501
+ }
502
+ } , 1000 ) ;
503
+
475
504
function initTabs ( ) {
476
505
$tabsMain . tabs ( {
477
506
478
507
activate ( event , ui ) {
479
508
resizeGrids ( ) ;
509
+
480
510
const tab = ui . newTab [ 0 ] . children [ 0 ] . hash . slice ( 1 ) ;
511
+
512
+ refreshEvents = tab === 'events' ;
513
+ console . log ( 'refreshEvents' , refreshEvents ) ;
514
+
515
+
481
516
if ( hash ) {
482
517
window . location . hash = '/' + hash + '/' + tab ;
483
518
}
@@ -606,6 +641,7 @@ function initDialogsMisc() {
606
641
} ) ;
607
642
}
608
643
function initDaemon ( ) {
644
+ eventsData . length = 0 ;
609
645
indexSourceRoles = { } ;
610
646
indexTargetRoles = { } ;
611
647
daemon = $ ( '#select-bidcos-daemon option:selected' ) . val ( ) ;
@@ -643,6 +679,7 @@ function initDaemon() {
643
679
firstLoad = false ;
644
680
645
681
console . log ( 'initDaemon' , daemon ) ;
682
+ $gridEvents . trigger ( 'reloadGrid' ) ;
646
683
647
684
if ( daemon && config . daemons [ daemon ] ) {
648
685
const { type} = config . daemons [ daemon ] ;
@@ -3928,6 +3965,57 @@ function refreshGridInterfaces() {
3928
3965
$gridInterfaces . trigger ( 'reloadGrid' ) ;
3929
3966
}
3930
3967
3968
+ const eventsData = [ ] ;
3969
+
3970
+ function initGridEvents ( ) {
3971
+ $gridEvents . jqGrid ( {
3972
+ colNames : [ 'Timestamp' , 'Method' , 'Name' , 'Device' , 'Channel' , 'Param' , 'Value' ] ,
3973
+ colModel : [
3974
+ { name : 'timestamp' , index : 'timestamp' , width : 140 , fixed : true , title : true , search : true } ,
3975
+ { name : 'method' , index : 'method' , width : 80 , fixed : true , title : true , align : 'center' , search : true } ,
3976
+ { name : 'name' , index : 'name' , width : 320 , fixed : true , title : false , hidden : config . hideNameCols , search : true } ,
3977
+ { name : 'device' , index : 'device' , width : 110 , fixed : true , title : true , search : true } ,
3978
+ { name : 'channel' , index : 'channel' , width : 60 , fixed : true , title : false , align : 'right' , search : true } ,
3979
+ { name : 'param' , index : 'param' , width : 200 , fixed : true , title : false , search : true } ,
3980
+ { name : 'value' , index : 'value' , width : 80 , fixed : false , title : false , align : 'right' , search : true }
3981
+ ] ,
3982
+ data : eventsData ,
3983
+ datatype : 'local' ,
3984
+ rowNum : 100 ,
3985
+ autowidth : true ,
3986
+ width : '1000' ,
3987
+ height : 'auto' ,
3988
+ rowList : [ 25 , 50 , 100 , 500 ] ,
3989
+ pager : $ ( '#pager-events' ) ,
3990
+ sortname : 'timestamp' ,
3991
+ viewrecords : true ,
3992
+ sortorder : 'desc' ,
3993
+ caption : _ ( 'Events' ) ,
3994
+
3995
+ } ) . navGrid ( '#pager-events' , {
3996
+ search : false ,
3997
+ edit : false ,
3998
+ add : false ,
3999
+ del : false ,
4000
+ refresh : false
4001
+ } ) /*.jqGrid('navButtonAdd', '#pager-events', {
4002
+ caption: '',
4003
+ buttonicon: 'ui-icon-refresh',
4004
+ onClickButton: () => {
4005
+ $gridEvents.trigger('reloadGrid');
4006
+ },
4007
+ position: 'first',
4008
+ id: 'refresh-events',
4009
+ title: _('Refresh'),
4010
+ cursor: 'pointer'
4011
+ })*/ . jqGrid ( 'filterToolbar' , {
4012
+ defaultSearch : 'cn' ,
4013
+ autosearch : true ,
4014
+ searchOnEnter : false ,
4015
+ enableClear : true
4016
+ } )
4017
+ }
4018
+
3931
4019
// Service Messages
3932
4020
function initGridMessages ( ) {
3933
4021
$gridMessages . jqGrid ( {
@@ -4604,10 +4692,10 @@ function resizeGrids() {
4604
4692
y = 600 ;
4605
4693
}
4606
4694
4607
- $ ( '#grid-devices, #grid-links, #grid-messages' ) . setGridHeight ( y - 144 ) . setGridWidth ( x - 18 ) ;
4695
+ $ ( '#grid-devices, #grid-links, #grid-messages, #grid-events ' ) . setGridHeight ( y - 144 ) . setGridWidth ( x - 18 ) ;
4608
4696
4609
- $ ( '#grid-events' ) . css ( 'height' , ( y - 80 ) + 'px' ) . css ( 'width' , ( x - 18 ) + 'px' ) ;
4610
- $ ( '#grid-events-inner' ) . css ( 'height' , ( y - 100 ) + 'px' ) ;
4697
+ // $('#grid-events').css('height', (y - 80) + 'px').css('width', (x - 18) + 'px');
4698
+ // $('#grid-events-inner').css('height', (y - 100) + 'px');
4611
4699
$ ( '#grid-interfaces' ) /* .setGridHeight(y - 99) */ . setGridWidth ( x - 18 ) ;
4612
4700
$ ( '#grid-rssi' ) . setGridHeight ( y - ( 173 + $ ( '#gbox_grid-interfaces' ) . height ( ) ) ) . setGridWidth ( x - 18 ) ;
4613
4701
@@ -4784,3 +4872,14 @@ function convertHmIPKeyBase32ToBase16(valueString) {
4784
4872
4785
4873
return keyString . toUpperCase ( ) ;
4786
4874
}
4875
+
4876
+
4877
+ function ts ( ) {
4878
+ const timestamp = new Date ( ) ;
4879
+ return timestamp . getFullYear ( ) + '-' +
4880
+ ( '0' + ( timestamp . getMonth ( ) + 1 ) . toString ( 10 ) ) . slice ( - 2 ) + '-' +
4881
+ ( '0' + ( timestamp . getDate ( ) ) . toString ( 10 ) ) . slice ( - 2 ) + ' ' +
4882
+ ( '0' + ( timestamp . getHours ( ) ) . toString ( 10 ) ) . slice ( - 2 ) + ':' +
4883
+ ( '0' + ( timestamp . getMinutes ( ) ) . toString ( 10 ) ) . slice ( - 2 ) + ':' +
4884
+ ( '0' + ( timestamp . getSeconds ( ) ) . toString ( 10 ) ) . slice ( - 2 ) ;
4885
+ }
0 commit comments