def __init__(self, cgroupdir, config = None): self.offset = 0 self.cgrp = CGroup(cgroupdir) self.updatebuffer()
class CursesUI(): "The cgroupmon curses interface" def __init__(self, cgroupdir, config = None): self.offset = 0 self.cgrp = CGroup(cgroupdir) self.updatebuffer() def restorescreen(self): "Restores the terminal back to normal operation mode" curses.nocbreak() curses.echo() curses.endwin() def display(self): "Updates the screen" row = 0 self.scrn.clear() tmpoffset = self.offset for line in self.buffer: if tmpoffset > 0: tmpoffset = tmpoffset - 1 elif row < curses.LINES: self.scrn.addstr(row, 0, line) row = row + 1 else: break self.scrn.refresh() def updatebuffer(self): "Updates the buffer" self.buffer = repr(self.cgrp).strip().split('\n') def run(self): """Runs the Curses UI 'j': scroll down 'k': scroll up 'u': update cgroups 'q': quit""" try: self.scrn = curses.initscr() curses.noecho() curses.cbreak() self.display() while True: c = self.scrn.getch() c = chr(c) if c == 'j': if self.offset < (len(self.buffer) - curses.LINES): self.offset = self.offset + 1 self.display() elif self.offset > (len(self.buffer) - curses.LINES): self.offset = len(self.buffer) - curses.LINES self.display() elif c == 'k': if self.offset > 0: if self.offset > (len(self.buffer) - curses.LINES): self.offset = len(self.buffer) - curses.LINES else: self.offset = self.offset - 1 self.display() elif c == 'u': if not self.cgrp.update(): break self.updatebuffer() self.display() elif c == 'q': break self.restorescreen() except: self.restorescreen() traceback.print_exc()