import time
log_dirs = sys.argv[1:]
-refresh_interval = 2
+refresh_interval = 10 # tenths of a second
class AppInfo:
def __init__(self, name, user, machine, status, progress):
def main(stdscr):
curses.use_default_colors()
+ curses.halfdelay(refresh_interval)
rows, cols = stdscr.getmaxyx()
if cols < 80:
print "Terminal is too narrow"
exit = False
while not exit:
- if time.time() - last_refresh > refresh_interval:
- last_refresh = time.time()
- apps = get_apps_info()
-
- stdscr.erase()
- if len(apps) > 0:
- for i in xrange(min(numboxes, len(apps)-cur_pos)):
- app = apps[cur_pos + i]
- stdscr.attrset(curses.color_pair(1) | curses.A_NORMAL)
- stdscr.addstr(3*i+1, 2, "..."+app.name[-57:], curses.A_BOLD)
- stdscr.addstr(3*i+1, 65, (app.user+"@"+app.machine)[:barsize])
- stdscr.addstr(3*i+2, 2, app.status[cur_x_pos:cur_x_pos+57])
-
- stdscr.addch(3*i+2, 65, "[", curses.A_BOLD)
- stdscr.addch(3*i+2, cols-2, "]", curses.A_BOLD)
- # PROGRESS BAR
- stdscr.attrset(curses.color_pair(3) | curses.A_BOLD)
- stdscr.hline(3*i+2, 66, "|", barsize)
- stdscr.attrset(curses.color_pair(2) | curses.A_BOLD)
- stdscr.hline(3*i+2, 66, "|", int((app.progress/100.0)*barsize))
- stdscr.attrset(curses.color_pair(1) | curses.A_BOLD)
- stdscr.addstr(3*i+2, 60, str(app.progress)+"%", curses.A_BOLD)
- stdscr.hline(3*(i+1),1,curses.ACS_HLINE, cols-2)
-
- stdscr.box()
- try:
- cmd = stdscr.getch()
- except:
- pass
- if cmd == ord('q'):
- exit = True
- elif cmd == curses.KEY_DOWN:
- if cur_pos < len(apps)-numboxes:
- cur_pos += 1
- elif cmd == curses.KEY_UP:
- if cur_pos > 0:
- cur_pos -= 1
- elif cmd == curses.KEY_RIGHT:
- cur_x_pos += 10
- elif cmd == curses.KEY_LEFT:
- if cur_x_pos > 0:
- cur_x_pos -= 10
- stdscr.refresh()
+ apps = get_apps_info()
+
+ stdscr.erase()
+ stdscr.attrset(curses.color_pair(1) | curses.A_NORMAL)
+ if len(apps) > 0:
+ for i in xrange(min(numboxes, len(apps)-cur_pos)):
+ app = apps[cur_pos + i]
+ stdscr.addstr(3*i+1, 2, "..."+app.name[-57:], curses.A_BOLD)
+ stdscr.addstr(3*i+1, 65, (app.user+"@"+app.machine)[:barsize])
+ stdscr.addstr(3*i+2, 2, app.status[cur_x_pos:cur_x_pos+57])
+
+ # PROGRESS BAR
+ stdscr.addch(3*i+2, 65, "[", curses.A_BOLD)
+ stdscr.addch(3*i+2, cols-2, "]", curses.A_BOLD)
+ stdscr.attrset(curses.color_pair(3) | curses.A_BOLD)
+ stdscr.hline(3*i+2, 66, "|", barsize)
+ stdscr.attrset(curses.color_pair(2) | curses.A_BOLD)
+ stdscr.hline(3*i+2, 66, "|", int((app.progress/100.0)*barsize))
+ stdscr.attrset(curses.color_pair(1) | curses.A_BOLD)
+ stdscr.addstr(3*i+2, 60, str(app.progress)+"%", curses.A_BOLD)
+ stdscr.hline(3*(i+1),1,curses.ACS_HLINE, cols-2)
+ stdscr.attrset(curses.color_pair(1) | curses.A_NORMAL)
+ else:
+ stdscr.addstr(2,2, "No log files found. All tasks are finished or you forgot the directory name :)")
+
+ # BORDER
+ stdscr.attrset(curses.color_pair(1) | curses.A_BOLD)
+ stdscr.box()
+ stdscr.attrset(curses.color_pair(1) | curses.A_NORMAL)
+
+ # STATUS BAR
+ stdscr.addstr(rows-1, 3, " viewing [%d-%d] of %d apps "%(cur_pos, min(cur_pos+numboxes-1, len(apps)-1), len(apps)) )
+ try:
+ cmd = stdscr.getch()
+ except:
+ pass
+ if cmd == ord('q'):
+ exit = True
+ elif cmd == curses.KEY_DOWN:
+ if cur_pos < len(apps)-numboxes:
+ cur_pos += 1
+ elif cmd == curses.KEY_UP:
+ if cur_pos > 0:
+ cur_pos -= 1
+ elif cmd == curses.KEY_RIGHT:
+ cur_x_pos += 10
+ elif cmd == curses.KEY_LEFT:
+ if cur_x_pos > 0:
+ cur_x_pos -= 10
+ stdscr.refresh()
curses.wrapper(main)