In addition to the warning, it would be nice to run a
script callback via
a dedicated route, to let the admin take some decisions in real time.
Regards,
Ovidiu Sas
On Jan 12, 2015 8:16 AM, "Richard Good" <richard.good(a)smilecoms.com>
wrote:
Module: kamailio
Branch: master
Commit: e688d656427dd00d48f1e309c5d8ef991e432b67
URL:
https://github.com/kamailio/kamailio/commit/e688d656427dd00d48f1e309c5d8ef9…
Author: Richard Good <richard.good(a)smilecoms.com>
Committer: Richard Good <richard.good(a)smilecoms.com>
Date: 2015-01-12T15:08:08+02:00
modules/cdp: new mod param: workerq_length_threshold_percentage
This is the threshold of the length of the worker queue as a percentage of
the maximum queue size - when exceeded a warning is written to the log
file. Nice to check if worker queue is growing.
---
Modified: modules/cdp/doc/cdp_admin.xml
Modified: modules/cdp/mod.c
Modified: modules/cdp/worker.c
---
Diff:
https://github.com/kamailio/kamailio/commit/e688d656427dd00d48f1e309c5d8ef9…
Patch:
https://github.com/kamailio/kamailio/commit/e688d656427dd00d48f1e309c5d8ef9…
---
diff --git a/modules/cdp/doc/cdp_admin.xml b/modules/cdp/doc/cdp_admin.xml
index cdf65d2..234e270 100644
--- a/modules/cdp/doc/cdp_admin.xml
+++ b/modules/cdp/doc/cdp_admin.xml
@@ -126,6 +126,24 @@ modparam("cdp", "latency_threshold", 1000)
</programlisting>
</example>
</section>
+ <section>
+ <title>workerq_length_threshold_percentage (int)</title>
+
+ <para>The threshold of the length of the worker queue as a
percentage of
+ the maximum queue size - when exceeded a warning is written to
the log
+ file. 0 means disabled</para>
+
+ <para><emphasis> Default value is <quote>0</quote>.
</emphasis></para>
+
+ <example>
+ <title>Set
<varname>workerq_length_threshold_percentage</varname>
parameter</title>
+
+ <programlisting format="linespecific">...
+modparam("cdp", "workerq_length_threshold_percentage", 25)
+...
+ </programlisting>
+ </example>
+ </section>
</section>
<section>
diff --git a/modules/cdp/mod.c b/modules/cdp/mod.c
index 6857d82..90900d3 100644
--- a/modules/cdp/mod.c
+++ b/modules/cdp/mod.c
@@ -62,6 +62,7 @@ char* config_file="DiameterPeer.xml"; /**<
default DiameterPeer configuration f
unsigned int latency_threshold = 500; /**< default
threshold for Diameter calls (ms) */
unsigned int *latency_threshold_p = &latency_threshold;
unsigned int workerq_latency_threshold = 100; /**< default threshold
for putting a task into worker queue (ms) */
+unsigned int workerq_length_threshold_percentage = 0; /**< default
threshold for worker queue length, percentage of max queue length - by
default disabled */
extern dp_config *config; /**< DiameterPeer
configuration structure */
@@ -165,6 +166,7 @@ static param_export_t cdp_params[] = {
{ "config_file", PARAM_STRING,
&config_file}, /**< configuration filename */
{ "latency_threshold", PARAM_INT,
&latency_threshold}, /**<threshold above which we will log*/
{ "workerq_latency_threshold", PARAM_INT,
&workerq_latency_threshold},/**<time threshold putting job into queue*/
+ { "workerq_length_threshold_percentage", PARAM_INT,
&workerq_length_threshold_percentage},/**<queue length threshold -
percentage of max queue length*/
{ 0, 0, 0 }
};
@@ -215,7 +217,7 @@ static int cdp_init( void )
LM_ERR("failed to register stat\n");
return -1;
}
-
+
if (register_module_stats( exports.name, mod_stats)!=0 ) {
LM_ERR("failed to register core statistics\n");
return -1;
diff --git a/modules/cdp/worker.c b/modules/cdp/worker.c
index 5ab215c..4a45bc4 100644
--- a/modules/cdp/worker.c
+++ b/modules/cdp/worker.c
@@ -70,6 +70,7 @@ task_queue_t *tasks; /**< queue of tasks */
cdp_cb_list_t *callbacks; /**< list of callbacks for message processing
*/
extern unsigned int workerq_latency_threshold; /**<max delay for putting
task into worker queue */
+extern unsigned int workerq_length_threshold_percentage; /**<
default threshold for worker queue length, percentage of max queue length */
/**
* Initializes the worker structures, like the task queue.
*/
@@ -207,6 +208,8 @@ void cb_remove(cdp_cb_t *cb) {
int put_task(peer *p, AAAMessage *msg) {
struct timeval start, stop;
+ int num_tasks, length_percentage;
+
long elapsed_useconds=0, elapsed_seconds=0, elapsed_millis=0;
lock_get(tasks->lock);
@@ -246,6 +249,13 @@ int put_task(peer *p, AAAMessage *msg) {
LM_WARN("Error releasing tasks->empty semaphore > %s!\n",
strerror(errno));
lock_release(tasks->lock);
+ if(workerq_length_threshold_percentage > 0) {
+ num_tasks = tasks->end - tasks->start;
+ length_percentage = num_tasks/tasks->max*100;
+ if(length_percentage > workerq_length_threshold_percentage) {
+ LM_WARN("Queue length has exceeded length threshold
percentage [%i] and is length [%i]", length_percentage, num_tasks);
+ }
+ }
//int num_tasks = tasks->end - tasks->start;
//LM_ERR("Added task to task queue. Queue length [%i]", num_tasks);
_______________________________________________
sr-dev mailing list
sr-dev(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
_______________________________________________
sr-dev mailing list
sr-dev(a)lists.sip-router.org