summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2006-03-25 23:50:09 +0000
committerMark Spencer <markster@digium.com>2006-03-25 23:50:09 +0000
commit9164eac21a1cce9c9f205e7a5a939346de55bf5f (patch)
treead20048993b3cb7000c2f24edc0e013205b48924 /apps
parentb0ac62573a6282a0114d2b23e5a6f04e472fb051 (diff)
Add micro-http server and abstract manager interface, make snmp not die
on reload. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@14953 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_queue.c80
1 files changed, 56 insertions, 24 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 072024ba7..b935951ec 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -3357,7 +3357,7 @@ static void reload_queues(void)
AST_LIST_UNLOCK(&queues);
}
-static int __queues_show(int manager, int fd, int argc, char **argv, int queue_show)
+static int __queues_show(struct mansession *s, int manager, int fd, int argc, char **argv, int queue_show)
{
struct ast_call_queue *q;
struct queue_ent *qe;
@@ -3381,10 +3381,17 @@ static int __queues_show(int manager, int fd, int argc, char **argv, int queue_s
AST_LIST_LOCK(&queues);
if (AST_LIST_EMPTY(&queues)) {
AST_LIST_UNLOCK(&queues);
- if (queue_show)
- ast_cli(fd, "No such queue: %s.%s",argv[2], term);
- else
- ast_cli(fd, "No queues.%s", term);
+ if (queue_show) {
+ if (s)
+ astman_append(s, "No such queue: %s.%s",argv[2], term);
+ else
+ ast_cli(fd, "No such queue: %s.%s",argv[2], term);
+ } else {
+ if (s)
+ astman_append(s, "No queues.%s", term);
+ else
+ ast_cli(fd, "No queues.%s", term);
+ }
return RESULT_SUCCESS;
}
AST_LIST_TRAVERSE(&queues, q, list) {
@@ -3409,10 +3416,17 @@ static int __queues_show(int manager, int fd, int argc, char **argv, int queue_s
sl = 0;
if(q->callscompleted > 0)
sl = 100*((float)q->callscompletedinsl/(float)q->callscompleted);
- ast_cli(fd, "%-12.12s has %d calls (max %s) in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds%s",
- q->name, q->count, max_buf, int2strat(q->strategy), q->holdtime, q->weight, q->callscompleted, q->callsabandoned,sl,q->servicelevel, term);
+ if (s)
+ astman_append(s, "%-12.12s has %d calls (max %s) in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds%s",
+ q->name, q->count, max_buf, int2strat(q->strategy), q->holdtime, q->weight, q->callscompleted, q->callsabandoned,sl,q->servicelevel, term);
+ else
+ ast_cli(fd, "%-12.12s has %d calls (max %s) in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds%s",
+ q->name, q->count, max_buf, int2strat(q->strategy), q->holdtime, q->weight, q->callscompleted, q->callsabandoned,sl,q->servicelevel, term);
if (q->members) {
- ast_cli(fd, " Members: %s", term);
+ if (s)
+ astman_append(s, " Members: %s", term);
+ else
+ ast_cli(fd, " Members: %s", term);
for (mem = q->members; mem; mem = mem->next) {
max_buf[0] = '\0';
max = max_buf;
@@ -3429,19 +3443,37 @@ static int __queues_show(int manager, int fd, int argc, char **argv, int queue_s
mem->calls, (long)(time(NULL) - mem->lastcall));
} else
ast_build_string(&max, &max_left, " has taken no calls yet");
- ast_cli(fd, " %s%s%s", mem->interface, max_buf, term);
+ if (s)
+ astman_append(s, " %s%s%s", mem->interface, max_buf, term);
+ else
+ ast_cli(fd, " %s%s%s", mem->interface, max_buf, term);
}
- } else
+ } else if (s)
+ astman_append(s, " No Members%s", term);
+ else
ast_cli(fd, " No Members%s", term);
if (q->head) {
pos = 1;
- ast_cli(fd, " Callers: %s", term);
- for (qe = q->head; qe; qe = qe->next)
- ast_cli(fd, " %d. %s (wait: %ld:%2.2ld, prio: %d)%s", pos++, qe->chan->name,
- (long)(now - qe->start) / 60, (long)(now - qe->start) % 60, qe->prio, term);
- } else
+ if (s)
+ astman_append(s, " Callers: %s", term);
+ else
+ ast_cli(fd, " Callers: %s", term);
+ for (qe = q->head; qe; qe = qe->next) {
+ if (s)
+ astman_append(s, " %d. %s (wait: %ld:%2.2ld, prio: %d)%s", pos++, qe->chan->name,
+ (long)(now - qe->start) / 60, (long)(now - qe->start) % 60, qe->prio, term);
+ else
+ ast_cli(fd, " %d. %s (wait: %ld:%2.2ld, prio: %d)%s", pos++, qe->chan->name,
+ (long)(now - qe->start) / 60, (long)(now - qe->start) % 60, qe->prio, term);
+ }
+ } else if (s)
+ astman_append(s, " No Callers%s", term);
+ else
ast_cli(fd, " No Callers%s", term);
- ast_cli(fd, "%s", term);
+ if (s)
+ astman_append(s, "%s", term);
+ else
+ ast_cli(fd, "%s", term);
ast_mutex_unlock(&q->lock);
if (queue_show)
break;
@@ -3452,12 +3484,12 @@ static int __queues_show(int manager, int fd, int argc, char **argv, int queue_s
static int queues_show(int fd, int argc, char **argv)
{
- return __queues_show(0, fd, argc, argv, 0);
+ return __queues_show(NULL, 0, fd, argc, argv, 0);
}
static int queue_show(int fd, int argc, char **argv)
{
- return __queues_show(0, fd, argc, argv, 1);
+ return __queues_show(NULL, 0, fd, argc, argv, 1);
}
static char *complete_queue(const char *line, const char *word, int pos, int state)
@@ -3485,8 +3517,8 @@ static char *complete_queue(const char *line, const char *word, int pos, int sta
static int manager_queues_show( struct mansession *s, struct message *m )
{
char *a[] = { "show", "queues" };
- __queues_show(1, s->fd, 2, a, 0);
- ast_cli(s->fd, "\r\n\r\n"); /* Properly terminate Manager output */
+ __queues_show(s, 1, -1, 2, a, 0);
+ astman_append(s, "\r\n\r\n"); /* Properly terminate Manager output */
return RESULT_SUCCESS;
}
@@ -3518,7 +3550,7 @@ static int manager_queues_status( struct mansession *s, struct message *m )
if (ast_strlen_zero(queuefilter) || !strcmp(q->name, queuefilter)) {
if(q->callscompleted > 0)
sl = 100*((float)q->callscompletedinsl/(float)q->callscompleted);
- ast_cli(s->fd, "Event: QueueParams\r\n"
+ astman_append(s, "Event: QueueParams\r\n"
"Queue: %s\r\n"
"Max: %d\r\n"
"Calls: %d\r\n"
@@ -3535,7 +3567,7 @@ static int manager_queues_status( struct mansession *s, struct message *m )
/* List Queue Members */
for (mem = q->members; mem; mem = mem->next) {
if (ast_strlen_zero(memberfilter) || !strcmp(mem->interface, memberfilter)) {
- ast_cli(s->fd, "Event: QueueMember\r\n"
+ astman_append(s, "Event: QueueMember\r\n"
"Queue: %s\r\n"
"Location: %s\r\n"
"Membership: %s\r\n"
@@ -3553,7 +3585,7 @@ static int manager_queues_status( struct mansession *s, struct message *m )
/* List Queue Entries */
pos = 1;
for (qe = q->head; qe; qe = qe->next) {
- ast_cli(s->fd, "Event: QueueEntry\r\n"
+ astman_append(s, "Event: QueueEntry\r\n"
"Queue: %s\r\n"
"Position: %d\r\n"
"Channel: %s\r\n"
@@ -3572,7 +3604,7 @@ static int manager_queues_status( struct mansession *s, struct message *m )
}
AST_LIST_UNLOCK(&queues);
- ast_cli(s->fd,
+ astman_append(s,
"Event: QueueStatusComplete\r\n"
"%s"
"\r\n",idText);