コード例 #1
0
    def format_row(self, uuid, task, worker, timestamp, state):
        mx = self.display_width

        # include spacing
        detail_width = mx - 1 - STATE_WIDTH - 1 - TIMESTAMP_WIDTH
        uuid_space = detail_width - 1 - MIN_TASK_WIDTH - 1 - MIN_WORKER_WIDTH

        if uuid_space < UUID_WIDTH:
            uuid_width = uuid_space
        else:
            uuid_width = UUID_WIDTH

        detail_width = detail_width - uuid_width - 1
        task_width = int(ceil(detail_width / 2.0))
        worker_width = detail_width - task_width - 1

        uuid = abbr(uuid, uuid_width).ljust(uuid_width)
        worker = abbr(worker, worker_width).ljust(worker_width)
        task = abbrtask(task, task_width).ljust(task_width)
        state = abbr(state, STATE_WIDTH).ljust(STATE_WIDTH)
        timestamp = timestamp.ljust(TIMESTAMP_WIDTH)

        row = '{0} {1} {2} {3} {4} '.format(uuid, worker, task, timestamp,
                                            state)
        if self.screen_width is None:
            self.screen_width = len(row[:mx])
        return row[:mx]
コード例 #2
0
ファイル: cursesmon.py プロジェクト: c0ns0le/zenoss-4
    def format_row(self, uuid, task, worker, timestamp, state):
        mx = self.display_width

        # include spacing
        detail_width = mx - 1 - STATE_WIDTH - 1 - TIMESTAMP_WIDTH
        uuid_space = detail_width - 1 - MIN_TASK_WIDTH - 1 - MIN_WORKER_WIDTH

        if uuid_space < UUID_WIDTH:
            uuid_width = uuid_space
        else:
            uuid_width = UUID_WIDTH

        detail_width = detail_width - uuid_width - 1
        task_width = int(ceil(detail_width / 2.0))
        worker_width = detail_width - task_width - 1

        uuid = abbr(uuid, uuid_width).ljust(uuid_width)
        worker = abbr(worker, worker_width).ljust(worker_width)
        task = abbrtask(task, task_width).ljust(task_width)
        state = abbr(state, STATE_WIDTH).ljust(STATE_WIDTH)
        timestamp = timestamp.ljust(TIMESTAMP_WIDTH)

        row = "%s %s %s %s %s " % (uuid, worker, task, timestamp, state)
        if self.screen_width is None:
            self.screen_width = len(row[:mx])
        return row[:mx]
コード例 #3
0
ファイル: cursesmon.py プロジェクト: c0ns0le/zenoss-4
 def alert_callback(mx, my, xs):
     my, mx = self.win.getmaxyx()
     y = count(xs).next
     task = self.state.tasks[self.selected_task]
     info = task.info(extra=["state"])
     infoitems = [("args", info.pop("args", None)),
                  ("kwargs", info.pop("kwargs", None))] + info.items()
     for key, value in infoitems:
         if key is None:
             continue
         value = str(value)
         curline = y()
         keys = key + ": "
         self.win.addstr(curline, 3, keys, curses.A_BOLD)
         wrapped = wrap(value, mx - 2)
         if len(wrapped) == 1:
             self.win.addstr(curline, len(keys) + 3,
                     abbr(wrapped[0],
                          self.screen_width - (len(keys) + 3)))
         else:
             for subline in wrapped:
                 nexty = y()
                 if nexty >= my - 1:
                     subline = " " * 4 + "[...]"
                 elif nexty >= my:
                     break
                 self.win.addstr(nexty, 3,
                         abbr(" " * 4 + subline, self.screen_width - 4),
                         curses.A_NORMAL)
コード例 #4
0
ファイル: cursesmon.py プロジェクト: 277800076/celery
 def alert_callback(mx, my, xs):
     my, mx = self.win.getmaxyx()
     y = count(xs)
     task = self.state.tasks[self.selected_task]
     info = task.info(extra=['state'])
     infoitems = [
         ('args', info.pop('args', None)),
         ('kwargs', info.pop('kwargs', None))
     ] + list(info.items())
     for key, value in infoitems:
         if key is None:
             continue
         value = str(value)
         curline = next(y)
         keys = key + ': '
         self.win.addstr(curline, 3, keys, curses.A_BOLD)
         wrapped = wrap(value, mx - 2)
         if len(wrapped) == 1:
             self.win.addstr(
                 curline, len(keys) + 3,
                 abbr(wrapped[0],
                      self.screen_width - (len(keys) + 3)))
         else:
             for subline in wrapped:
                 nexty = next(y)
                 if nexty >= my - 1:
                     subline = ' ' * 4 + '[...]'
                 elif nexty >= my:
                     break
                 self.win.addstr(
                     nexty, 3,
                     abbr(' ' * 4 + subline, self.screen_width - 4),
                     curses.A_NORMAL,
                 )
コード例 #5
0
 def alert_callback(mx, my, xs):
     my, mx = self.win.getmaxyx()
     y = count(xs)
     task = self.state.tasks[self.selected_task]
     info = task.info(extra=['state'])
     infoitems = [('args', info.pop('args', None)),
                  ('kwargs', info.pop('kwargs', None))] + list(
                      info.items())
     for key, value in infoitems:
         if key is None:
             continue
         value = str(value)
         curline = next(y)
         keys = key + ': '
         self.win.addstr(curline, 3, keys, curses.A_BOLD)
         wrapped = wrap(value, mx - 2)
         if len(wrapped) == 1:
             self.win.addstr(
                 curline,
                 len(keys) + 3,
                 abbr(wrapped[0], self.screen_width - (len(keys) + 3)))
         else:
             for subline in wrapped:
                 nexty = next(y)
                 if nexty >= my - 1:
                     subline = ' ' * 4 + '[...]'
                 elif nexty >= my:
                     break
                 self.win.addstr(
                     nexty,
                     3,
                     abbr(' ' * 4 + subline, self.screen_width - 4),
                     curses.A_NORMAL,
                 )
コード例 #6
0
ファイル: cursesmon.py プロジェクト: c0ns0le/zenoss-4
 def alert_callback(mx, my, xs):
     my, mx = self.win.getmaxyx()
     y = count(xs).next
     task = self.state.tasks[self.selected_task]
     info = task.info(extra=["state"])
     infoitems = [("args", info.pop("args", None)),
                  ("kwargs", info.pop("kwargs", None))] + info.items()
     for key, value in infoitems:
         if key is None:
             continue
         value = str(value)
         curline = y()
         keys = key + ": "
         self.win.addstr(curline, 3, keys, curses.A_BOLD)
         wrapped = wrap(value, mx - 2)
         if len(wrapped) == 1:
             self.win.addstr(
                 curline,
                 len(keys) + 3,
                 abbr(wrapped[0], self.screen_width - (len(keys) + 3)))
         else:
             for subline in wrapped:
                 nexty = y()
                 if nexty >= my - 1:
                     subline = " " * 4 + "[...]"
                 elif nexty >= my:
                     break
                 self.win.addstr(
                     nexty, 3,
                     abbr(" " * 4 + subline, self.screen_width - 4),
                     curses.A_NORMAL)
コード例 #7
0
 def test_abbr(self):
     self.assertEqual(abbr(None, 3), '???')
     self.assertEqual(abbr('ABCDEFGHI', 6), 'ABC...')
     self.assertEqual(abbr('ABCDEFGHI', 20), 'ABCDEFGHI')
     self.assertEqual(abbr('ABCDEFGHI', 6, None), 'ABCDEF')
コード例 #8
0
ファイル: cursesmon.py プロジェクト: c0ns0le/zenoss-4
    def draw(self):
        win = self.win
        self.handle_keypress()
        x = LEFT_BORDER_OFFSET
        y = blank_line = count(2).next
        my, mx = win.getmaxyx()
        win.erase()
        win.bkgd(" ", curses.color_pair(1))
        win.border()
        win.addstr(1, x, self.greet, curses.A_DIM | curses.color_pair(5))
        blank_line()
        win.addstr(y(), x, self.format_row("UUID", "TASK",
                                           "WORKER", "TIME", "STATE"),
                curses.A_BOLD | curses.A_UNDERLINE)
        tasks = self.tasks
        if tasks:
            for row, (uuid, task) in enumerate(tasks):
                if row > self.display_height:
                    break

                if task.uuid:
                    lineno = y()
                self.display_task_row(lineno, task)

        # -- Footer
        blank_line()
        win.hline(my - 6, x, curses.ACS_HLINE, self.screen_width - 4)

        # Selected Task Info
        if self.selected_task:
            win.addstr(my - 5, x, self.selected_str, curses.A_BOLD)
            info = "Missing extended info"
            detail = ""
            try:
                selection = self.state.tasks[self.selected_task]
            except KeyError:
                pass
            else:
                info = selection.info(["args", "kwargs",
                                       "result", "runtime", "eta"])
                if "runtime" in info:
                    info["runtime"] = "%.2fs" % info["runtime"]
                if "result" in info:
                    info["result"] = abbr(info["result"], 16)
                info = " ".join("%s=%s" % (key, value)
                            for key, value in info.items())
                detail = "... -> key i"
            infowin = abbr(info,
                           self.screen_width - len(self.selected_str) - 2,
                           detail)
            win.addstr(my - 5, x + len(self.selected_str), infowin)
            # Make ellipsis bold
            if detail in infowin:
                detailpos = len(infowin) - len(detail)
                win.addstr(my - 5, x + len(self.selected_str) + detailpos,
                        detail, curses.A_BOLD)
        else:
            win.addstr(my - 5, x, "No task selected", curses.A_NORMAL)

        # Workers
        if self.workers:
            win.addstr(my - 4, x, self.online_str, curses.A_BOLD)
            win.addstr(my - 4, x + len(self.online_str),
                    ", ".join(sorted(self.workers)), curses.A_NORMAL)
        else:
            win.addstr(my - 4, x, "No workers discovered.")

        # Info
        win.addstr(my - 3, x, self.info_str, curses.A_BOLD)
        win.addstr(my - 3, x + len(self.info_str),
                "events:%s tasks:%s workers:%s/%s" % (
                    self.state.event_count, self.state.task_count,
                    len([w for w in self.state.workers.values()
                            if w.alive]),
                    len(self.state.workers)),
                curses.A_DIM)

        # Help
        self.safe_add_str(my - 2, x, self.help_title, curses.A_BOLD)
        self.safe_add_str(my - 2, x + len(self.help_title), self.help,
                          curses.A_DIM)
        win.refresh()
コード例 #9
0
ファイル: cursesmon.py プロジェクト: 277800076/celery
    def draw(self):
        with self.lock:
            win = self.win
            self.handle_keypress()
            x = LEFT_BORDER_OFFSET
            y = blank_line = count(2)
            my, mx = win.getmaxyx()
            win.erase()
            win.bkgd(' ', curses.color_pair(1))
            win.border()
            win.addstr(1, x, self.greet, curses.A_DIM | curses.color_pair(5))
            next(blank_line)
            win.addstr(next(y), x, self.format_row('UUID', 'TASK',
                                                   'WORKER', 'TIME', 'STATE'),
                       curses.A_BOLD | curses.A_UNDERLINE)
            tasks = self.tasks
            if tasks:
                for row, (uuid, task) in enumerate(tasks):
                    if row > self.display_height:
                        break

                    if task.uuid:
                        lineno = next(y)
                    self.display_task_row(lineno, task)

            # -- Footer
            next(blank_line)
            win.hline(my - 6, x, curses.ACS_HLINE, self.screen_width - 4)

            # Selected Task Info
            if self.selected_task:
                win.addstr(my - 5, x, self.selected_str, curses.A_BOLD)
                info = 'Missing extended info'
                detail = ''
                try:
                    selection = self.state.tasks[self.selected_task]
                except KeyError:
                    pass
                else:
                    info = selection.info()
                    if 'runtime' in info:
                        info['runtime'] = '{0:.2f}'.format(info['runtime'])
                    if 'result' in info:
                        info['result'] = abbr(info['result'], 16)
                    info = ' '.join(
                        '{0}={1}'.format(key, value)
                        for key, value in items(info)
                    )
                    detail = '... -> key i'
                infowin = abbr(info,
                               self.screen_width - len(self.selected_str) - 2,
                               detail)
                win.addstr(my - 5, x + len(self.selected_str), infowin)
                # Make ellipsis bold
                if detail in infowin:
                    detailpos = len(infowin) - len(detail)
                    win.addstr(my - 5, x + len(self.selected_str) + detailpos,
                               detail, curses.A_BOLD)
            else:
                win.addstr(my - 5, x, 'No task selected', curses.A_NORMAL)

            # Workers
            if self.workers:
                win.addstr(my - 4, x, self.online_str, curses.A_BOLD)
                win.addstr(my - 4, x + len(self.online_str),
                           ', '.join(sorted(self.workers)), curses.A_NORMAL)
            else:
                win.addstr(my - 4, x, 'No workers discovered.')

            # Info
            win.addstr(my - 3, x, self.info_str, curses.A_BOLD)
            win.addstr(
                my - 3, x + len(self.info_str),
                STATUS_SCREEN.format(
                    s=self.state,
                    w_alive=len([w for w in values(self.state.workers)
                                 if w.alive]),
                    w_all=len(self.state.workers),
                ),
                curses.A_DIM,
            )

            # Help
            self.safe_add_str(my - 2, x, self.help_title, curses.A_BOLD)
            self.safe_add_str(my - 2, x + len(self.help_title), self.help,
                              curses.A_DIM)
            win.refresh()
コード例 #10
0
    def draw(self):
        with self.lock:
            win = self.win
            self.handle_keypress()
            x = LEFT_BORDER_OFFSET
            y = blank_line = count(2)
            my, _ = win.getmaxyx()
            win.erase()
            win.bkgd(' ', curses.color_pair(1))
            win.border()
            win.addstr(1, x, self.greet, curses.A_DIM | curses.color_pair(5))
            next(blank_line)
            win.addstr(
                next(y), x,
                self.format_row('UUID', 'TASK', 'WORKER', 'TIME', 'STATE'),
                curses.A_BOLD | curses.A_UNDERLINE)
            tasks = self.tasks
            if tasks:
                for row, (_, task) in enumerate(tasks):
                    if row > self.display_height:
                        break

                    if task.uuid:
                        lineno = next(y)
                    self.display_task_row(lineno, task)

            # -- Footer
            next(blank_line)
            win.hline(my - 6, x, curses.ACS_HLINE, self.screen_width - 4)

            # Selected Task Info
            if self.selected_task:
                win.addstr(my - 5, x, self.selected_str, curses.A_BOLD)
                info = 'Missing extended info'
                detail = ''
                try:
                    selection = self.state.tasks[self.selected_task]
                except KeyError:
                    pass
                else:
                    info = selection.info()
                    if 'runtime' in info:
                        info['runtime'] = '{0:.2f}'.format(info['runtime'])
                    if 'result' in info:
                        info['result'] = abbr(info['result'], 16)
                    info = ' '.join('{0}={1}'.format(key, value)
                                    for key, value in items(info))
                    detail = '... -> key i'
                infowin = abbr(info,
                               self.screen_width - len(self.selected_str) - 2,
                               detail)
                win.addstr(my - 5, x + len(self.selected_str), infowin)
                # Make ellipsis bold
                if detail in infowin:
                    detailpos = len(infowin) - len(detail)
                    win.addstr(my - 5, x + len(self.selected_str) + detailpos,
                               detail, curses.A_BOLD)
            else:
                win.addstr(my - 5, x, 'No task selected', curses.A_NORMAL)

            # Workers
            if self.workers:
                win.addstr(my - 4, x, self.online_str, curses.A_BOLD)
                win.addstr(my - 4, x + len(self.online_str),
                           ', '.join(sorted(self.workers)), curses.A_NORMAL)
            else:
                win.addstr(my - 4, x, 'No workers discovered.')

            # Info
            win.addstr(my - 3, x, self.info_str, curses.A_BOLD)
            win.addstr(
                my - 3,
                x + len(self.info_str),
                STATUS_SCREEN.format(
                    s=self.state,
                    w_alive=len(
                        [w for w in values(self.state.workers) if w.alive]),
                    w_all=len(self.state.workers),
                ),
                curses.A_DIM,
            )

            # Help
            self.safe_add_str(my - 2, x, self.help_title, curses.A_BOLD)
            self.safe_add_str(my - 2, x + len(self.help_title), self.help,
                              curses.A_DIM)
            win.refresh()
コード例 #11
0
ファイル: test_text.py プロジェクト: bryson/celery
def test_abbr(args, expected):
    assert abbr(*args) == expected
コード例 #12
0
ファイル: test_text.py プロジェクト: 1995rishi/flaskmap
 def test_abbr(self):
     self.assertEqual(abbr(None, 3), '???')
     self.assertEqual(abbr('ABCDEFGHI', 6), 'ABC...')
     self.assertEqual(abbr('ABCDEFGHI', 20), 'ABCDEFGHI')
     self.assertEqual(abbr('ABCDEFGHI', 6, None), 'ABCDEF')
コード例 #13
0
ファイル: cursesmon.py プロジェクト: c0ns0le/zenoss-4
    def draw(self):
        win = self.win
        self.handle_keypress()
        x = LEFT_BORDER_OFFSET
        y = blank_line = count(2).next
        my, mx = win.getmaxyx()
        win.erase()
        win.bkgd(" ", curses.color_pair(1))
        win.border()
        win.addstr(1, x, self.greet, curses.A_DIM | curses.color_pair(5))
        blank_line()
        win.addstr(y(), x,
                   self.format_row("UUID", "TASK", "WORKER", "TIME", "STATE"),
                   curses.A_BOLD | curses.A_UNDERLINE)
        tasks = self.tasks
        if tasks:
            for row, (uuid, task) in enumerate(tasks):
                if row > self.display_height:
                    break

                if task.uuid:
                    lineno = y()
                self.display_task_row(lineno, task)

        # -- Footer
        blank_line()
        win.hline(my - 6, x, curses.ACS_HLINE, self.screen_width - 4)

        # Selected Task Info
        if self.selected_task:
            win.addstr(my - 5, x, self.selected_str, curses.A_BOLD)
            info = "Missing extended info"
            detail = ""
            try:
                selection = self.state.tasks[self.selected_task]
            except KeyError:
                pass
            else:
                info = selection.info(
                    ["args", "kwargs", "result", "runtime", "eta"])
                if "runtime" in info:
                    info["runtime"] = "%.2fs" % info["runtime"]
                if "result" in info:
                    info["result"] = abbr(info["result"], 16)
                info = " ".join("%s=%s" % (key, value)
                                for key, value in info.items())
                detail = "... -> key i"
            infowin = abbr(info,
                           self.screen_width - len(self.selected_str) - 2,
                           detail)
            win.addstr(my - 5, x + len(self.selected_str), infowin)
            # Make ellipsis bold
            if detail in infowin:
                detailpos = len(infowin) - len(detail)
                win.addstr(my - 5, x + len(self.selected_str) + detailpos,
                           detail, curses.A_BOLD)
        else:
            win.addstr(my - 5, x, "No task selected", curses.A_NORMAL)

        # Workers
        if self.workers:
            win.addstr(my - 4, x, self.online_str, curses.A_BOLD)
            win.addstr(my - 4, x + len(self.online_str),
                       ", ".join(sorted(self.workers)), curses.A_NORMAL)
        else:
            win.addstr(my - 4, x, "No workers discovered.")

        # Info
        win.addstr(my - 3, x, self.info_str, curses.A_BOLD)
        win.addstr(
            my - 3, x + len(self.info_str),
            "events:%s tasks:%s workers:%s/%s" %
            (self.state.event_count, self.state.task_count,
             len([w for w in self.state.workers.values() if w.alive
                  ]), len(self.state.workers)), curses.A_DIM)

        # Help
        self.safe_add_str(my - 2, x, self.help_title, curses.A_BOLD)
        self.safe_add_str(my - 2, x + len(self.help_title), self.help,
                          curses.A_DIM)
        win.refresh()
コード例 #14
0
def test_abbr(args, expected):
    assert abbr(*args) == expected
コード例 #15
0
 def test_abbr(self):
     self.assertEqual(text.abbr(None, 3), "???")
     self.assertEqual(text.abbr("ABCDEFGHI", 6), "ABC...")
     self.assertEqual(text.abbr("ABCDEFGHI", 20), "ABCDEFGHI")
     self.assertEqual(text.abbr("ABCDEFGHI", 6, None), "ABCDEF")
コード例 #16
0
ファイル: test_utils.py プロジェクト: AdrianRibao/celery
 def test_abbr(self):
     self.assertEqual(text.abbr(None, 3), "???")
     self.assertEqual(text.abbr("ABCDEFGHI", 6), "ABC...")
     self.assertEqual(text.abbr("ABCDEFGHI", 20), "ABCDEFGHI")
     self.assertEqual(text.abbr("ABCDEFGHI", 6, None), "ABCDEF")