def METHOD_NAME() -> List[QueueInfo]:
    """
    Gets a list of dictionaries containing information about the queues in the system.
    The list entries contain:
        name: The name of the queue
        queued_count: The number of tasks currently in the queue
        running_count: The number of tasks currently running on a worker
        worker_count: The number of workers currently assigned to the queue
    :return: The list of info dictionaries
    """
    from src.server.oasisapi.analyses.models import AnalysisTaskStatus
    # setup an entry for every element in the broker (this will include
    # queues with no workers yet)
    res = [
        {
            'name': q,
            'pending_count': 0,
            'queued_count': 0,
            'running_count': 0,
            'worker_count': 0,
        } for q in _get_broker_queue_names()
    ]
    # increment the number of workers available for each queue
    queues = _get_active_queues()
    if queues:
        for worker in queues.values():
            for queue in worker:
                try:
                    next(r for r in res if r['name'] == queue['routing_key'])['worker_count'] += 1
                except StopIteration:
                    # in case there are workers around still for inactive queues add it here
                    res.append({
                        'name': queue['routing_key'],
                        'queued_count': 0,
                        'running_count': 0,
                        'worker_count': 1,
                    })
    # get the stats of the running and queued tasks
    pending = reduce(
        lambda current, value: _add_to_dict(current, value['queue_name'], value['count']),
        AnalysisTaskStatus.objects.filter(
            status=AnalysisTaskStatus.status_choices.PENDING,
        ).values(
            'queue_name',
        ).annotate(
            count=Count('pk'),
        ),
        {}
    )
    running = reduce(
        lambda current, value: _add_to_dict(current, value['queue_name'], value['count']),
        AnalysisTaskStatus.objects.filter(
            status=AnalysisTaskStatus.status_choices.STARTED,
        ).values(
            'queue_name',
        ).annotate(
            count=Count('pk'),
        ),
        {}
    )
    queued = reduce(
        lambda current, value: _add_to_dict(current, value['queue_name'], value['count']),
        AnalysisTaskStatus.objects.filter(
            status=AnalysisTaskStatus.status_choices.QUEUED,
        ).values(
            'queue_name',
        ).annotate(
            count=Count('pk'),
        ),
        {}
    )
    for entry in res:
        entry['pending_count'] = pending.get(entry['name'], 0)
        entry['queued_count'] = queued.get(entry['name'], 0)
        entry['running_count'] = running.get(entry['name'], 0)
    return res