[asterisk-commits] rizzo: trunk r48550 - /trunk/apps/app_queue.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sun Dec 17 15:47:30 MST 2006
Author: rizzo
Date: Sun Dec 17 16:47:30 2006
New Revision: 48550
URL: http://svn.digium.com/view/asterisk?view=rev&rev=48550
Log:
replace ast_build_string() with ast_str_*();
simplify __queues_show()
Modified:
trunk/apps/app_queue.c
Modified: trunk/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_queue.c?view=diff&rev=48550&r1=48549&r2=48550
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Sun Dec 17 16:47:30 2006
@@ -4035,141 +4035,107 @@
return 1;
}
-static int __queues_show(struct mansession *s, int manager, int fd, int argc, char **argv)
+/*! \brief direct ouput to manager or cli with proper terminator */
+static void do_print(struct mansession *s, int fd, const char *str)
+{
+ if (s)
+ astman_append(s, "%s\r\n", str);
+ else
+ ast_cli(fd, "%s\n", str);
+}
+
+static int __queues_show(struct mansession *s, int fd, int argc, char **argv)
{
struct call_queue *q;
- struct queue_ent *qe;
- struct member *mem;
- int pos, queue_show;
- time_t now;
- char max_buf[80];
- char *max;
- size_t max_left;
- float sl = 0;
- char *term = manager ? "\r\n" : "\n";
-
- time(&now);
- if (argc == 2)
- queue_show = 0;
- else if (argc == 3)
- queue_show = 1;
- else
+ struct ast_str *out = ast_str_alloca(80);
+ int found = 0;
+ time_t now = time(NULL);
+
+ if (argc != 2 && argc != 3)
return RESULT_SHOWUSAGE;
/* We only want to load realtime queues when a specific queue is asked for. */
- if (queue_show)
+ if (argc == 3) /* specific queue */
load_realtime_queue(argv[2]);
AST_LIST_LOCK(&queues);
- if (AST_LIST_EMPTY(&queues)) {
- AST_LIST_UNLOCK(&queues);
- 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) {
+ float sl;
+
ast_mutex_lock(&q->lock);
- if (queue_show) {
- if (strcasecmp(q->name, argv[2]) != 0) {
- ast_mutex_unlock(&q->lock);
- if (!AST_LIST_NEXT(q, list)) {
- ast_cli(fd, "No such queue: %s.%s",argv[2], term);
- break;
- }
- continue;
- }
- }
- max_buf[0] = '\0';
- max = max_buf;
- max_left = sizeof(max_buf);
+ if (argc == 3 && !strcasecmp(q->name, argv[2])) {
+ ast_mutex_unlock(&q->lock);
+ continue;
+ }
+ found = 1;
+
+ ast_str_set(&out, 0, "%-12.12s has %d calls (max ", q->name, q->count);
if (q->maxlen)
- ast_build_string(&max, &max_left, "%d", q->maxlen);
+ ast_str_append(&out, 0, "%d", q->maxlen);
else
- ast_build_string(&max, &max_left, "unlimited");
+ ast_str_append(&out, 0, "unlimited");
sl = 0;
if (q->callscompleted > 0)
sl = 100 * ((float) q->callscompletedinsl / (float) q->callscompleted);
- 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);
+ ast_str_append(&out, 0, ") in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds",
+ int2strat(q->strategy), q->holdtime, q->weight,
+ q->callscompleted, q->callsabandoned,sl,q->servicelevel);
+ do_print(s, fd, out->str);
+ if (!q->members)
+ do_print(s, fd, " No Members");
+ else {
+ struct member *mem;
+
+ do_print(s, fd, " Members: ");
+ for (mem = q->members; mem; mem = mem->next) {
+ ast_str_set(&out, 0, " %s", mem->interface);
+ if (mem->penalty)
+ ast_str_append(&out, 0, " with penalty %d", mem->penalty);
+ ast_str_append(&out, 0, "%s%s (%s)",
+ mem->dynamic ? " (dynamic)" : "",
+ mem->paused ? " (paused)" : "",
+ devstate2str(mem->status));
+ if (mem->calls)
+ ast_str_append(&out, 0, " has taken %d calls (last was %ld secs ago)",
+ mem->calls, (long) (time(NULL) - mem->lastcall));
+ else
+ ast_str_append(&out, 0, " has taken no calls yet");
+ do_print(s, fd, out->str);
+ }
+ }
+ if (!q->head)
+ do_print(s, fd, " No Callers");
+ else {
+ struct queue_ent *qe;
+ int pos = 1;
+
+ do_print(s, fd, " Callers: ");
+ for (qe = q->head; qe; qe = qe->next) {
+ ast_str_set(&out, 0, " %d. %s (wait: %ld:%2.2ld, prio: %d)",
+ pos++, qe->chan->name, (long) (now - qe->start) / 60,
+ (long) (now - qe->start) % 60, qe->prio);
+ do_print(s, fd, out->str);
+ }
+ }
+ do_print(s, fd, ""); /* blank line between entries */
+ ast_mutex_unlock(&q->lock);
+ if (argc == 3) /* print a specific entry */
+ break;
+ }
+ AST_LIST_UNLOCK(&queues);
+ if (!found) {
+ if (argc == 3)
+ ast_str_set(&out, 0, "No such queue: %s.", argv[2]);
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) {
- 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;
- max_left = sizeof(max_buf);
- if (mem->penalty)
- ast_build_string(&max, &max_left, " with penalty %d", mem->penalty);
- if (mem->dynamic)
- ast_build_string(&max, &max_left, " (dynamic)");
- if (mem->paused)
- ast_build_string(&max, &max_left, " (paused)");
- ast_build_string(&max, &max_left, " (%s)", devstate2str(mem->status));
- if (mem->calls) {
- ast_build_string(&max, &max_left, " has taken %d calls (last was %ld secs ago)",
- mem->calls, (long) (time(NULL) - mem->lastcall));
- } else
- ast_build_string(&max, &max_left, " has taken no calls yet");
- 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 if (s)
- astman_append(s, " No Members%s", term);
- else
- ast_cli(fd, " No Members%s", term);
- if (q->head) {
- pos = 1;
- 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);
- if (s)
- astman_append(s, "%s", term);
- else
- ast_cli(fd, "%s", term);
- ast_mutex_unlock(&q->lock);
- if (queue_show)
- break;
- }
- AST_LIST_UNLOCK(&queues);
+ ast_str_set(&out, 0, "No queues.");
+ do_print(s, fd, out->str);
+ }
return RESULT_SUCCESS;
}
static int queue_show(int fd, int argc, char **argv)
{
- return __queues_show(NULL, 0, fd, argc, argv);
+ return __queues_show(NULL, fd, argc, argv);
}
static char *complete_queue(const char *line, const char *word, int pos, int state)
@@ -4198,7 +4164,7 @@
{
char *a[] = { "queue", "show" };
- __queues_show(s, 1, -1, 2, a);
+ __queues_show(s, -1, 2, a);
astman_append(s, "\r\n\r\n"); /* Properly terminate Manager output */
return RESULT_SUCCESS;
More information about the asterisk-commits
mailing list