Adding support for storing the queue log entries in a realtime backend.
authorMark Michelson <mmichelson@digium.com>
Wed, 26 Dec 2007 15:58:17 +0000 (15:58 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 26 Dec 2007 15:58:17 +0000 (15:58 +0000)
(closes issue #11625, reported and patched by sergee)

Thank you very much to sergee for adding this new feature!

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@94782 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
configs/extconfig.conf.sample
main/logger.c

diff --git a/CHANGES b/CHANGES
index 47d24f5..fcf27e7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -384,6 +384,7 @@ Logger changes
      command to be run after rotation.  This is primarily useful with
      rotatestrategry=rotate, to allow a limit on the number of logfiles kept
      and to ensure that the oldest log file gets deleted.
+  * Added realtime support for the queue log
 
 Miscellaneous 
 -------------
index 3da9251..4c3899f 100644 (file)
@@ -59,4 +59,5 @@
 ;queues => odbc,asterisk
 ;queue_members => odbc,asterisk
 ;musiconhold => mysql,asterisk
+;queue_log => mysql,aasterisk
 
index c82862e..252b620 100644 (file)
@@ -418,18 +418,34 @@ void ast_queue_log(const char *queuename, const char *callid, const char *agent,
        va_list ap;
        char qlog_msg[8192];
        int qlog_len;
-       if (qlog) {
+       char time_str[16];
+
+       if (ast_check_realtime("queue_log")) {
                va_start(ap, fmt);
-               qlog_len = snprintf(qlog_msg, sizeof(qlog_msg), "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event);
-               vsnprintf(qlog_msg + qlog_len, sizeof(qlog_msg) - qlog_len, fmt, ap);
+               vsnprintf(qlog_msg, sizeof(qlog_msg), fmt, ap);
                va_end(ap);
+               snprintf(time_str, sizeof(time_str), "%ld", (long)time(NULL));
+               ast_store_realtime("queue_log", "time", time_str, 
+                                               "callid", callid, 
+                                               "queuename", queuename, 
+                                               "agent", agent, 
+                                               "event", event,
+                                               "data", qlog_msg,
+                                               NULL);
+       } else {
+               if (qlog) {
+                       va_start(ap, fmt);
+                       qlog_len = snprintf(qlog_msg, sizeof(qlog_msg), "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event);
+                       vsnprintf(qlog_msg + qlog_len, sizeof(qlog_msg) - qlog_len, fmt, ap);
+                       va_end(ap);
+               }
+               AST_RWLIST_RDLOCK(&logchannels);
+               if (qlog) {
+                       fprintf(qlog, "%s\n", qlog_msg);
+                       fflush(qlog);
+               }
+               AST_RWLIST_UNLOCK(&logchannels);
        }
-       AST_RWLIST_RDLOCK(&logchannels);
-       if (qlog) {
-               fprintf(qlog, "%s\n", qlog_msg);
-               fflush(qlog);
-       }
-       AST_RWLIST_UNLOCK(&logchannels);
 }
 
 static int rotate_file(const char *filename)