From e13719bff1c4a723edf08252da17fef04b6f88cf Mon Sep 17 00:00:00 2001 From: Rodrigo Ramírez Norambuena Date: Mon, 28 Dec 2015 20:23:28 -0300 Subject: app_queue: Added reason pause of member MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In app_queue added value Paused Reason on QueueMemberStatus when a member on queue is paused and the reason was set. ASTERISK-25480 #close Reporte by: Rodrigo Ramírez Norambuena Change-Id: Ia5db503482f50764c15e2020196c785f59d4a68e --- apps/app_queue.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'apps') diff --git a/apps/app_queue.c b/apps/app_queue.c index 45d00939c..c2450765c 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1002,6 +1002,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + + If set when paused, the reason the queue member was paused. + @@ -1493,6 +1496,7 @@ struct member { int realtime; /*!< Is this member realtime? */ int status; /*!< Status of queue member */ int paused; /*!< Are we paused (not accepting calls)? */ + char reason_paused[80]; /*!< Reason of paused if member is paused */ int queuepos; /*!< In what order (pertains to certain strategies) should this member be called? */ time_t lastcall; /*!< When last successful call was hungup */ struct call_queue *lastqueue; /*!< Last queue we received a call */ @@ -2155,7 +2159,7 @@ static void queue_publish_member_blob(struct stasis_message_type *type, struct a static struct ast_json *queue_member_blob_create(struct call_queue *q, struct member *mem) { - return ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: i, s: i, s: i, s: i, s: i, s: i}", + return ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: i, s: i, s: i, s: i, s: i, s: s, s: i}", "Queue", q->name, "MemberName", mem->membername, "Interface", mem->interface, @@ -2166,6 +2170,7 @@ static struct ast_json *queue_member_blob_create(struct call_queue *q, struct me "LastCall", (int)mem->lastcall, "Status", mem->status, "Paused", mem->paused, + "PausedReason", mem->reason_paused, "Ringinuse", mem->ringinuse); } @@ -7055,6 +7060,14 @@ static void set_queue_member_pause(struct call_queue *q, struct member *mem, con } mem->paused = paused; + if (paused) { + if (!ast_strlen_zero(reason)) { + ast_copy_string(mem->reason_paused, reason, sizeof(mem->reason_paused)); + } + } else { + ast_copy_string(mem->reason_paused, "", sizeof(mem->reason_paused)); + } + ast_devstate_changed(mem->paused ? QUEUE_PAUSED_DEVSTATE : QUEUE_UNPAUSED_DEVSTATE, AST_DEVSTATE_CACHABLE, "Queue:%s_pause_%s", q->name, mem->interface); @@ -9513,10 +9526,11 @@ static int manager_queues_status(struct mansession *s, const struct message *m) "LastCall: %d\r\n" "Status: %d\r\n" "Paused: %d\r\n" + "PausedReason: %s\r\n" "%s" "\r\n", q->name, mem->membername, mem->interface, mem->state_interface, mem->dynamic ? "dynamic" : "static", - mem->penalty, mem->calls, (int)mem->lastcall, mem->status, mem->paused, idText); + mem->penalty, mem->calls, (int)mem->lastcall, mem->status, mem->paused, mem->reason_paused, idText); ++q_items; } ao2_ref(mem, -1); @@ -9670,7 +9684,7 @@ static int manager_pause_queue_member(struct mansession *s, const struct message interface = astman_get_header(m, "Interface"); paused_s = astman_get_header(m, "Paused"); queuename = astman_get_header(m, "Queue"); /* Optional - if not supplied, pause the given Interface in all queues */ - reason = astman_get_header(m, "Reason"); /* Optional - Only used for logging purposes */ + reason = astman_get_header(m, "Reason"); /* Optional */ if (ast_strlen_zero(interface) || ast_strlen_zero(paused_s)) { astman_send_error(s, m, "Need 'Interface' and 'Paused' parameters."); -- cgit v1.2.3