Implement acked monitoring + filter out
This commit is contained in:
parent
4ebc7b9681
commit
c344c31d4c
@ -30,7 +30,7 @@ inside of the gnome-shell panel (this could not be developed).
|
||||
Things I plan to add at some point or another:
|
||||
|
||||
* Buttons to operate on services à la nagstamon (recheck, connect via SSH, etc.)
|
||||
* Filters to hide services (acked, handled, ...)
|
||||
* Filters to hide services (handled, scheduled downtime, host down, ...)
|
||||
* Support for other (as in free speech) monitoring servers
|
||||
* Choose which columns are shown in services result
|
||||
|
||||
@ -38,3 +38,4 @@ Things I will be unlikely to add unless a patch is provided:
|
||||
|
||||
* Support for broken HTTPS certs
|
||||
* Notification for new alerts
|
||||
* Display list of down hosts (I am not interested in host monitoring but services)
|
||||
|
15
extension.js
15
extension.js
@ -59,6 +59,7 @@ const column_definitions = {
|
||||
status: { label: _('Status'), width: 50, expand: false, },
|
||||
host_name: { label: _('Host name'), width: 300, expand: false, },
|
||||
service_display_name: { label: _('Service'), width: 300, expand: false, },
|
||||
has_been_acknowledged: { label: _('Ack'), width: 50, expand: false, align: Clutter.ActorAlign.CENTER, style: 'font-weight:bold;' },
|
||||
last_check: { label: _('Last check'), width: 200, expand: false, type: 'date' },
|
||||
attempts: { label: _('Attempts'), width: 50, expand: false, },
|
||||
status_information: { label: _('Information'), width: 600, expand: true, },
|
||||
@ -253,11 +254,14 @@ class Indicator extends PanelMenu.Button {
|
||||
createBin ( status, text, col ) {
|
||||
let _child;
|
||||
|
||||
if ( ! text )
|
||||
if ( text === undefined )
|
||||
text = '…';
|
||||
|
||||
if ( ! col [ 'special' ] )
|
||||
_child = new St.Label({ style_class: 'monito-label', text: text.toString(), });
|
||||
_child = new St.Label ( { style_class: 'monito-label',
|
||||
text: text.toString(),
|
||||
x_align: ( col.align ? col.align : Clutter.ActorAlign.START ),
|
||||
style: ( col.style ? col.style : '' ) } );
|
||||
else if ( col.special == 'actions' && this.serverLogic.canRecheck )
|
||||
{
|
||||
_child = new St.BoxLayout ( { x_expand: false,
|
||||
@ -388,6 +392,13 @@ class Indicator extends PanelMenu.Button {
|
||||
else if ( _col == 'status_information' && this.account_settings.get_string ( 'status-info-match' ) )
|
||||
entry [ _col ] = entry [ _col ] . replace ( new RegExp ( this.account_settings.get_string ( 'status-info-match' ), 'i' ),
|
||||
this.account_settings.get_string ( 'status-info-replace' ) );
|
||||
else if ( _col == 'has_been_acknowledged' )
|
||||
{
|
||||
if ( entry [ _col ] )
|
||||
entry [ _col ] = '✔'; // … or ✅🗹 ?
|
||||
else
|
||||
entry [ _col ] = '';
|
||||
}
|
||||
|
||||
infoBox.add_child ( this.createBin ( entry.status, entry [ _col ], column_definitions [ _col ] ) );
|
||||
}
|
||||
|
10
prefs.js
10
prefs.js
@ -57,6 +57,7 @@ const prefs = [
|
||||
{ type: Gtk.ColorButton, category: 'Colors', label: _('Warning color'), key: 'warning-fg', align: Gtk.Align.START },
|
||||
{ type: Gtk.ColorButton, category: 'Colors', label: _('Critical color'), key: 'critical-fg', align: Gtk.Align.START },
|
||||
{ type: Gtk.ColorButton, category: 'Colors', label: _('Unknown color'), key: 'unknown-fg', align: Gtk.Align.START },
|
||||
{ type: Gtk.Switch, category: 'Filters', label: _('Do <b>not</b> display acknowledged services'), key: 'acknowledged-filter-out', align: Gtk.Align.START },
|
||||
{ type: Gtk.Entry, category: 'Filters', label: _('Only display hosts matching'), key: 'host-grep' },
|
||||
{ type: Gtk.Entry, category: 'Filters', label: _('Only display services matching'), key: 'service-grep' },
|
||||
{ type: Gtk.Entry, category: 'Filters', label: _('Only display status info matching'), key: 'status-info-grep' },
|
||||
@ -325,6 +326,15 @@ function activateAccountRow ( ) {
|
||||
Gio.SettingsBindFlags.DEFAULT
|
||||
);
|
||||
}
|
||||
else if ( prefEntry.type == Gtk.Switch )
|
||||
{
|
||||
_account_settings.bind (
|
||||
prefEntry.key,
|
||||
this.prefWidgets[prefEntry.key],
|
||||
'active',
|
||||
Gio.SettingsBindFlags.DEFAULT
|
||||
);
|
||||
}
|
||||
else if ( prefEntry.type == Gtk.ColorButton )
|
||||
{
|
||||
let _color = new Gdk.RGBA ( );
|
||||
|
@ -110,7 +110,7 @@
|
||||
</key>
|
||||
|
||||
<key name="columns" type="as">
|
||||
<default>['status','host_name','service_display_name','last_check','attempts','status_information']</default>
|
||||
<default>['status','host_name','service_display_name','has_been_acknowledged','last_check','attempts','status_information']</default>
|
||||
</key>
|
||||
|
||||
<key name="columns-order" type="as">
|
||||
@ -129,6 +129,10 @@
|
||||
<default>''</default>
|
||||
</key>
|
||||
|
||||
<key name="acknowledged-filter-out" type="b">
|
||||
<default>false</default>
|
||||
</key>
|
||||
|
||||
<key name="host-filter-out" type="s">
|
||||
<default>''</default>
|
||||
</key>
|
||||
|
@ -169,14 +169,22 @@ class GenericServer {
|
||||
for ( var _filter of filters )
|
||||
_filter.value = this._settings.get_string ( _filter.prefKey );
|
||||
|
||||
entries: for ( var i = 0 ; i < status.length ; i ++ )
|
||||
entries:
|
||||
for ( var i = 0 ; i < status.length ; i ++ )
|
||||
{
|
||||
if ( status[i]['has_been_acknowledged'] && this._settings.get_boolean ( 'acknowledged-filter-out' ) )
|
||||
{
|
||||
log ( '> ACKED:%s ' . format ( status[i]['service_display_name'] ) );
|
||||
status.splice ( i, 1 );
|
||||
i --; // This has been removed, so get back one step.
|
||||
continue entries;
|
||||
}
|
||||
|
||||
for ( var _filter of filters )
|
||||
{
|
||||
if ( _filter['value'] &&
|
||||
( status[i][_filter['entryKey']].match ( new RegExp ( _filter['value'], 'i' ) ) <= 0 ) == _filter['positive'] )
|
||||
{
|
||||
// log ( '> NOT MATCHING: %s =~ %s == %s ' . format ( status[i][_filter['entryKey']], _filter['value'], _filter['positive'] ) );
|
||||
status.splice ( i, 1 );
|
||||
i --; // This has been removed, so get back one step.
|
||||
continue entries;
|
||||
|
@ -71,6 +71,7 @@ class Icinga2 extends GenericServer {
|
||||
host_name: entry.host_name,
|
||||
service_display_name: entry.service_display_name,
|
||||
attempts: entry.service_attempt,
|
||||
has_been_acknowledged: parseInt(entry.service_acknowledged),
|
||||
status_information: entry.service_output,
|
||||
last_check: new Date ( parseInt(entry.service_last_state_change) * 1000 ) . toString(),
|
||||
} );
|
||||
|
@ -89,6 +89,7 @@ class Icinga2API extends GenericServer {
|
||||
status: _statuses [ entry.attrs.state ],
|
||||
host_name: entry.attrs.host_name,
|
||||
service_display_name: entry.attrs.display_name,
|
||||
has_been_acknowledged: parseInt(entry.attrs.acknowledgement),
|
||||
attempts: '%d/%d'.format(entry.attrs.check_attempt,entry.attrs.max_check_attempts),
|
||||
status_information: entry.attrs.last_check_result.output,
|
||||
last_check: new Date ( entry.attrs.last_state_change * 1000 ) . toString(),
|
||||
|
Loading…
Reference in New Issue
Block a user