Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/env python
import os, sys, time
import curses,struct

states
= ['STARTUP', 'BLOCKED', 'CONNECT', 'PREPROCESS', 'SEND', 'COMPILE', 'RECEIVE', 'DONE']
DISTCC_DIR
= os.getenv('DISTCC_DIR') or '%s/.distcc' % os.getenv('HOME')

def write(win=None, line=None, col=None, txt=None, attrs=None):
   
if win != None:
        win
.move(line, col)
        win
.clrtoeol()
        win
.addstr(line, col, txt, attrs)

def display_time(scr):
    t
= time.ctime().split()
    write
(scr, 0, 0,  t[0], curses.color_pair(9))
    write
(scr, 0, 4,  t[1], curses.color_pair(9))
    write
(scr, 0, 8,  t[2], curses.color_pair(9))
    write
(scr, 0, 11, t[3], curses.color_pair(9))
    write
(scr, 0, 20, t[4], curses.color_pair(9))

def display_loadavg(scr):
    lavg
= os.getloadavg()
    write
(scr, 1, 0, 'System',             curses.color_pair(9))
    write
(scr, 1, 7, 'Load:',              curses.color_pair(9))
    write
(scr, 1, 13, '%.02f' % lavg[0],   curses.color_pair(9))
    write
(scr, 1, 20, '%.02f' % lavg[1],   curses.color_pair(9))
    write
(scr, 1, 27, '%.02f' % lavg[2],   curses.color_pair(9))

def display_header(scr):
    write
(scr, 3, 0,  'Slot',  curses.A_BOLD)
    write
(scr, 3, 5,  'Host',  curses.A_BOLD)
    write
(scr, 3, 25, 'State', curses.A_BOLD)
    write
(scr, 3, 45, 'Filename', curses.A_BOLD)
   
#'%-4s %-20s %-15s %-40s%s' % ('Slot', 'Remote Host', 'State', 'Filename', ' '*(maxX-83)), curses.A_BOLD)

def getStats(scr):
    curses
.init_pair(9,  curses.COLOR_WHITE,  curses.COLOR_BLACK)
    curses
.init_pair(10, curses.COLOR_YELLOW, curses.COLOR_BLACK)
    curses
.init_pair(11, curses.COLOR_RED,    curses.COLOR_BLACK)
    curses
.init_pair(12, curses.COLOR_GREEN,  curses.COLOR_BLACK)
   
(maxY, maxX) = scr.getmaxyx()
   
while 1:
       
try:
            display_time
(scr)
            display_loadavg
(scr)
            display_header
(scr)
           
#write(scr, 3, 0, '%-4s %-20s %-15s %-40s%s' % ('Slot', 'Remote Host', 'State', 'Filename', ' '*(maxX-83)), curses.A_BOLD)
            cnt
= 5
           
try:
               
for i in os.listdir(DISTCC_DIR+'/state'):
                    data
= struct.unpack('@iLL128s128siiP', open(DISTCC_DIR+'/state/'+i).readline().strip())
                    file
= data[3].split('\x00')[0] or 'None'
                    host
= data[4].split('\x00')[0] or 'None'
                    slot
= int(data[5])
                    stte
= states[int(data[6])]
                    scr
.move(cnt,0)
                    scr
.clrtoeol()
                   
if 'None' not in (file, host):
                        write
(scr, cnt, 0, '%s' % slot, curses.color_pair(9))
                        write
(scr, cnt, 5, '%s' % host, curses.color_pair(9))
                       
if int(data[6]) in (2,3):
                            write
(scr, cnt, 25, '%s ' % (stte), curses.color_pair(10))
                       
elif int(data[6]) in (0,1):
                            write
(scr, cnt, 25, '%s ' % (stte), curses.color_pair(11))
                       
elif int(data[6]) in (4,5):
                            write
(scr, cnt, 25, '%s ' % (stte), curses.color_pair(12))
                       
elif int(data[6]) in (6,7):
                            write
(scr, cnt, 25, '%s ' % (stte), curses.color_pair(12)|curses.A_BOLD)
                       
else: write(scr, cnt, 25, '%s ' % (stte))
                        write
(scr, cnt, 45, '%s' % file, curses.color_pair(9))
                        cnt
+= 1
           
except struct.error: pass
           
except IOError: pass
            scr
.refresh()
            time
.sleep(0.75)
            scr
.erase()
            scr
.move(0,0)
       
except KeyboardInterrupt:
            sys
.exit(-1)

if __name__ == '__main__':
    curses
.wrapper(getStats)

Diff to Previous Revision

--- revision 2 2011-11-01 01:20:44
+++ revision 3 2013-12-01 11:19:56
@@ -5,16 +5,47 @@
 states
= ['STARTUP', 'BLOCKED', 'CONNECT', 'PREPROCESS', 'SEND', 'COMPILE', 'RECEIVE', 'DONE']
 DISTCC_DIR
= os.getenv('DISTCC_DIR') or '%s/.distcc' % os.getenv('HOME')
 
+def write(win=None, line=None, col=None, txt=None, attrs=None):
+    if win != None:
+        win.move(line, col)
+        win.clrtoeol()
+        win.addstr(line, col, txt, attrs)
+
+def display_time(scr):
+    t = time.ctime().split()
+    write(scr, 0, 0,  t[0], curses.color_pair(9))
+    write(scr, 0, 4,  t[1], curses.color_pair(9))
+    write(scr, 0, 8,  t[2], curses.color_pair(9))
+    write(scr, 0, 11, t[3], curses.color_pair(9))
+    write(scr, 0, 20, t[4], curses.color_pair(9))
+
+def display_loadavg(scr):
+    lavg = os.getloadavg()
+    write(scr, 1, 0, 'System',             curses.color_pair(9))
+    write(scr, 1, 7, 'Load:',              curses.color_pair(9))
+    write(scr, 1, 13, '%.02f' % lavg[0],   curses.color_pair(9))
+    write(scr, 1, 20, '%.02f' % lavg[1],   curses.color_pair(9))
+    write(scr, 1, 27, '%.02f' % lavg[2],   curses.color_pair(9))
+
+def display_header(scr):
+    write(scr, 3, 0,  'Slot',  curses.A_BOLD)
+    write(scr, 3, 5,  'Host',  curses.A_BOLD)
+    write(scr, 3, 25, 'State', curses.A_BOLD)
+    write(scr, 3, 45, 'Filename', curses.A_BOLD)
+    #'%-4s %-20s %-15s %-40s%s' % ('Slot', 'Remote Host', 'State', 'Filename', ' '*(maxX-83)), curses.A_BOLD)
+
 
def getStats(scr):
+    curses.init_pair(9,  curses.COLOR_WHITE,  curses.COLOR_BLACK)
     curses
.init_pair(10, curses.COLOR_YELLOW, curses.COLOR_BLACK)
-    curses.init_pair(11, curses.COLOR_RED, curses.COLOR_BLACK)
-    curses.init_pair(12, curses.COLOR_GREEN, curses.COLOR_BLACK)
+    curses.init_pair(11, curses.COLOR_RED,    curses.COLOR_BLACK)
+    curses.init_pair(12, curses.COLOR_GREEN,  curses.COLOR_BLACK)
     
(maxY, maxX) = scr.getmaxyx()
     
while 1:
         
try:
-            scr.addstr(0, 0, time.ctime())
-            scr.addstr(1, 0, 'System Load: %s' % (str(os.getloadavg())[1:][:-1]))
-            scr.addstr(3, 0, '%-4s %-20s %-15s %-40s%s' % ('Slot', 'Remote Host', 'State', 'Filename', ' '*(maxX-83)), curses.A_BOLD|curses.A_REVERSE)
+            display_time(scr)
+            display_loadavg(scr)
+            display_header(scr)
+            #write(scr, 3, 0, '%-4s %-20s %-15s %-40s%s' % ('Slot', 'Remote Host', 'State', 'Filename', ' '*(maxX-83)), curses.A_BOLD)
             cnt
= 5
             
try:
                 
for i in os.listdir(DISTCC_DIR+'/state'):
@@ -23,18 +54,21 @@
                     host
= data[4].split('\x00')[0] or 'None'
                     slot
= int(data[5])
                     stte
= states[int(data[6])]
+                    scr.move(cnt,0)
+                    scr.clrtoeol()
                     
if 'None' not in (file, host):
-                        scr.addstr(cnt, 0, '%4d %-20s ' % (slot, host))
+                        write(scr, cnt, 0, '%s' % slot, curses.color_pair(9))
+                        write(scr, cnt, 5, '%s' % host, curses.color_pair(9))
                         
if int(data[6]) in (2,3):
-                            scr.addstr(cnt, 26, '%-15s ' % (stte), curses.color_pair(10))
+                            write(scr, cnt, 25, '%s ' % (stte), curses.color_pair(10))
                         
elif int(data[6]) in (0,1):
-                            scr.addstr(cnt, 26, '%-15s ' % (stte), curses.color_pair(11))
+                            write(scr, cnt, 25, '%s ' % (stte), curses.color_pair(11))
                         
elif int(data[6]) in (4,5):
-                            scr.addstr(cnt, 26, '%-15s ' % (stte), curses.color_pair(12))
+                            write(scr, cnt, 25, '%s ' % (stte), curses.color_pair(12))
                         
elif int(data[6]) in (6,7):
-                            scr.addstr(cnt, 26, '%-15s ' % (stte), curses.color_pair(12)|curses.A_BOLD)
-                        else: scr.addstr(cnt, 26, '%-15s ' % (stte))
-                        scr.addstr(cnt, 42, '%-40s%s' % (file, ' '*(maxX-83)))
+                            write(scr, cnt, 25, '%s ' % (stte), curses.color_pair(12)|curses.A_BOLD)
+                        else: write(scr, cnt, 25, '%s ' % (stte))
+                        write(scr, cnt, 45, '%s' % file, curses.color_pair(9))
                         cnt
+= 1
             
except struct.error: pass
             
except IOError: pass

History