[sr-dev] git:master:0457280e: corex: added corex.pkg_summary command

Daniel-Constantin Mierla miconda at gmail.com
Mon Oct 12 00:28:10 CEST 2015


Module: kamailio
Branch: master
Commit: 0457280e66aa03f7c5e0ff2fc595cb7b3e6ef012
URL: https://github.com/kamailio/kamailio/commit/0457280e66aa03f7c5e0ff2fc595cb7b3e6ef012

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2015-10-12T00:28:00+02:00

corex: added corex.pkg_summary command

- dump pkg usage summary to syslog for a specific pid or process index

kamcmd corex.pkg_summary pid 12345
kamcmd corex.pkg_summary idx 1

- the dump is done first time that process is doing a runtime operation
  (e.g., receiving a sip packet)

---

Modified: modules/corex/corex_rpc.c

---

Diff:  https://github.com/kamailio/kamailio/commit/0457280e66aa03f7c5e0ff2fc595cb7b3e6ef012.diff
Patch: https://github.com/kamailio/kamailio/commit/0457280e66aa03f7c5e0ff2fc595cb7b3e6ef012.patch

---

diff --git a/modules/corex/corex_rpc.c b/modules/corex/corex_rpc.c
index f26965d..cc43b55 100644
--- a/modules/corex/corex_rpc.c
+++ b/modules/corex/corex_rpc.c
@@ -26,6 +26,9 @@
 
 #include "../../dprint.h"
 #include "../../ut.h"
+#include "../../pt.h"
+#include "../../cfg/cfg.h"
+#include "../../cfg/cfg_ctx.h"
 #include "../../socket_info.h"
 #include "../../name_alias.h"
 #include "../../mem/shm_mem.h"
@@ -174,6 +177,53 @@ static void corex_rpc_shm_summary(rpc_t* rpc, void* ctx)
 	shm_sums();
 }
 
+
+static const char* corex_rpc_pkg_summary_doc[2] = {
+	"Trigger shm summary dump to syslog",
+	0
+};
+
+
+static cfg_ctx_t	*_cfg_corex_ctx = NULL;
+
+/*
+ * RPC command to dump pkg summary to syslog
+ */
+static void corex_rpc_pkg_summary(rpc_t* rpc, void* c)
+{
+	str	group = str_init("core");
+	str var = str_init("mem_dump_pkg");
+	str sel = {0, 0};
+	int	i;
+
+	if (rpc->scan(c, "Sd", &sel, &i) < 2) {
+		rpc->fault(c, 400, "Selector and value not provided");
+		return;
+	}
+
+	if(sel.len!=3) {
+		rpc->fault(c, 500, "Unsupported selector");
+		return;
+	}
+
+	if(strncasecmp(sel.s, "idx", 3)==0) {
+		if(i<0 || i>=*process_count) {
+			rpc->fault(c, 500, "Index value out of range");
+			return;
+		}
+		i = pt[i].pid;
+	} else if(strncasecmp(sel.s, "pid", 3)!=0) {
+		rpc->fault(c, 500, "Unsupported selector type");
+		return;
+	}
+
+	if(cfg_set_now(_cfg_corex_ctx, &group, NULL, &var,
+				(void *)(long)i, CFG_VAR_INT)!=0) {
+		rpc->fault(c, 500, "Operation failed");
+		return;
+	}
+}
+
 rpc_export_t corex_rpc_cmds[] = {
 	{"corex.list_sockets", corex_rpc_list_sockets,
 		corex_rpc_list_sockets_doc, RET_ARRAY},
@@ -183,6 +233,8 @@ rpc_export_t corex_rpc_cmds[] = {
 		corex_rpc_shm_status_doc, 0},
 	{"corex.shm_summary", corex_rpc_shm_summary,
 		corex_rpc_shm_summary_doc, 0},
+	{"corex.pkg_summary", corex_rpc_pkg_summary,
+		corex_rpc_pkg_summary_doc, 0},
 	{0, 0, 0, 0}
 };
 
@@ -191,6 +243,11 @@ rpc_export_t corex_rpc_cmds[] = {
  */
 int corex_init_rpc(void)
 {
+	if (cfg_register_ctx(&_cfg_corex_ctx, NULL)) {
+		LOG(L_ERR, "failed to register cfg context\n");
+		return -1;
+	}
+
 	if (rpc_register_array(corex_rpc_cmds)!=0)
 	{
 		LM_ERR("failed to register RPC commands\n");




More information about the sr-dev mailing list