diff --git a/extension.js b/extension.js
index 386375d..69779c5 100644
--- a/extension.js
+++ b/extension.js
@@ -378,6 +378,7 @@ class Indicator extends PanelMenu.Button {
let _columns = Preferences.getColumns ( this.server );
for ( let _col of _columns )
{
+ entry [ 'real_' + _col ] = entry [ _col ];
if ( _col == 'host_name' && this.account_settings.get_string ( 'host-match' ) )
entry [ _col ] = entry [ _col ] . replace ( new RegExp ( this.account_settings.get_string ( 'host-match' ), 'i' ),
this.account_settings.get_string ( 'host-replace' ) );
@@ -387,7 +388,7 @@ 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' ) );
-
+
infoBox.add_child ( this.createBin ( entry.status, entry [ _col ], column_definitions [ _col ] ) );
}
if ( this.serverLogic.canRecheck )
@@ -419,6 +420,10 @@ class Indicator extends PanelMenu.Button {
this.boxes['unknown'].set_text ( String(_status.UNKNOWN) );
this.boxes['unknown'].get_parent().show ( );
}
+ else
+ {
+ this.boxes['unknown'].get_parent().hide ( );
+ }
}
catch ( e )
{
diff --git a/prefs.js b/prefs.js
index 7d769b7..a873679 100644
--- a/prefs.js
+++ b/prefs.js
@@ -59,8 +59,10 @@ const prefs = [
{ type: Gtk.ColorButton, category: 'Colors', label: _('Unknown color'), key: 'unknown-fg', 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' },
{ type: Gtk.Entry, category: 'Filters', label: _('Do not display hosts matching'), key: 'host-filter-out' },
{ type: Gtk.Entry, category: 'Filters', label: _('Do not display services matching'), key: 'service-filter-out' },
+ { type: Gtk.Entry, category: 'Filters', label: _('Do not display status info matching'), key: 'status-info-filter-out' },
{ type: Gtk.Entry, category: 'Replacements', label: _('Host regexp ...'), key: 'host-match' },
{ type: Gtk.Entry, category: 'Replacements', label: _('... to replace with'), key: 'host-replace' },
{ type: Gtk.Entry, category: 'Replacements', label: _('Service regexp ...'), key: 'service-match' },
diff --git a/schemas/org.gnome.shell.extensions.monito@drieu.org.gschema.xml b/schemas/org.gnome.shell.extensions.monito@drieu.org.gschema.xml
index 66b7e4d..361727e 100644
--- a/schemas/org.gnome.shell.extensions.monito@drieu.org.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.monito@drieu.org.gschema.xml
@@ -125,6 +125,10 @@
''
+
+ ''
+
+
''
@@ -133,6 +137,10 @@
''
+
+ ''
+
+
''
diff --git a/servers/genericserver.js b/servers/genericserver.js
index 273c862..416bae6 100644
--- a/servers/genericserver.js
+++ b/servers/genericserver.js
@@ -135,14 +135,57 @@ class GenericServer {
{
let status = this.status.service_status;
- this.columns = Preferences.getColumns(this._server);
- this.sortOrder = Preferences.getSortOrder(this._server);
+ this.columns = Preferences.getColumns ( this._server );
+ this.sortOrder = Preferences.getSortOrder ( this._server );
+ status = this.filterStatus ( status );
status = status.sort ( Lang.bind ( this, this.compareServices ) );
return status;
}
+
+ filterStatus ( status )
+ {
+ let filters = [ { prefKey: 'service-grep',
+ entryKey: 'service_display_name',
+ positive: true },
+ { prefKey: 'service-filter-out',
+ entryKey: 'service_display_name',
+ positive: false },
+ { prefKey: 'host-grep',
+ entryKey: 'host_name',
+ positive: true },
+ { prefKey: 'host-filter-out',
+ entryKey: 'host_name',
+ positive: false },
+ { prefKey: 'status-info-grep',
+ entryKey: 'status_information',
+ positive: true },
+ { prefKey: 'status-info-filter-out',
+ entryKey: 'status_information',
+ positive: false } ];
+
+ for ( var _filter of filters )
+ _filter.value = this._settings.get_string ( _filter.prefKey );
+
+ entries: for ( var i = 0 ; i < status.length ; i ++ )
+ {
+ 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;
+ }
+ }
+ }
+
+ return status;
+ }
compareServices ( a, b )
{
diff --git a/servers/icinga.js b/servers/icinga.js
index d04909e..d64034a 100644
--- a/servers/icinga.js
+++ b/servers/icinga.js
@@ -67,8 +67,8 @@ class Icinga extends GenericServer {
// We have to do this manually since the default encoding of
// Soup.form_request_new_from_hash is not understood by Icinga ... a shame!
let params = 'cmd_typ=7&cmd_mod=2&host=%s&service=%s&start_time=%s&force_check=on&com_data=Recheck+by+Monito&btnSubmit=Commit' .
- format ( encodeURI ( entry.host_name ),
- encodeURI ( entry.service_description ),
+ format ( encodeURI ( entry.real_host_name ),
+ encodeURI ( entry.real_service_display_name ),
encodeURI ( datestring ) );
let message = Soup.form_request_new_from_hash ( 'POST', cmdcgi, { } );
diff --git a/servers/icinga2api.js b/servers/icinga2api.js
index e0f886f..b7ea4c1 100644
--- a/servers/icinga2api.js
+++ b/servers/icinga2api.js
@@ -57,7 +57,7 @@ class Icinga2API extends GenericServer {
{
let message = Soup.form_request_new_from_hash ( 'POST', this.urlcgi + '/actions/reschedule-check', { } );
- let params = '{ "type": "Service", "filter": "host.name==\\"%s\\" && service.name==\\"%s\\"", "force": true, "pretty": true }' . format ( encodeURI ( entry.host_name ), encodeURI ( entry.service_display_name ) );
+ let params = '{ "type": "Service", "filter": "host.name==\\"%s\\" && service.name==\\"%s\\"", "force": true, "pretty": true }' . format ( encodeURI ( entry.real_host_name ), encodeURI ( entry.real_service_display_name ) );
message.request_body.truncate();
message.request_body.append ( params );