From c7af46995e382ad97320ef64f22af9654c997788 Mon Sep 17 00:00:00 2001 From: Naveen Albert <asterisk@phreaknet.org> Date: Fri, 20 Aug 2021 20:35:35 +0000 Subject: [PATCH] app_queue: Don't reset queue stats on reload Prevents reloads of app_queue from also resetting queue statistics. Also preserves individual queue agent statistics if we're just reloading members. ASTERISK-28701 Change-Id: Ib5d4cdec175e44de38ef0f6ede4a7701751766f1 --- apps/app_queue.c | 10 +++++++--- doc/CHANGES-staging/app_queue_stats.txt | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 doc/CHANGES-staging/app_queue_stats.txt diff --git a/apps/app_queue.c b/apps/app_queue.c index fdc5211255..93adb3f308 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -9339,9 +9339,13 @@ static void reload_single_member(const char *memberdata, struct call_queue *q) if ((newm = create_queue_member(interface, membername, penalty, cur ? cur->paused : 0, state_interface, ringinuse, wrapuptime))) { newm->wrapuptime = wrapuptime; if (cur) { - /* Round Robin Queue Position must be copied if this is replacing an existing member */ ao2_lock(q->members); + /* Round Robin Queue Position must be copied if this is replacing an existing member */ newm->queuepos = cur->queuepos; + /* Don't reset agent stats either */ + newm->calls = cur->calls; + newm->lastcall = cur->lastcall; + ao2_link(q->members, newm); ao2_unlink(q->members, cur); ao2_unlock(q->members); @@ -10407,7 +10411,7 @@ static int manager_queue_reload(struct mansession *s, const struct message *m) } if (!header_found) { - ast_set_flag(&mask, AST_FLAGS_ALL); + ast_set_flag(&mask, AST_FLAGS_ALL & ~QUEUE_RESET_STATS); } if (!reload_handler(1, &mask, queuename)) { @@ -11146,7 +11150,7 @@ static char *handle_queue_reload(struct ast_cli_entry *e, int cmd, struct ast_cl } else if (!strcasecmp(a->argv[2], "parameters")) { ast_set_flag(&mask, QUEUE_RELOAD_PARAMETERS); } else if (!strcasecmp(a->argv[2], "all")) { - ast_set_flag(&mask, AST_FLAGS_ALL); + ast_set_flag(&mask, AST_FLAGS_ALL & ~QUEUE_RESET_STATS); } if (a->argc == 3) { diff --git a/doc/CHANGES-staging/app_queue_stats.txt b/doc/CHANGES-staging/app_queue_stats.txt new file mode 100644 index 0000000000..36c0c3da06 --- /dev/null +++ b/doc/CHANGES-staging/app_queue_stats.txt @@ -0,0 +1,7 @@ +Subject: app_queue + +Reload behavior in app_queue has been changed so +queue and agent stats are not reset during full +app_queue module reloads. The queue reset stats +CLI command may still be used to reset stats while +Asterisk is running. -- GitLab