Jelajahi Sumber

modules/ims_qos: new parameter cdp_event_list_size_threshold. Once the
queue exceeds this size a warning is logged.

Richard Good 10 tahun lalu
induk
melakukan
72e1189cbf

+ 7 - 0
modules/ims_qos/cdpeventprocessor.c

@@ -58,6 +58,7 @@ extern struct dlg_binds dlgb;
 extern int cdp_event_latency;
 extern int cdp_event_threshold;
 extern int cdp_event_latency_loglevel;
+extern int cdp_event_list_size_threshold;
 
 int init_cdp_cb_event_list() {
     cdp_event_list = shm_malloc(sizeof (cdp_cb_event_list_t));
@@ -72,6 +73,7 @@ int init_cdp_cb_event_list() {
         return 0;
     }
     cdp_event_list->lock = lock_init(cdp_event_list->lock);
+    cdp_event_list->size = 0;
 
     sem_new(cdp_event_list->empty, 0); //pre-locked - as we assume list is empty at start
 
@@ -130,6 +132,10 @@ void push_cdp_cb_event(cdp_cb_event_t* event) {
         cdp_event_list->tail->next = event;
         cdp_event_list->tail = event;
     }
+    cdp_event_list->size++;
+    if(cdp_event_list_size_threshold > 0 && cdp_event_list->size > cdp_event_list_size_threshold) {
+	    LM_WARN("cdp_event_list is size [%d] and has exceed cdp_event_list_size_threshold of [%d]", cdp_event_list->size, cdp_event_list_size_threshold);
+    }
     sem_release(cdp_event_list->empty);
     lock_release(cdp_event_list->lock);
 }
@@ -153,6 +159,7 @@ cdp_cb_event_t* pop_cdp_cb_event() {
         cdp_event_list->tail = 0;
     }
     ev->next = 0; //make sure whoever gets this cant access our list
+    cdp_event_list->size--;
     lock_release(cdp_event_list->lock);
 
     return ev;

+ 1 - 0
modules/ims_qos/cdpeventprocessor.h

@@ -63,6 +63,7 @@ typedef struct {
 	cdp_cb_event_t *head;
 	cdp_cb_event_t *tail;
 	gen_sem_t *empty;
+	int size;
 } cdp_cb_event_list_t;
 
 int init_cdp_cb_event_list();

+ 19 - 0
modules/ims_qos/doc/ims_qos_admin.xml

@@ -197,6 +197,25 @@ modparam("ims_qos", "cdp_event_latency_log", 1)
         <programlisting format="linespecific">
 ...
 modparam("ims_qos", "authorize_video_flow", 0)
+...
+        </programlisting>
+      </example>
+    </section>
+    <section>
+      <title><varname>cdp_event_list_size_threshold</varname> (integer)</title>
+
+      <para>This is a threshold on the size of the cdp event list.  Once the
+	queue exceeds this length a warning is logged.  0 disables this feature</para>
+
+      <para><emphasis> Default value is 0. </emphasis></para>
+
+      <example>
+        <title><varname>cdp_event_list_size_threshold</varname> parameter
+        usage</title>
+
+        <programlisting format="linespecific">
+...
+modparam("ims_qos", "cdp_event_list_size_threshold", 10)
 ...
         </programlisting>
       </example>

+ 3 - 0
modules/ims_qos/mod.c

@@ -98,6 +98,8 @@ int cdp_event_latency = 1; /*flag: report slow processing of CDP callback events
 int cdp_event_threshold = 500; /*time in ms above which we should report slow processing of CDP callback event - default 500ms*/
 int cdp_event_latency_loglevel = 0; /*log-level to use to report slow processing of CDP callback event - default ERROR*/
 
+int cdp_event_list_size_threshold = 0;  /**Threshold for size of cdp event list after which a warning is logged */
+
 /** module functions */
 static int mod_init(void);
 static int mod_child_init(int);
@@ -131,6 +133,7 @@ static param_export_t params[] = {
     { "cdp_event_threshold", INT_PARAM, &cdp_event_threshold}, /*time in ms above which we should report slow processing of CDP callback event*/
     { "cdp_event_latency_log", INT_PARAM, &cdp_event_latency_loglevel}, /*log-level to use to report slow processing of CDP callback event*/
     { "authorize_video_flow", INT_PARAM, &authorize_video_flow}, /*whether or not we authorize resources for video flows*/
+    { "cdp_event_list_size_threshold", INT_PARAM, &cdp_event_list_size_threshold}, /**Threshold for size of cdp event list after which a warning is logged */
     { 0, 0, 0}
 };