Module: kamailio Branch: master Commit: e676498f4d0a46ae81e4e07e56ff64c97a075faf URL: https://github.com/kamailio/kamailio/commit/e676498f4d0a46ae81e4e07e56ff64c9...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: GitHub noreply@github.com Date: 2020-10-20T13:52:13+02:00
Merge pull request #2514 from gaaf/features/mqueue
mqueue: RPC features
---
Modified: src/modules/mqueue/doc/mqueue_admin.xml Modified: src/modules/mqueue/mqueue_api.c Modified: src/modules/mqueue/mqueue_api.h Modified: src/modules/mqueue/mqueue_mod.c
---
Diff: https://github.com/kamailio/kamailio/commit/e676498f4d0a46ae81e4e07e56ff64c9... Patch: https://github.com/kamailio/kamailio/commit/e676498f4d0a46ae81e4e07e56ff64c9...
---
diff --git a/src/modules/mqueue/doc/mqueue_admin.xml b/src/modules/mqueue/doc/mqueue_admin.xml index 5309098058..7d785ac90b 100644 --- a/src/modules/mqueue/doc/mqueue_admin.xml +++ b/src/modules/mqueue/doc/mqueue_admin.xml @@ -300,6 +300,24 @@ xlog("L_INFO", "Size of queue is: $var(q_size)\n"); ... &kamcmd; mqueue.fetch xyz ... +</programlisting> + </example> + </section> + + <section id="mqueue.r.get_sizes"> + <title>mqueue.get_sizes</title> + <para> + Get the size for all memory queues. + </para> + <para> + Parameters: none + </para> + <example> + <title><function>mqueue.get_sizes</function> usage</title> + <programlisting format="linespecific"> +... +&kamcmd; mqueue.get_sizes +... </programlisting> </example> </section> diff --git a/src/modules/mqueue/mqueue_api.c b/src/modules/mqueue/mqueue_api.c index 93204bba3c..4dd61c3e72 100644 --- a/src/modules/mqueue/mqueue_api.c +++ b/src/modules/mqueue/mqueue_api.c @@ -173,6 +173,9 @@ mq_head_t *mq_head_get(str *name) mq_head_t *mh = NULL;
mh = _mq_head_list; + if (!name) { + return mh; + } while(mh!=NULL) { if(name->len == mh->name.len diff --git a/src/modules/mqueue/mqueue_api.h b/src/modules/mqueue/mqueue_api.h index 843a7d7967..d60dfdf29a 100644 --- a/src/modules/mqueue/mqueue_api.h +++ b/src/modules/mqueue/mqueue_api.h @@ -77,6 +77,7 @@ int mq_head_add(str *name, int msize); int mq_head_fetch(str *name); void mq_pv_free(str *name); int mq_item_add(str *qname, str *key, str *val); +mq_head_t *mq_head_get(str *name);
int _mq_get_csize(str *); int mq_set_dbmode(str *, int dbmode); diff --git a/src/modules/mqueue/mqueue_mod.c b/src/modules/mqueue/mqueue_mod.c index 860014cca9..325c84b472 100644 --- a/src/modules/mqueue/mqueue_mod.c +++ b/src/modules/mqueue/mqueue_mod.c @@ -294,13 +294,13 @@ static void mqueue_rpc_get_size(rpc_t* rpc, void* ctx) int mqueue_sz = 0;
if (rpc->scan(ctx, "S", &mqueue_name) < 1) { - rpc->fault(ctx, 500, "No queue name"); + rpc->fault(ctx, 400, "No queue name"); return; }
if(mqueue_name.len <= 0 || mqueue_name.s == NULL) { LM_ERR("bad mqueue name\n"); - rpc->fault(ctx, 500, "Invalid queue name"); + rpc->fault(ctx, 400, "Invalid queue name"); return; }
@@ -308,7 +308,7 @@ static void mqueue_rpc_get_size(rpc_t* rpc, void* ctx)
if(mqueue_sz < 0) { LM_ERR("no such mqueue\n"); - rpc->fault(ctx, 500, "No such queue"); + rpc->fault(ctx, 404, "No such queue"); return; }
@@ -327,6 +327,34 @@ static const char* mqueue_rpc_get_size_doc[2] = { 0 };
+static void mqueue_rpc_get_sizes(rpc_t* rpc, void* ctx) +{ + mq_head_t* mh = mq_head_get(NULL); + void* vh; + int size; + + while(mh!=NULL) + { + if (rpc->add(ctx, "{", &vh) < 0) { + rpc->fault(ctx, 500, "Server error"); + return; + } + lock_get(&mh->lock); + size = mh->csize; + lock_release(&mh->lock); + rpc->struct_add(vh, "Sd", + "name", &mh->name, + "size", size + ); + mh = mh->next; + } +} + +static const char* mqueue_rpc_get_sizes_doc[2] = { + "Get sizes of all mqueues.", + 0 +}; + static void mqueue_rpc_fetch(rpc_t* rpc, void* ctx) { str mqueue_name; @@ -392,6 +420,7 @@ static const char* mqueue_rpc_fetch_doc[2] = {
rpc_export_t mqueue_rpc[] = { {"mqueue.get_size", mqueue_rpc_get_size, mqueue_rpc_get_size_doc, 0}, + {"mqueue.get_sizes", mqueue_rpc_get_sizes, mqueue_rpc_get_sizes_doc, RET_ARRAY}, {"mqueue.fetch", mqueue_rpc_fetch, mqueue_rpc_fetch_doc, 0}, {0, 0, 0, 0} };