--- asterisk-1.2.12.1/apps/app_queue.c 2006-09-03 12:38:22.000000000 -0500 +++ workspace/asterisk-1.2.12.1/apps/app_queue.c 2006-09-26 11:38:20.000000000 -0500 @@ -3576,6 +3576,68 @@ return RESULT_SUCCESS; } +/* Dump summary of queue info */ +static int manager_queues_summary( struct mansession *s, struct message *m ) +{ + time_t now; + int qmemcount = 0; + int qmemavail = 0; + int qchancount = 0; + char *id = astman_get_header(m,"ActionID"); + char *queuefilter = astman_get_header(m,"Queue"); + char idText[256] = ""; + struct call_queue *q; + struct queue_ent *qe; + struct member *mem; + + astman_send_ack(s, m, "Queue summary will follow"); + time(&now); + ast_mutex_lock(&qlock); + if (!ast_strlen_zero(id)) { + snprintf(idText,256,"ActionID: %s\r\n",id); + } + for (q = queues; q; q = q->next) { + ast_mutex_lock(&q->lock); + + /* List queue properties */ + if (ast_strlen_zero(queuefilter) || !strcmp(q->name, queuefilter)) { + /* List Queue Members */ + for (mem = q->members; mem; mem = mem->next) { + if ((mem->status != AST_DEVICE_UNAVAILABLE) && (mem->status != AST_DEVICE_INVALID)) + { + ++qmemcount; + if (((mem->status == AST_DEVICE_NOT_INUSE) || (mem->status == AST_DEVICE_UNKNOWN)) && !(mem->paused)) + { + ++qmemavail; + } + } + } + for (qe = q->head; qe; qe = qe->next) { + ++qchancount; + } + ast_cli(s->fd, "Event: QueueSummary\r\n" + "Queue: %s\r\n" + "LoggedIn: %d\r\n" + "Available: %d\r\n" + "Callers: %d\r\n" + "HoldTime: %d\r\n" + "%s" + "\r\n", + q->name, qmemcount, qmemavail, qchancount, q->holdtime, idText); + } + ast_mutex_unlock(&q->lock); + } + + ast_cli(s->fd, + "Event: QueueSummaryComplete\r\n" + "%s" + "\r\n",idText); + + ast_mutex_unlock(&qlock); + + return RESULT_SUCCESS; +} + /* Dump queue status */ static int manager_queues_status( struct mansession *s, struct message *m ) { @@ -3964,6 +4026,7 @@ res |= ast_cli_unregister(&cli_remove_queue_member); res |= ast_manager_unregister("Queues"); res |= ast_manager_unregister("QueueStatus"); + res |= ast_manager_unregister("QueueSummary"); res |= ast_manager_unregister("QueueAdd"); res |= ast_manager_unregister("QueueRemove"); res |= ast_manager_unregister("QueuePause"); @@ -3992,6 +4055,7 @@ res |= ast_devstate_add(statechange_queue, NULL); res |= ast_manager_register( "Queues", 0, manager_queues_show, "Queues" ); res |= ast_manager_register( "QueueStatus", 0, manager_queues_status, "Queue Status" ); + res |= ast_manager_register( "QueueSummary", 0, manager_queues_summary, "Queue Summary" ); res |= ast_manager_register( "QueueAdd", EVENT_FLAG_AGENT, manager_add_queue_member, "Add interface to queue." ); res |= ast_manager_register( "QueueRemove", EVENT_FLAG_AGENT, manager_remove_queue_member, "Remove interface from queue." ); res |= ast_manager_register( "QueuePause", EVENT_FLAG_AGENT, manager_pause_queue_member, "Makes a queue member temporarily unavailable" );