Module: kamailio
Branch: master
Commit: 5c2b93f61b8970cd174c4d4055f7dbc1ddccaa12
URL:
https://github.com/kamailio/kamailio/commit/5c2b93f61b8970cd174c4d4055f7dbc…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2020-06-29T07:35:30+02:00
dlgs: dlgs.stats rpc command
---
Modified: src/modules/dlgs/dlgs_records.c
---
Diff:
https://github.com/kamailio/kamailio/commit/5c2b93f61b8970cd174c4d4055f7dbc…
Patch:
https://github.com/kamailio/kamailio/commit/5c2b93f61b8970cd174c4d4055f7dbc…
---
diff --git a/src/modules/dlgs/dlgs_records.c b/src/modules/dlgs/dlgs_records.c
index 6fcfa50945..e62bd2c97e 100644
--- a/src/modules/dlgs/dlgs_records.c
+++ b/src/modules/dlgs/dlgs_records.c
@@ -707,6 +707,57 @@ static const char *dlgs_rpc_stats_doc[2] = {
*/
static void dlgs_rpc_stats(rpc_t *rpc, void *ctx)
{
+ void *th;
+ void *ti;
+ dlgs_stats_t *sti;
+ dlgs_stats_t sta;
+ int i;
+
+ if(_dlgs_htb == NULL) {
+ return;
+ }
+
+ if (rpc->add(ctx, "{", &th) < 0) {
+ rpc->fault(ctx, 500, "Internal error creating rpc");
+ return;
+ }
+ i = 0;
+ do {
+ if(i==0) {
+ sti = &_dlgs_htb->fstats;
+ if(rpc->struct_add(th, "{", "final", &ti)<0) {
+ rpc->fault(ctx, 500, "Internal error creating final stats");
+ return;
+ }
+ } else {
+ memset(&sta, 0, sizeof(dlgs_stats_t));
+ for(i=0; i<_dlgs_htb->htsize; i++) {
+ sta.c_init += _dlgs_htb->slots[i].astats.c_init;
+ sta.c_progress += _dlgs_htb->slots[i].astats.c_progress;
+ sta.c_answered += _dlgs_htb->slots[i].astats.c_answered;
+ sta.c_confirmed += _dlgs_htb->slots[i].astats.c_confirmed;
+ sta.c_terminted += _dlgs_htb->slots[i].astats.c_terminted;
+ sta.c_notanswered += _dlgs_htb->slots[i].astats.c_notanswered;
+ }
+ sti = &sta;
+ if(rpc->struct_add(th, "{", "active", &ti)<0) {
+ rpc->fault(ctx, 500, "Internal error creating final stats");
+ return;
+ }
+ i = 1;
+ }
+ if(rpc->struct_add(ti, "uuuuuu",
+ "init", sti->c_init,
+ "progress", sti->c_progress,
+ "answered", sti->c_answered,
+ "confirmed", sti->c_confirmed,
+ "terminted", sti->c_terminted,
+ "notanswered", sti->c_notanswered)<0) {
+ rpc->fault(ctx, 500, "Internal error creating values");
+ return;
+ }
+ i++;
+ } while(i<2);
}
static const char *dlgs_rpc_list_doc[2] = {