[sr-dev] git:master:e688d656: modules/cdp: new mod param: workerq_length_threshold_percentage

Ovidiu Sas osas at voipembedded.com
Mon Jan 12 15:00:36 CET 2015


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 at smilecoms.com> wrote:

> Module: kamailio
> Branch: master
> Commit: e688d656427dd00d48f1e309c5d8ef991e432b67
> URL:
> https://github.com/kamailio/kamailio/commit/e688d656427dd00d48f1e309c5d8ef991e432b67
>
> Author: Richard Good <richard.good at smilecoms.com>
> Committer: Richard Good <richard.good at 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/e688d656427dd00d48f1e309c5d8ef991e432b67.diff
> Patch:
> https://github.com/kamailio/kamailio/commit/e688d656427dd00d48f1e309c5d8ef991e432b67.patch
>
> ---
>
> 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 at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20150112/caf7173e/attachment-0001.html>


More information about the sr-dev mailing list