| 
					
				 | 
			
			
				@@ -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() 
			 |