diff --git a/src/modules/mqueue/doc/mqueue_admin.xml b/src/modules/mqueue/doc/mqueue_admin.xml index 53090980581..7d785ac90bb 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 ... + + + + +
+ mqueue.get_sizes + + Get the size for all memory queues. + + + Parameters: none + + + <function>mqueue.get_sizes</function> usage + +... +&kamcmd; mqueue.get_sizes +...
diff --git a/src/modules/mqueue/mqueue_api.c b/src/modules/mqueue/mqueue_api.c index 93204bba3c7..4dd61c3e728 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 843a7d79671..d60dfdf29ab 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 e3b984484e8..325c84b4721 100644 --- a/src/modules/mqueue/mqueue_mod.c +++ b/src/modules/mqueue/mqueue_mod.c @@ -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} };