[svn-commits] dvossel: trunk r236308 - /trunk/apps/app_queue.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Dec 23 13:14:09 CST 2009


Author: dvossel
Date: Wed Dec 23 13:14:05 2009
New Revision: 236308

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=236308
Log:
QUEUE_MEMBER(..., ready) counts only ready agents, not free agents wrapping up

The QUEUE_MEMBER dialplan function can return total members,
logged-in members and "free" members count. A member is counted
as "free" immediately after his call ends, even though its wrap-up
time, if specified in queues.conf, has not yet expired, and the
queue will not actually route a call to it.

This Patch introduces a new "ready" option that only counts
free agents no longer in the wrap up time period.

(closes issue #16240)
Reported by: kkm
Patches:
      appqueue-memberfun-readyoption-trunk.diff uploaded by kkm (license 888)
Tested by: kkm

Modified:
    trunk/apps/app_queue.c

Modified: trunk/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/trunk/apps/app_queue.c?view=diff&rev=236308&r1=236307&r2=236308
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Wed Dec 23 13:14:05 2009
@@ -437,7 +437,10 @@
 						<para>Returns the number of logged-in members for the specified queue.</para>
 					</enum>
 					<enum name="free">
-						<para>Returns the number of logged-in members for the specified queue available to take a call.</para>
+						<para>Returns the number of logged-in members for the specified queue that either can take calls or are currently wrapping up after a previous call.</para>
+					</enum>
+					<enum name="ready">
+						<para>Returns the number of logged-in members for the specified queue that are immediately available to answer a call.</para>
 					</enum>
 					<enum name="count">
 						<para>Returns the total number of members for the specified queue.</para>
@@ -5793,8 +5796,8 @@
 }
 
 /*! 
- * \brief Get number either busy / free or total members of a specific queue
- * \retval number of members (busy / free / total)
+ * \brief Get number either busy / free / ready or total members of a specific queue
+ * \retval number of members (busy / free / ready / total)
  * \retval -1 on error
 */
 static int queue_function_qac(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
@@ -5831,6 +5834,19 @@
 			while ((m = ao2_iterator_next(&mem_iter))) {
 				/* Count the agents who are logged in and presently answering calls */
 				if ((m->status == AST_DEVICE_NOT_INUSE) && (!m->paused)) {
+					count++;
+				}
+				ao2_ref(m, -1);
+			}
+			ao2_iterator_destroy(&mem_iter);
+		} else if (!strcasecmp(option, "ready")) {
+			time_t now;
+			time(&now);
+			mem_iter = ao2_iterator_init(q->members, 0);
+			while ((m = ao2_iterator_next(&mem_iter))) {
+				/* Count the agents who are logged in, not paused and not wrapping up */
+				if ((m->status == AST_DEVICE_NOT_INUSE) && (!m->paused) &&
+						!(m->lastcall && q->wrapuptime && ((now - q->wrapuptime) < m->lastcall))) {
 					count++;
 				}
 				ao2_ref(m, -1);




More information about the svn-commits mailing list