فهرست منبع

Fix the task list covering the help section of the window

Chris Rose 14 سال پیش
والد
کامیت
629d17dc99
1فایلهای تغییر یافته به همراه34 افزوده شده و 20 حذف شده
  1. 34 20
      celery/events/cursesmon.py

+ 34 - 20
celery/events/cursesmon.py

@@ -14,6 +14,7 @@ from celery.app import app_or_default
 from celery.utils import abbr, abbrtask
 
 BORDER_SPACING = 4
+LEFT_BORDER_OFFSET = 3
 UUID_WIDTH = 36
 STATE_WIDTH = 8
 TIMESTAMP_WIDTH = 8
@@ -77,8 +78,13 @@ class CursesMonitor(object):
 
     @property
     def display_width(self):
-         _, mx = self.win.getmaxyx()
-         return mx - BORDER_SPACING
+        _, mx = self.win.getmaxyx()
+        return mx - BORDER_SPACING
+
+    @property
+    def display_height(self):
+        my, _ = self.win.getmaxyx()
+        return my - 10
 
     def find_position(self):
         if not self.tasks:
@@ -273,10 +279,30 @@ class CursesMonitor(object):
         return self.alert(alert_callback,
                 "Task Result for %s" % self.selected_task)
 
+    def display_task_row(self, lineno, task):
+        state_color = self.state_colors.get(task.state)
+        attr = curses.A_NORMAL
+        if task.uuid== self.selected_task:
+            attr = curses.A_STANDOUT
+        timestamp = datetime.fromtimestamp(
+                        task.timestamp or time.time())
+        timef = timestamp.strftime("%H:%M:%S")
+        line = self.format_row(task.uuid, task.name,
+                               task.worker.hostname,
+                               timef, task.state)
+        self.win.addstr(lineno, LEFT_BORDER_OFFSET, line, attr)
+
+        if state_color:
+            self.win.addstr(lineno, len(line) - STATE_WIDTH + BORDER_SPACING - 1,
+                            task.state, state_color | attr)
+        if task.ready:
+            task.visited = time.time()
+
+
     def draw(self):
         win = self.win
         self.handle_keypress()
-        x = 3
+        x = LEFT_BORDER_OFFSET
         y = blank_line = count(2).next
         my, mx = win.getmaxyx()
         win.erase()
@@ -289,25 +315,13 @@ class CursesMonitor(object):
                 curses.A_BOLD | curses.A_UNDERLINE)
         tasks = self.tasks
         if tasks:
-            for uuid, task in tasks:
+            for row, (uuid, task) in enumerate(tasks):
+                if row > self.display_height:
+                    break
+
                 if task.uuid:
-                    state_color = self.state_colors.get(task.state)
-                    attr = curses.A_NORMAL
-                    if task.uuid == self.selected_task:
-                        attr = curses.A_STANDOUT
-                    timestamp = datetime.fromtimestamp(
-                                    task.timestamp or time.time())
-                    timef = timestamp.strftime("%H:%M:%S")
-                    line = self.format_row(uuid, task.name,
-                                           task.worker.hostname,
-                                           timef, task.state)
                     lineno = y()
-                    win.addstr(lineno, x, line, attr)
-                    if state_color:
-                        win.addstr(lineno, len(line) - STATE_WIDTH + BORDER_SPACING - 1,
-                                task.state, state_color | attr)
-                    if task.ready:
-                        task.visited = time.time()
+                    self.display_task_row(lineno, task)
 
         # -- Footer
         blank_line()