From 00d848c94e0b358863fe801a299dab1bb314dad3 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Wed, 26 Dec 2007 15:58:17 +0000 Subject: [PATCH] Adding support for storing the queue log entries in a realtime backend. (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 | 1 + configs/extconfig.conf.sample | 1 + main/logger.c | 34 +++++++++++++++++++++++++--------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index 47d24f51e2..fcf27e7c84 100644 --- 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 ------------- diff --git a/configs/extconfig.conf.sample b/configs/extconfig.conf.sample index 3da9251bcc..4c3899fcd5 100644 --- a/configs/extconfig.conf.sample +++ b/configs/extconfig.conf.sample @@ -59,4 +59,5 @@ ;queues => odbc,asterisk ;queue_members => odbc,asterisk ;musiconhold => mysql,asterisk +;queue_log => mysql,aasterisk diff --git a/main/logger.c b/main/logger.c index c82862e6b5..252b620b6e 100644 --- a/main/logger.c +++ b/main/logger.c @@ -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)