示例#1
0
def test_all():
    w1 = Worker('w1', queues=[QueueFactory()])
    w2 = Worker('w2', queues=[QueueFactory()])
    assert Worker.all() == []
    w1.startup()
    w2.startup()
    assert id_list(Worker.all()) == [w1.id, w2.id]
    w1.shutdown()
    assert id_list(Worker.all()) == [w2.id]
示例#2
0
def list_workers():
    return {
        'workers': [{
            'name': worker.description,
            'queues': [q.name for q in worker.queues],
            'state': str(worker.state),
        } for worker in Worker.all()]
    }
示例#3
0
def overview(queue_name, page):
    queue = Queue(queue_name)

    return app.render_template(
        'rt_dashboard/dashboard.html',
        workers=Worker.all(),
        queue=queue,
        page=page,
        queues=Queue.all(),
        rt_url_prefix=app.url_for('overview'),
        poll_interval=2500,
    )
示例#4
0
def show_workers(queues, by_queue):
    def state_symbol(state):
        return {
            WorkerState.BUSY: red('busy'),
            WorkerState.IDLE: green('idle')
        }.get(state, state)

    workers = Worker.all()
    all_queues = set(Queue.all()) | {q for w in workers for q in w.queues}
    if queues:
        workers = [w for w in workers if any(set(w.queues) & set(queues))]
    else:
        queues = all_queues

    if not by_queue:
        click.secho("Workers", bold=True)
    else:
        click.secho("Workers per Queue", bold=True)
    print_separator()
    if not by_queue:
        for worker in sorted(workers, key=attrgetter('description')):
            worker_queues = ', '.join(q.name for q in worker.queues)
            click.echo(
                f'{worker.description} {state_symbol(worker.state)}: {worker_queues}'
            )
    else:
        queue_map = {q: [] for q in all_queues}
        for w in workers:
            for q in w.queues:
                queue_map[q].append(w)
        max_qname = max(len(q.name) for q in queues)
        for queue in sorted(queues, key=attrgetter('name')):
            q_workers = queue_map[queue]
            workers_str = ", ".join(
                sorted(f'{w.description} {state_symbol(w.state)}'
                       for w in q_workers))
            if not workers_str:
                workers_str = '–'
            click.echo(f'{queue.name:>{max_qname}}: {workers_str}')

    click.echo(f'{len(workers)} worker(s)')