From cc1945ce1b340bc8a6465e67c67bf560ab64d1b9 Mon Sep 17 00:00:00 2001
From: Joshua Colp <jcolp@digium.com>
Date: Mon, 2 Oct 2006 15:40:38 +0000
Subject: [PATCH] Add option 'keepstats' which will keep queue statistics
 during a reload. (issue #7908 reported by jmls)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44150 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 CHANGES                    | 2 ++
 apps/app_queue.c           | 9 ++++++++-
 configs/queues.conf.sample | 5 +++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/CHANGES b/CHANGES
index f9c6920109..4db3256219 100644
--- a/CHANGES
+++ b/CHANGES
@@ -17,3 +17,5 @@ Changes since Asterisk 1.4-beta was branched:
      can use --with-cap to specify the path.
   * H323 remote hold notification support added (by NOTIFY message
      and/or H.450 supplementary service)
+  * Added keepstats option to queues.conf which will keep queue
+     statistics during a reload.
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 6d1df42d7e..6ec3c4ef3e 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -237,6 +237,9 @@ static const char *pm_family = "/Queue/PersistentMembers";
 /* The maximum length of each persistent member queue database entry */
 #define PM_MAX_LEN 8192
 
+/*! \brief queues.conf [general] option */
+static int queue_keep_stats = 0;
+
 /*! \brief queues.conf [general] option */
 static int queue_persistent_members = 0;
 
@@ -3699,6 +3702,9 @@ static int reload_queues(void)
 	while ((cat = ast_category_browse(cfg, cat)) ) {
 		if (!strcasecmp(cat, "general")) {	
 			/* Initialize global settings */
+			queue_keep_stats = 0;
+			if ((general_val = ast_variable_retrieve(cfg, "general", "keepstats")))
+				queue_keep_stats = ast_true(general_val);
 			queue_persistent_members = 0;
 			if ((general_val = ast_variable_retrieve(cfg, "general", "persistentmembers")))
 				queue_persistent_members = ast_true(general_val);
@@ -3728,7 +3734,8 @@ static int reload_queues(void)
 					ast_mutex_lock(&q->lock);
 				/* Re-initialize the queue, and clear statistics */
 				init_queue(q);
-				clear_queue(q);
+				if (!queue_keep_stats) 
+					clear_queue(q);
 				for (cur = q->members; cur; cur = cur->next) {
 					if (!cur->dynamic) {
 						cur->delme = 1;
diff --git a/configs/queues.conf.sample b/configs/queues.conf.sample
index f8582afef1..42c1e89776 100644
--- a/configs/queues.conf.sample
+++ b/configs/queues.conf.sample
@@ -8,6 +8,11 @@
 ;    read into their recorded queues. Default is 'yes'.
 ;
 persistentmembers = yes
+;
+; Keep Stats
+;    Keep queue statistics during a reload. Default is 'no'
+;
+keepstats = no
 ; 
 ; AutoFill Behavior
 ;    The old/current behavior of the queue has a serial type behavior 
-- 
GitLab