From 64806075b66b0f3f942ed805c36b4de18ab898bc Mon Sep 17 00:00:00 2001 From: Benjamin Drieu Date: Mon, 29 Nov 2021 23:04:17 +0100 Subject: [PATCH] Improve color display of services --- extension.js | 79 +++++++++++++++++++++++++++++++++------------------- prefs.js | 11 ++++---- 2 files changed, 56 insertions(+), 34 deletions(-) diff --git a/extension.js b/extension.js index e16b869..ec3c294 100644 --- a/extension.js +++ b/extension.js @@ -111,8 +111,7 @@ class Indicator extends PanelMenu.Button { for ( var boxName of [ 'ok', 'warning', 'critical', 'unknown' ] ) { let _box = new St.BoxLayout( { style_class: 'monito-%s-box monito-box'.format(boxName), visible: false } ); - _box.set_style ( 'background-color: %s; color: %s'.format ( this.account_settings.get_string ( boxName + '-color' ), - this.account_settings.get_string ( boxName + '-fg' ) ) ); + _box.set_style ( this.getStyleForRow ( boxName ) ); this.account_settings.connect("changed::%s-color".format(boxName), Lang.bind ( { widget: _box }, setColor ) ); this.account_settings.connect("changed::%s-fg".format(boxName), Lang.bind ( { widget: _box }, setColor ) ); @@ -121,31 +120,6 @@ class Indicator extends PanelMenu.Button { serverBox.add_child(_box); } -/* - this.okBox = new St.Label({ text: String(_status['OK']), visible: false }) - ok_box.add_child ( this.okBox ); - serverBox.add_child(ok_box); - - - let warning_box = new St.BoxLayout({ style_class: 'monito-warning-box monito-box' }); - warning_box.set_style ( 'background-color: %s; color: %s'.format ( this.account_settings.get_string ( 'warning-color' ), this.account_settings.get_string ( 'warning-fg' ) ) ); - this.account_settings.connect("changed::warning-color", Lang.bind ( { widget: warning_box }, setColor ) ); - this.account_settings.connect("changed::warning-fg", Lang.bind ( { widget: warning_box }, setColor ) ); - - this.warningBox = new St.Label({ text: String(_status['WARNING']), visible: false }) - warning_box.add_child ( this.warningBox ); - serverBox.add_child(warning_box); - - let critical_box = new St.BoxLayout({ style_class: 'monito-critical-box monito-box' }); - critical_box.set_style ( 'background-color: %s; color: %s'.format ( this.account_settings.get_string ( 'critical-color' ), this.account_settings.get_string ( 'critical-fg' ) ) ); - this.account_settings.connect("changed::critical-color", Lang.bind ( { widget: critical_box }, setColor ) ); - this.account_settings.connect("changed::critical-fg", Lang.bind ( { widget: critical_box }, setColor ) ); - - this.criticalBox = new St.Label({ text: String(_status['CRITICAL']), visible: false }) - critical_box.add_child ( this.criticalBox ); - serverBox.add_child(critical_box); -*/ - box.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); this.menu_new = new PopupMenu.PopupMenu(this, Clutter.ActorAlign.START, St.Side.TOP, 0); @@ -301,7 +275,7 @@ class Indicator extends PanelMenu.Button { } let _bin = new St.Bin({ - style_class: 'monito-service-' + status, +// style: 'background: purple', track_hover: true, width: col.width, x_expand: col.expand, @@ -310,6 +284,36 @@ class Indicator extends PanelMenu.Button { return _bin; } + getStyleForRow ( boxName, row = 0 ) + { + let bgColor = this.account_settings.get_string ( boxName + '-color' ); + let fgColor = this.account_settings.get_string ( boxName + '-fg' ); + + if ( row % 2 ) + { + bgColor = this.lightenColor(bgColor, 16); + fgColor = this.lightenColor(fgColor, 16); + } + else + { + bgColor = this.lightenColor(bgColor, -16); + fgColor = this.lightenColor(fgColor, -16); + } + + monitoLog ( 'background-color: %s; color: %s' . format ( bgColor, fgColor ) ); + + return 'background-color: %s; color: %s' . format ( bgColor, fgColor ); + } + + lightenColor ( col, amt ) { + if ( col.substring(0,1) == '#' ) + col = col.substring ( 1 ); + col = parseInt(col, 16); + return '#%06x'.format (Math.max(Math.min((col & 0x0000FF) + amt,0x0000FF),0) | + (Math.max(Math.min((((col >> 8) & 0x00FF) + amt),0x0000FF),0) << 8) | + (Math.max(Math.min(((col >> 16) + amt),0x0000FF),0) << 16)); + } + refreshUI ( ) { this.initStatus ( ); @@ -349,13 +353,18 @@ class Indicator extends PanelMenu.Button { for ( let entryCount of this.serverLogic.getProcessedStatus ( ) ) _status [ entryCount.status ] ++; + let _row = 0; for ( let entry of this.serverLogic.getProcessedStatus ( ) ) { if ( ( ! _status [ 'WARNING' ] && ! _status [ 'CRITICAL' ] && ! _status [ 'UNKNOWN' ] && entry.status == 'OK' ) || ( ( _status [ 'WARNING' ] || _status [ 'CRITICAL' ] || _status [ 'UNKNOWN' ] ) && entry.status != 'OK' ) ) { + monitoLog ( this.account_settings.get_string ( entry.status.toLowerCase() + '-color' ) ); + + let _style = this.getStyleForRow ( entry.status.toLowerCase(), _row ); let infoBox = new St.BoxLayout({ - style_class: 'monito-service-line monito-service-line-' + entry.status, + style_class: 'monito-service-line', + style: _style, track_hover: true, x_expand: true, }); @@ -364,9 +373,21 @@ class Indicator extends PanelMenu.Button { let _columns = Preferences.getColumns ( this.server ); for ( let _col of _columns ) { + 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' ) ); + else if ( _col == 'service_display_name' && this.account_settings.get_string ( 'service-match' ) ) + entry [ _col ] = entry [ _col ] . replace ( new RegExp ( this.account_settings.get_string ( 'service-match' ), 'i' ), + this.account_settings.get_string ( 'service-replace' ) ); + 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 ] ) ); } infoBox.add_child ( this.createBin ( entry.status, entry, column_definitions [ 'actions' ] ) ); + + _row ++; } } diff --git a/prefs.js b/prefs.js index 678a816..28c5fc9 100644 --- a/prefs.js +++ b/prefs.js @@ -59,13 +59,13 @@ 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: _('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: 'Replacements', label: _('Host match regexp ...'), key: 'host-match' }, + { 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: '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 match regexp ...'), key: 'service-match' }, + { type: Gtk.Entry, category: 'Replacements', label: _('Service regexp ...'), key: 'service-match' }, { type: Gtk.Entry, category: 'Replacements', label: _('... to replace with'), key: 'service-replace' }, - { type: Gtk.Entry, category: 'Replacements', label: _('Status info match regexp ...'), key: 'status-info-match' }, + { type: Gtk.Entry, category: 'Replacements', label: _('Status info regexp ...'), key: 'status-info-match' }, { type: Gtk.Entry, category: 'Replacements', label: _('... to replace with'), key: 'status-info-replace' }, ]; @@ -258,6 +258,7 @@ function createPrefWidgets ( noteBook, type, isActive ) label: prefEntry.label + ':', visible: true, halign: Gtk.Align.START, + use_markup: true, }); grid.attach ( _label, 0, y, 1, 1 );