From 9b96f7cb7a37e00044b068cbeb3027d559a4d9f7 Mon Sep 17 00:00:00 2001 From: Immae Date: Mon, 16 Jun 2014 22:05:26 +0200 Subject: [PATCH] - Added possibility to mark a line in red, using escape sequence `a la xterm` - Possibility to force redraw of "oneshot" processes - Bug correction: when the window size is too small (< 3), we asked for a negative amount of lines from the buffer --- TODO | 12 ++++++++++++ monitor.rb | 24 ++++++++++++++++++++++-- monitorrc | 8 +++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/TODO b/TODO index bf802ce..71df334 100644 --- a/TODO +++ b/TODO @@ -9,3 +9,15 @@ - Customization of window size - ~Internationalization - Some bugs with scrolling +- Respect colors from command? + +bugs: +monitor.rb:264:in `last': negative array size (ArgumentError) + from monitor.rb:264:in `yield' + from monitor.rb:157:in `print_buffer' + from monitor.rb:95:in `move_resize' + from monitor.rb:345:in `block in redraw_all' + from monitor.rb:344:in `each' + from monitor.rb:344:in `redraw_all' + from monitor.rb:389:in `
' + diff --git a/monitor.rb b/monitor.rb index 5e32cf2..249e2a3 100644 --- a/monitor.rb +++ b/monitor.rb @@ -152,6 +152,7 @@ class Buff_Win end def print_buffer() + #clear() win_border() j = 1 @buffer.yield(@win.getmaxy-2,@curr_offset) { |l,type| @@ -185,12 +186,12 @@ class Buff_Win end end - def update() + def update(force=false) if(@params['Type'] == 'continuous') proc_readlines() end if(@params['Type'] == 'oneshot') - if(Time.now - @last_update > @params['Periodic'].to_i) + if(force or (Time.now - @last_update > @params['Periodic'].to_i)) @buffer.clear() spawn_proc() end @@ -257,6 +258,7 @@ class Buffer end end def yield(size,offset=0,&block) + if(size < 0) then size = 0 end range = Range.new(0,@current-1).to_a if(@wrap) range = Range.new(@current,@size-1).to_a + range @@ -291,6 +293,18 @@ def read_ini() end def print_line(win, str, hscroll=0) + revert_color = false + str[0,5].match(/\033\[3(.)m/) { |c| #Line starts with an escape sequence. We handle that `a la xterm` + Ncurses.init_pair(10, c[1].to_i, Ncurses::COLOR_BLACK) + win.attron(Ncurses.COLOR_PAIR(10)) + revert_color = true + str = str[5,str.length] + } + str = str.gsub("\011"," ") + #Any other control char is ignored and escaped + str = str.gsub(/[[:cntrl:]]/) { |m| + "^"+(m.ord + 64).chr + } if(hscroll > 0) strcut = str[hscroll,str.length] if(strcut.nil? or strcut.empty?) @@ -306,6 +320,9 @@ def print_line(win, str, hscroll=0) else win.addstr(str[0,winlen-1]+"…") end + if(revert_color) + win.attroff(Ncurses.COLOR_PAIR(10)) + end end def make_bufwins(inifile) @@ -345,6 +362,7 @@ begin #Ncurses.stdscr.intrflush(false) # turn off flush-on-interrupt Ncurses.stdscr.keypad(true) # turn on keypad mode Ncurses.init_pair(1, Ncurses::COLOR_RED, Ncurses::COLOR_BLACK) + Ncurses.init_pair(10, Ncurses::COLOR_WHITE, Ncurses::COLOR_BLACK) inifile = read_ini() @@ -369,6 +387,8 @@ begin list.print_list(entry=entry) when 12 #ctrl+L redraw_all(list,bufwins,cur_bufwin) + when 18 #ctrl+R + cur_bufwin.update(force=true) when Ncurses::KEY_RESIZE redraw_all(list,bufwins,cur_bufwin) when Ncurses::KEY_LEFT diff --git a/monitorrc b/monitorrc index 991714a..8bd4c4b 100644 --- a/monitorrc +++ b/monitorrc @@ -20,4 +20,10 @@ Periodic = 600 Name = Fail2ban Command = "fail2ban_check" Type = oneshot -Periodic = 60 +Periodic = 600 + +[check_all] +Name = Check all +Command = "check_all" +Type = oneshot +Periodic = 3600 -- 2.41.0