diff --git a/modules/tm/t_reply.c b/modules/tm/t_reply.c index f4e4dcdbf04..3b8e16b348c 100644 --- a/modules/tm/t_reply.c +++ b/modules/tm/t_reply.c @@ -554,8 +554,8 @@ static int _reply_light( struct cell *trans, char* buf, unsigned int len, /* t_update_timers_after_sending_reply( rb ); */ update_reply_stats( code ); trans->relayed_reply_branch=-2; - t_stats_replied_locally(); - t_stats_replied_total(); + t_stats_relayed_locally(); + t_stats_relayed_total(); if (lock) UNLOCK_REPLIES( trans ); /* do UAC cleanup procedures in case we generated @@ -1867,7 +1867,7 @@ enum rps relay_reply( struct cell *t, struct sip_msg *p_msg, int branch, } } update_reply_stats( relayed_code ); - t_stats_replied_total(); + t_stats_relayed_total(); if (!buf) { LOG(L_ERR, "ERROR: relay_reply: " "no mem for outbound reply buffer\n"); @@ -1890,7 +1890,7 @@ enum rps relay_reply( struct cell *t, struct sip_msg *p_msg, int branch, memcpy( uas_rb->buffer, buf, res_len ); if (relayed_msg==FAKED_REPLY) { /* to-tags for local replies */ update_local_tags(t, &bm, uas_rb->buffer, buf); - t_stats_replied_locally(); + t_stats_relayed_locally(); } /* update the status ... */ @@ -2041,7 +2041,7 @@ enum rps local_reply( struct cell *t, struct sip_msg *p_msg, int branch, winning_msg= branch==local_winner ? p_msg : t->uac[local_winner].reply; if (winning_msg==FAKED_REPLY) { - t_stats_replied_locally(); + t_stats_relayed_locally(); winning_code = branch==local_winner ? msg_status : t->uac[local_winner].last_received; } else { @@ -2049,7 +2049,7 @@ enum rps local_reply( struct cell *t, struct sip_msg *p_msg, int branch, } t->uas.status = winning_code; update_reply_stats( winning_code ); - t_stats_replied_total(); + t_stats_relayed_total(); if (unlikely(is_invite(t) && winning_msg!=FAKED_REPLY && winning_code>=200 && winning_code <300 && has_tran_tmcbs(t, TMCB_LOCAL_COMPLETED) )) { @@ -2143,6 +2143,9 @@ int reply_received( struct sip_msg *p_msg ) if ( (t==0)||(t==T_UNDEFINED)) goto trans_not_found; + /* if transaction found, increment the received_replies counter */ + t_stats_received_replies(); + if (unlikely(branch==T_BR_UNDEFINED)) BUG("invalid branch, please report to sr-dev@sip-router.org\n"); tm_ctx_set_branch_index(branch); diff --git a/modules/tm/t_stats.c b/modules/tm/t_stats.c index 8187568a3f0..28fe04e0997 100644 --- a/modules/tm/t_stats.c +++ b/modules/tm/t_stats.c @@ -93,8 +93,9 @@ void free_tm_stats() (res)->completed_5xx=(s1)->completed_5xx+(s2)->completed_5xx; \ (res)->completed_6xx=(s1)->completed_6xx+(s2)->completed_6xx; \ (res)->completed_2xx=(s1)->completed_2xx+(s2)->completed_2xx; \ - (res)->replied_locally=(s1)->replied_locally+(s2)->replied_locally; \ - (res)->replied_total=(s1)->replied_total+(s2)->replied_total; \ + (res)->received_replies=(s1)->received_replies+(s2)->received_replies; \ + (res)->relayed_locally=(s1)->relayed_locally+(s2)->relayed_locally; \ + (res)->relayed_total=(s1)->relayed_total+(s2)->relayed_total; \ (res)->deleted=(s1)->deleted+(s2)->deleted; \ }while(0) @@ -137,7 +138,9 @@ void tm_rpc_stats(rpc_t* rpc, void* c) (unsigned) waiting); rpc->struct_add(st, "d", "total", (unsigned) all.transactions); rpc->struct_add(st, "d", "total_local", (unsigned)all.client_transactions); - rpc->struct_add(st, "d", "replied_locally", (unsigned)all.replied_locally); + rpc->struct_add(st, "d", "received_replies", (unsigned)all.received_replies); + rpc->struct_add(st, "d", "relayed_locally", (unsigned)all.relayed_locally); + rpc->struct_add(st, "d", "relayed_total", (unsigned)all.relayed_total); rpc->struct_add(st, "ddddd", "6xx", (unsigned int)all.completed_6xx, "5xx", (unsigned int)all.completed_5xx, diff --git a/modules/tm/t_stats.h b/modules/tm/t_stats.h index dcb0be7660f..5be3c701d9c 100644 --- a/modules/tm/t_stats.h +++ b/modules/tm/t_stats.h @@ -43,8 +43,9 @@ struct t_proc_stats { /* number of transactions which completed with this status */ stat_counter completed_3xx, completed_4xx, completed_5xx, completed_6xx, completed_2xx; - stat_counter replied_locally; - stat_counter replied_total; + stat_counter received_replies; + stat_counter relayed_locally; + stat_counter relayed_total; stat_counter deleted; #ifdef TM_MORE_STATS /* number of created transactions */ @@ -121,15 +122,19 @@ inline static void update_reply_stats( int code ) { } } +inline void static t_stats_received_replies(void) +{ + tm_stats[process_no].s.received_replies++; +} -inline void static t_stats_replied_locally(void) +inline void static t_stats_relayed_locally(void) { - tm_stats[process_no].s.replied_locally++; + tm_stats[process_no].s.relayed_locally++; } -inline void static t_stats_replied_total(void) +inline void static t_stats_relayed_total(void) { - tm_stats[process_no].s.replied_total++; + tm_stats[process_no].s.relayed_total++; } diff --git a/modules/tmx/doc/tmx_admin.xml b/modules/tmx/doc/tmx_admin.xml index 65de5972ba2..705113f4fb1 100644 --- a/modules/tmx/doc/tmx_admin.xml +++ b/modules/tmx/doc/tmx_admin.xml @@ -626,72 +626,105 @@ event_route [tm:branch-failure:contact] { Exported statistics are listed in the next sections. All statistics except inuse_transactions can be reset. -
- received_replies - - Total number of total replies received by TM module. - -
-
- relayed_replies - - Total number of replies received and relayed by TM module. - -
-
- local_replies - - Total number of replies local generated by TM module. - -
+
UAS_transactions Total number of transactions created by received requests.
+
UAC_transactions Total number of transactions created by local generated requests.
+
2xx_transactions Total number of transactions completed with 2xx replies.
+
3xx_transactions Total number of transactions completed with 3xx replies.
+
4xx_transactions Total number of transactions completed with 4xx replies.
+
5xx_transactions Total number of transactions completed with 5xx replies.
+
6xx_transactions Total number of transactions completed with 6xx replies.
+
inuse_transactions Number of transactions existing in memory at current time.
+ +
+ active_transactions + + Number of ongoing transactions at current time. + +
+ +
+ received_replies + + Total number of replies received by TM module. + +
+ +
+ received_replies_absorbed + + Total number of replies received and not relayed by TM module. + +
+ +
+ tmx:relayed_locally + + Total number of replies locally generated and relayed by TM module. + +
+ +
+ relayed_received + + Total number of replies received and relayed by TM module. + +
+ +
+ relayed_total + + Total number of replies relayed by TM module. + +
+ diff --git a/modules/tmx/tmx_mod.c b/modules/tmx/tmx_mod.c index 10e509d0520..38a73ff2d0b 100644 --- a/modules/tmx/tmx_mod.c +++ b/modules/tmx/tmx_mod.c @@ -108,8 +108,10 @@ unsigned long tmx_stats_trans_6xx(void); unsigned long tmx_stats_trans_inuse(void); unsigned long tmx_stats_trans_active(void); unsigned long tmx_stats_rcv_rpls(void); -unsigned long tmx_stats_rld_rpls(void); -unsigned long tmx_stats_loc_rpls(void); +unsigned long tmx_stats_abs_rpls(void); +unsigned long tmx_stats_rld_rcv_rpls(void); +unsigned long tmx_stats_rld_loc_rpls(void); +unsigned long tmx_stats_rld_tot_rpls(void); static stat_export_t mod_stats[] = { {"UAS_transactions" , STAT_IS_FUNC, (stat_var**)tmx_stats_uas_trans }, @@ -122,8 +124,10 @@ static stat_export_t mod_stats[] = { {"inuse_transactions" , STAT_IS_FUNC, (stat_var**)tmx_stats_trans_inuse }, {"active_transactions" , STAT_IS_FUNC, (stat_var**)tmx_stats_trans_active}, {"received_replies" , STAT_IS_FUNC, (stat_var**)tmx_stats_rcv_rpls }, - {"relayed_replies" , STAT_IS_FUNC, (stat_var**)tmx_stats_rld_rpls }, - {"local_replies" , STAT_IS_FUNC, (stat_var**)tmx_stats_loc_rpls }, + {"received_replies_absorbed", STAT_IS_FUNC, (stat_var**)tmx_stats_abs_rpls }, + {"relayed_locally" , STAT_IS_FUNC, (stat_var**)tmx_stats_rld_loc_rpls}, + {"relayed_received" , STAT_IS_FUNC, (stat_var**)tmx_stats_rld_rcv_rpls}, + {"relayed_total" , STAT_IS_FUNC, (stat_var**)tmx_stats_rld_tot_rpls}, {0,0,0} }; #endif @@ -810,23 +814,31 @@ unsigned long tmx_stats_trans_active(void) unsigned long tmx_stats_rcv_rpls(void) { tmx_stats_update(); - return _tmx_stats_all.completed_6xx - + _tmx_stats_all.completed_5xx - + _tmx_stats_all.completed_4xx - + _tmx_stats_all.completed_3xx - + _tmx_stats_all.completed_2xx; + return _tmx_stats_all.received_replies; } -unsigned long tmx_stats_rld_rpls(void) +unsigned long tmx_stats_abs_rpls(void) { tmx_stats_update(); - return _tmx_stats_all.replied_total - _tmx_stats_all.replied_locally; + return _tmx_stats_all.received_replies - tmx_stats_rld_rcv_rpls(); } -unsigned long tmx_stats_loc_rpls(void) +unsigned long tmx_stats_rld_loc_rpls(void) { tmx_stats_update(); - return _tmx_stats_all.replied_locally; + return _tmx_stats_all.relayed_locally; +} + +unsigned long tmx_stats_rld_tot_rpls(void) +{ + tmx_stats_update(); + return _tmx_stats_all.relayed_total; +} + +unsigned long tmx_stats_rld_rcv_rpls(void) +{ + tmx_stats_update(); + return _tmx_stats_all.relayed_total - _tmx_stats_all.relayed_locally; } #endif