Skip to content

Commit

Permalink
kex: removed mi commands
Browse files Browse the repository at this point in the history
  • Loading branch information
miconda committed Jan 2, 2017
1 parent 07f2b28 commit af537b2
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 780 deletions.
1 change: 0 additions & 1 deletion src/modules/kex/Makefile
Expand Up @@ -12,6 +12,5 @@ LIBS=
DEFS+=-DKAMAILIO_MOD_INTERFACE

SERLIBPATH=../../lib
SER_LIBS+=$(SERLIBPATH)/kmi/kmi
SER_LIBS+=$(SERLIBPATH)/srutils/srutils
include ../../Makefile.modules
289 changes: 8 additions & 281 deletions src/modules/kex/core_stats.c
Expand Up @@ -29,7 +29,6 @@
#include <string.h>

#include "../../core/counters.h"
#include "../../lib/kmi/mi.h"
#include "../../core/events.h"
#include "../../core/dprint.h"
#include "../../core/timer.h"
Expand Down Expand Up @@ -142,30 +141,9 @@ stat_export_t shm_stats[] = {
{0,0,0}
};

static struct mi_root *mi_get_stats(struct mi_root *cmd, void *param);
static struct mi_root *mi_reset_stats(struct mi_root *cmd, void *param);
static struct mi_root *mi_clear_stats(struct mi_root *cmd, void *param);

static mi_export_t mi_stat_cmds[] = {
{ "get_statistics", mi_get_stats, 0 , 0, 0 },
{ "reset_statistics", mi_reset_stats, 0 , 0, 0 },
{ "clear_statistics", mi_clear_stats, 0 , 0, 0 },
{ 0, 0, 0, 0, 0}
};

int stats_proc_stats_init_rpc(void);


int register_mi_stats(void)
{
/* register MI commands */
if (register_mi_mod("core", mi_stat_cmds)<0) {
LM_ERR("unable to register MI cmds\n");
return -1;
}
return 0;
}

static int km_cb_req_stats(struct sip_msg *msg,
unsigned int flags, void *param)
{
Expand Down Expand Up @@ -628,304 +606,53 @@ int stats_proc_stats_init_rpc(void)
return 0;
}

/***************************** MI STUFF ********************************/

inline static int mi_add_stat(struct mi_node *rpl, stat_var *stat)
{
struct mi_node *node;

if (stats_support()==0) return -1;

node = addf_mi_node_child(rpl, 0, 0, 0, "%s:%s = %lu",
ZSW(get_stat_module(stat)),
ZSW(get_stat_name(stat)),
get_stat_val(stat) );

if (node==0)
return -1;
return 0;
}



/* callback for counter_iterate_grp_vars. */
static void mi_add_grp_vars_cbk(void* r, str* g, str* n, counter_handle_t h)
{
struct mi_node *rpl;

rpl = r;
addf_mi_node_child(rpl, 0, 0, 0, "%.*s:%.*s = %lu",
g->len, g->s, n->len, n->s, counter_get_val(h));
}


/* callback for counter_iterate_grp_names */
static void mi_add_all_grps_cbk(void* p, str* g)
{
counter_iterate_grp_vars(g->s, mi_add_grp_vars_cbk, p);
}

static struct mi_root *mi_get_stats(struct mi_root *cmd, void *param)
{
struct mi_root *rpl_tree;
struct mi_node *rpl;
struct mi_node *arg;
stat_var *stat;
str val;


if(stats_support()==0)
return init_mi_tree( 404, "Statistics Not Found", 20);

if (cmd->node.kids==NULL)
return init_mi_tree( 400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN);

rpl_tree = init_mi_tree( 200, MI_OK_S, MI_OK_LEN);
if (rpl_tree==0)
return 0;
rpl = &rpl_tree->node;

for( arg=cmd->node.kids ; arg ; arg=arg->next) {
if (arg->value.len==0)
continue;

val = arg->value;

if ( val.len==3 && memcmp(val.s,"all",3)==0) {
/* add all statistic variables */
/* use direct counters access for that */
counter_iterate_grp_names(mi_add_all_grps_cbk, rpl);
} else if ( val.len>1 && val.s[val.len-1]==':') {
/* add module statistics */
val.len--;
val.s[val.len]=0; /* zero term. */
/* use direct counters access for that */
counter_iterate_grp_vars(val.s, mi_add_grp_vars_cbk, rpl);
val.s[val.len]=':' /* restore */;
} else {
/* add only one statistic */
stat = get_stat( &val );
if (stat==0)
continue;
if (mi_add_stat(rpl,stat)!=0)
goto error;
}
}

if (rpl->kids==0) {
free_mi_tree(rpl_tree);
return init_mi_tree( 404, "Statistics Not Found", 20);
}

return rpl_tree;
error:
free_mi_tree(rpl_tree);
return 0;
}



static struct mi_root *mi_reset_stats(struct mi_root *cmd, void *param)
{
struct mi_root *rpl_tree;
struct mi_node *arg;
stat_var *stat;
int found;

if (cmd->node.kids==NULL)
return init_mi_tree( 400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN);

rpl_tree = init_mi_tree( 200, MI_OK_S, MI_OK_LEN);
if (rpl_tree==0)
return 0;
found = 0;

for( arg=cmd->node.kids ; arg ; arg=arg->next) {
if (arg->value.len==0)
continue;

stat = get_stat( &arg->value );
if (stat==0)
continue;

reset_stat( stat );
found = 1;
}

if (!found) {
free_mi_tree(rpl_tree);
return init_mi_tree( 404, "Statistics Not Found", 20);
}

return rpl_tree;
}


inline static int mi_reset_and_add_stat(struct mi_node *rpl, stat_var *stat)
{
struct mi_node *node;
long old_val, new_val;

if (stats_support()==0) return -1;

old_val=get_stat_val(stat);
reset_stat(stat);
new_val=get_stat_val(stat);

if (old_val==new_val)
{
node = addf_mi_node_child(rpl, 0, 0, 0, "%s:%s = %lu",
ZSW(get_stat_module(stat)),
ZSW(get_stat_name(stat)),
new_val);
} else {
node = addf_mi_node_child(rpl, 0, 0, 0, "%s:%s = %lu (%lu)",
ZSW(get_stat_module(stat)),
ZSW(get_stat_name(stat)),
new_val, old_val );
}

if (node==0)
return -1;
return 0;
}


/* callback for counter_iterate_grp_vars to reset counters */
static void mi_add_grp_vars_cbk2(void* r, str* g, str* n, counter_handle_t h)
{
struct mi_node *rpl;
counter_val_t old_val, new_val;

rpl = r;
old_val = counter_get_val(h);
counter_reset(h);
new_val = counter_get_val(h);

if (old_val==new_val)
{
addf_mi_node_child(rpl, 0, 0, 0, "%.*s:%.*s = %lu",
g->len, g->s, n->len, n->s, new_val);
} else {
addf_mi_node_child(rpl, 0, 0, 0, "%.*s:%.*s = %lu (%lu)",
g->len, g->s, n->len, n->s, new_val, old_val);
}
}


/* callback for counter_iterate_grp_names to reset counters */
static void mi_add_all_grps_cbk2(void* p, str* g)
{
counter_iterate_grp_vars(g->s, mi_add_grp_vars_cbk2, p);
}


static struct mi_root *mi_clear_stats(struct mi_root *cmd, void *param)
{
struct mi_root *rpl_tree;
struct mi_node *rpl;
struct mi_node *arg;
stat_var *stat;
str val;

if(stats_support()==0)
return init_mi_tree( 404, "Statistics Not Found", 20);

if (cmd->node.kids==NULL)
return init_mi_tree( 400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN);

rpl_tree = init_mi_tree( 200, MI_OK_S, MI_OK_LEN);
if (rpl_tree==0)
return 0;
rpl = &rpl_tree->node;

for( arg=cmd->node.kids ; arg ; arg=arg->next)
{
if (arg->value.len==0)
continue;

val = arg->value;

if ( val.len==3 && memcmp(val.s,"all",3)==0) {
/* add all statistic variables */
/* use direct counters access for that */
counter_iterate_grp_names(mi_add_all_grps_cbk2, rpl);
} else if ( val.len>1 && val.s[val.len-1]==':') {
/* add module statistics */
val.len--;
val.s[val.len]=0; /* zero term. */
/* use direct counters access for that */
counter_iterate_grp_vars(val.s, mi_add_grp_vars_cbk2, rpl);
val.s[val.len]=':' /* restore */;
} else {
/* reset & return only one statistic */
stat = get_stat( &val );

if (stat==0)
continue;
if (mi_reset_and_add_stat(rpl,stat)!=0)
goto error;
}
}

if (rpl->kids==0) {
free_mi_tree(rpl_tree);
return init_mi_tree( 404, "Statistics Not Found", 20);
}

return rpl_tree;
error:
free_mi_tree(rpl_tree);
return 0;
}

/*** shm stats ***/

static struct mem_info _stats_shm_mi;
static struct mem_info _stats_shm_rpc;
static ticks_t _stats_shm_tm = 0;
void stats_shm_update(void)
{
ticks_t t;
t = get_ticks();
if(t!=_stats_shm_tm) {
shm_info(&_stats_shm_mi);
shm_info(&_stats_shm_rpc);
_stats_shm_tm = t;
}
}
unsigned long shm_stats_get_size(void)
{
stats_shm_update();
return _stats_shm_mi.total_size;
return _stats_shm_rpc.total_size;
}

unsigned long shm_stats_get_used(void)
{
stats_shm_update();
return _stats_shm_mi.used;
return _stats_shm_rpc.used;
}

unsigned long shm_stats_get_rused(void)
{
stats_shm_update();
return _stats_shm_mi.real_used;
return _stats_shm_rpc.real_used;
}

unsigned long shm_stats_get_mused(void)
{
stats_shm_update();
return _stats_shm_mi.max_used;
return _stats_shm_rpc.max_used;
}

unsigned long shm_stats_get_free(void)
{
stats_shm_update();
return _stats_shm_mi.free;
return _stats_shm_rpc.free;
}

unsigned long shm_stats_get_frags(void)
{
stats_shm_update();
return _stats_shm_mi.total_frags;
return _stats_shm_rpc.total_frags;
}

#endif
1 change: 0 additions & 1 deletion src/modules/kex/core_stats.h
Expand Up @@ -97,7 +97,6 @@ extern stat_var* unsupported_methods;
/*! \brief Set in get_hdr_field(). */
extern stat_var* bad_msg_hdr;

int register_mi_stats(void);
int register_core_stats(void);

#endif /*STATISTICS*/
Expand Down

0 comments on commit af537b2

Please sign in to comment.