Add option to mask certain high frequency events (bug #3707)
authorMark Spencer <markster@digium.com>
Mon, 11 Apr 2005 02:04:08 +0000 (02:04 +0000)
committerMark Spencer <markster@digium.com>
Mon, 11 Apr 2005 02:04:08 +0000 (02:04 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5444 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_queue.c
configs/queues.conf.sample

index d0c037b..cdd029b 100755 (executable)
@@ -275,6 +275,7 @@ struct ast_call_queue {
                unsigned int timeoutrestart:1;
                unsigned int announceholdtime:2;
                unsigned int strategy:3;
+               unsigned int maskmemberstatus:1;
        int announcefrequency;          /* How often to announce their position */
        int roundingseconds;            /* How many seconds do we round to? */
        int holdtime;                   /* Current avg holdtime, based on recursive boxcar filter */
@@ -424,17 +425,19 @@ static void *changethread(void *data)
                        if (!strcasecmp(sc->dev, cur->interface)) {
                                if (cur->status != sc->state) {
                                        cur->status = sc->state;
-                                       manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus",
-                                               "Queue: %s\r\n"
-                                               "Location: %s\r\n"
-                                               "Membership: %s\r\n"
-                                               "Penalty: %d\r\n"
-                                               "CallsTaken: %d\r\n"
-                                               "LastCall: %ld\r\n"
-                                               "Status: %d\r\n"
-                                               "Paused: %d\r\n",
-                                       q->name, cur->interface, cur->dynamic ? "dynamic" : "static",
-                                       cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused);
+                                       if (!q->maskmemberstatus) {
+                                               manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus",
+                                                       "Queue: %s\r\n"
+                                                       "Location: %s\r\n"
+                                                       "Membership: %s\r\n"
+                                                       "Penalty: %d\r\n"
+                                                       "CallsTaken: %d\r\n"
+                                                       "LastCall: %ld\r\n"
+                                                       "Status: %d\r\n"
+                                                       "Paused: %d\r\n",
+                                               q->name, cur->interface, cur->dynamic ? "dynamic" : "static",
+                                               cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused);
+                                       }
                                }
                        }
                        cur = cur->next;
@@ -765,17 +768,19 @@ static int update_status(struct ast_call_queue *q, struct member *member, int st
        while(cur) {
                if (member == cur) {
                        cur->status = status;
-                       manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus",
-                               "Queue: %s\r\n"
-                               "Location: %s\r\n"
-                               "Membership: %s\r\n"
-                               "Penalty: %d\r\n"
-                               "CallsTaken: %d\r\n"
-                               "LastCall: %ld\r\n"
-                               "Status: %d\r\n"
-                               "Paused: %d\r\n",
-                                       q->name, cur->interface, cur->dynamic ? "dynamic" : "static",
-                                       cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused);
+                       if (!q->maskmemberstatus) {
+                               manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus",
+                                       "Queue: %s\r\n"
+                                       "Location: %s\r\n"
+                                       "Membership: %s\r\n"
+                                       "Penalty: %d\r\n"
+                                       "CallsTaken: %d\r\n"
+                                       "LastCall: %ld\r\n"
+                                       "Status: %d\r\n"
+                                       "Paused: %d\r\n",
+                               q->name, cur->interface, cur->dynamic ? "dynamic" : "static",
+                               cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused);
+                       }
                        break;
                }
                cur = cur->next;
@@ -2667,6 +2672,8 @@ static void reload_queues(void)
                                                        q->leavewhenempty = QUEUE_EMPTY_NORMAL;
                                                else
                                                        q->leavewhenempty = 0;
+                                       } else if (!strcasecmp(var->name, "eventmemberstatus")) {
+                                               q->maskmemberstatus = !ast_true(var->value);
                                        } else if (!strcasecmp(var->name, "eventwhencalled")) {
                                                q->eventwhencalled = ast_true(var->value);
                                        } else if (!strcasecmp(var->name, "reportholdtime")) {
index a510119..ba438b1 100755 (executable)
@@ -137,11 +137,18 @@ persistentmembers = yes
 ; leavewhenempty = yes
 ;
 ;
-; Asterisk can generate AgentCalled events when an agent is rung, if this is turned on
-; (may generate a LOT of extra manager events)
+; If this is set to yes, the following manager events will be generated:
+; AgentCalled, AgentDump, AgentConnect, AgentComplete
+; (may generate some extra manager events, but probably ones you want)
 ;
 ; eventwhencalled = yes
 ;
+; If this is set to no, the following manager events will be generated:
+; QueueMemberStatus
+; (may generate a WHOLE LOT of extra manager events)
+;
+; eventmemberstatusoff = no
+;
 ; If you wish to report the caller's hold time to the member before they are connected
 ; to the caller, set this to yes.
 ;