[sr-dev] git:5.2:562287f4: app_python3: execution log message based on core latency_limit_action

Daniel-Constantin Mierla miconda at gmail.com
Fri May 3 09:15:33 CEST 2019


Module: kamailio
Branch: 5.2
Commit: 562287f4c43e1dc8b1a0ff74f76a80118df06508
URL: https://github.com/kamailio/kamailio/commit/562287f4c43e1dc8b1a0ff74f76a80118df06508

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2019-05-03T09:11:14+02:00

app_python3: execution log message based on core latency_limit_action

(cherry picked from commit cce69dad4682c8bdc4085fe1513dece44643bd9c)

---

Modified: src/modules/app_python3/apy_kemi.c

---

Diff:  https://github.com/kamailio/kamailio/commit/562287f4c43e1dc8b1a0ff74f76a80118df06508.diff
Patch: https://github.com/kamailio/kamailio/commit/562287f4c43e1dc8b1a0ff74f76a80118df06508.patch

---

diff --git a/src/modules/app_python3/apy_kemi.c b/src/modules/app_python3/apy_kemi.c
index 9f78e53089..b3812a6237 100755
--- a/src/modules/app_python3/apy_kemi.c
+++ b/src/modules/app_python3/apy_kemi.c
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 
 #include <Python.h>
+#include <frameobject.h>
 
 #include "../../core/dprint.h"
 #include "../../core/route.h"
@@ -30,6 +31,7 @@
 #include "../../core/kemi.h"
 #include "../../core/locking.h"
 #include "../../core/pvar.h"
+#include "../../core/timer.h"
 #include "../../core/mem/pkg.h"
 #include "../../core/mem/shm.h"
 #include "../../core/rpc.h"
@@ -166,12 +168,11 @@ PyObject *sr_apy_kemi_return_str(sr_kemi_t *ket, char *sval, int slen)
 /**
  *
  */
-PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args, int idx)
+PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self, PyObject *args, int idx)
 {
 	str fname;
 	int i;
 	int ret;
-	sr_kemi_t *ket = NULL;
 	sr_kemi_val_t vps[SR_KEMI_PARAMS_MAX];
 	sr_apy_env_t *env_P;
 	sip_msg_t *lmsg = NULL;
@@ -188,10 +189,6 @@ PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args, int idx)
 		lmsg = env_P->msg;
 	}
 
-	ket = sr_apy_kemi_export_get(idx);
-	if(ket==NULL) {
-		return sr_kemi_apy_return_false();
-	}
 	if(ket->mname.len>0) {
 		LM_DBG("execution of method: %.*s\n", ket->fname.len, ket->fname.s);
 	} else {
@@ -695,6 +692,50 @@ PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args, int idx)
 	}
 }
 
+/**
+ *
+ */
+PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args, int idx)
+{
+	sr_kemi_t *ket = NULL;
+	PyObject *ret = NULL;
+	unsigned int ms = 0;
+	PyThreadState *pstate = NULL;
+	PyFrameObject *pframe = NULL;
+
+	ket = sr_apy_kemi_export_get(idx);
+	if(ket==NULL) {
+		return sr_kemi_apy_return_false();
+	}
+	if(unlikely(cfg_get(core, core_cfg, latency_limit_action)>0)) {
+		ms = TICKS_TO_MS(get_ticks_raw());
+	}
+
+	ret = sr_apy_kemi_exec_func_ex(ket, self, args, idx);
+
+	if(unlikely(cfg_get(core, core_cfg, latency_limit_action)>0)) {
+		ms = TICKS_TO_MS(get_ticks_raw()) - ms;
+		if(ms >= cfg_get(core, core_cfg, latency_limit_action)
+				&& is_printable(cfg_get(core, core_cfg, latency_log))) {
+			pstate = PyThreadState_GET();
+			if (pstate != NULL && pstate->frame != NULL) {
+				pframe = pstate->frame;
+			}
+
+			LOG(cfg_get(core, core_cfg, latency_log),
+					"alert - action KSR.%s%s%s(...)"
+					" took too long [%u ms] (file:%s func:%s line:%d)\n",
+					(ket->mname.len>0)?ket->mname.s:"",
+					(ket->mname.len>0)?".":"", ket->fname.s, ms,
+					(pframe)?PyString_AsString(pframe->f_code->co_filename):"",
+					(pframe)?PyString_AsString(pframe->f_code->co_name):"",
+					(pframe)?PyCode_Addr2Line(pframe->f_code, pframe->f_lasti):0);
+		}
+	}
+
+	return ret;
+}
+
 /**
  *
  */




More information about the sr-dev mailing list