Skip to content

Commit e09056b

Browse files
committed
[tm] added statistics to report retransmissions and timeouts
retransmission_req_T1_1 retransmission_req_T1_2 retransmission_req_T1_3 retransmission_req_T2 retransmission_rpl_T2 timeout_finalresponse timeout_finalresponse_inv
1 parent 5fc57e9 commit e09056b

File tree

4 files changed

+91
-0
lines changed

4 files changed

+91
-0
lines changed

modules/tm/doc/tm_admin.xml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2180,6 +2180,59 @@ if (is_method("ACK|CANCEL") && !t_check_trans()) {
21802180
Number of transactions existing in memory at current time.
21812181
</para>
21822182
</section>
2183+
<section id="stat_retransmission_req_T1_1" xreflabel="retransmission_req_T1_1">
2184+
<title>retransmission_req_T1_1</title>
2185+
<para>
2186+
Number of request retransmissions due to T1 1 timer,
2187+
the first retransmission interval (typical 500ms).
2188+
</para>
2189+
</section>
2190+
<section id="stat_retransmission_req_T1_2" xreflabel="retransmission_req_T1_2">
2191+
<title>retransmission_req_T1_2</title>
2192+
<para>
2193+
Number of request retransmissions due to T1 2 timer,
2194+
the second retransmission interval (typical 1s).
2195+
</para>
2196+
</section>
2197+
<section id="stat_retransmission_req_T1_3" xreflabel="retransmission_req_T1_3">
2198+
<title>retransmission_req_T1_3</title>
2199+
<para>
2200+
Number of request retransmissions due to T1 3 timer,
2201+
the third retransmission interval (typical 2s).
2202+
</para>
2203+
</section>
2204+
<section id="stat_retransmission_req_T2" xreflabel="retransmission_req_T2">
2205+
<title>retransmission_req_T2</title>
2206+
<para>
2207+
Number of request retransmissions due to T2 ,
2208+
the final retransmission interval (typical 4s).
2209+
</para>
2210+
</section>
2211+
<section id="stat_retransmission_rpl_T2" xreflabel="retransmission_rpl_T2">
2212+
<title>retransmission_rpl_T2</title>
2213+
<para>
2214+
Number of reply retransmissions, all done with the same
2215+
retransmission interval T2, typical 4s.
2216+
</para>
2217+
</section>
2218+
<section id="stat_timeout_finalresponse" xreflabel="timeout_finalresponse">
2219+
<title>timeout_finalresponse</title>
2220+
<para>
2221+
Number of transactional timeouts without receiving any kind of reply (not
2222+
even provisional) from the B side. Such timeouts indicate a
2223+
communication / reachability issue. Note: a single transaction may count
2224+
multiple such timeouts due forking.
2225+
</para>
2226+
</section>
2227+
<section id="stat_timeout_finalresponse_inc" xreflabel="timeout_finalresponse">
2228+
<title>timeout_finalresponse</title>
2229+
<para>
2230+
Number of transactional INVITE timeouts without receiving a FINAL reply
2231+
(provisional may be received) from the B side. Such timeouts indicate a
2232+
"not answer" event and it is not a signalling issue.
2233+
Note: a single transaction may count multiple such timeouts due forking.
2234+
</para>
2235+
</section>
21832236
</section>
21842237

21852238
</chapter>

modules/tm/t_stats.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ extern stat_var *tm_trans_5xx;
4646
extern stat_var *tm_trans_6xx;
4747
extern stat_var *tm_trans_inuse;
4848

49+
extern stat_var *tm_retran_req_T11;
50+
extern stat_var *tm_retran_req_T12;
51+
extern stat_var *tm_retran_req_T13;
52+
extern stat_var *tm_retran_req_T2;
53+
extern stat_var *tm_retran_rpl_T2;
54+
extern stat_var *tm_timeout_fr;
55+
extern stat_var *tm_timeout_fr_inv;
56+
4957
extern stat_var *tm_cluster_reply_tx;
5058
extern stat_var *tm_cluster_request_tx;
5159
extern stat_var *tm_cluster_cancel_tx;

modules/tm/timer.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
#include "t_funcs.h"
112112
#include "t_reply.h"
113113
#include "t_cancel.h"
114+
#include "t_stats.h"
114115

115116

116117
static struct timer_table *timertable=0;
@@ -303,12 +304,20 @@ inline static void retransmission_handler( struct timer_link *retr_tl )
303304
}
304305

305306
set_t(T_UNDEFINED);
307+
switch(r_buf->retr_list) {
308+
case RT_T1_TO_1: update_stat( tm_retran_req_T11, 1); break;
309+
case RT_T1_TO_2: update_stat( tm_retran_req_T12, 1); break;
310+
case RT_T1_TO_3: update_stat( tm_retran_req_T13, 1); break;
311+
case RT_T2: update_stat( tm_retran_req_T2, 1);break;
312+
default:;
313+
}
306314
} else {
307315
LM_DBG("retransmission_handler : reply resending "
308316
"(t=%p, %.9s ... )\n", r_buf->my_T, r_buf->buffer.s);
309317
set_t(r_buf->my_T);
310318
t_retransmit_reply(r_buf->my_T);
311319
set_t(T_UNDEFINED);
320+
update_stat( tm_retran_rpl_T2, 1);
312321
}
313322

314323
id = r_buf->retr_list;
@@ -398,6 +407,12 @@ inline static void final_response_handler( struct timer_link *fr_tl )
398407
cancel_uacs(t, cancel_bitmap );
399408
set_cancel_extra_hdrs( NULL, 0);
400409
}
410+
411+
switch(r_buf->retr_list) {
412+
case FR_TIMER_LIST: update_stat( tm_timeout_fr, 1); break;
413+
case FR_INV_TIMER_LIST: update_stat( tm_timeout_fr_inv, 1); break;
414+
default:;
415+
}
401416
/* lock reply processing to determine how to proceed reliably */
402417
LOCK_REPLIES( t );
403418
LM_DBG("Cancel sent out, sending 408 (%p)\n", t);

modules/tm/tm.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,14 @@ stat_var *tm_trans_5xx;
175175
stat_var *tm_trans_6xx;
176176
stat_var *tm_trans_inuse;
177177

178+
stat_var *tm_retran_req_T11;
179+
stat_var *tm_retran_req_T12;
180+
stat_var *tm_retran_req_T13;
181+
stat_var *tm_retran_req_T2;
182+
stat_var *tm_retran_rpl_T2;
183+
stat_var *tm_timeout_fr;
184+
stat_var *tm_timeout_fr_inv;
185+
178186
stat_var *tm_cluster_reply_tx;
179187
stat_var *tm_cluster_request_tx;
180188
stat_var *tm_cluster_cancel_tx;
@@ -343,6 +351,13 @@ static const stat_export_t mod_stats[] = {
343351
{"cluster_reply_recv" , 0, &tm_cluster_reply_rx },
344352
{"cluster_request_recv" ,0, &tm_cluster_request_rx },
345353
{"cluster_cancel_recv" , 0, &tm_cluster_cancel_rx },
354+
{"retransmission_req_T1_1" , 0, &tm_retran_req_T11 },
355+
{"retransmission_req_T1_2" , 0, &tm_retran_req_T12 },
356+
{"retransmission_req_T1_3" , 0, &tm_retran_req_T13 },
357+
{"retransmission_req_T2" , 0, &tm_retran_req_T2 },
358+
{"retransmission_rpl_T2" , 0, &tm_retran_rpl_T2 },
359+
{"timeout_finalresponse" , 0, &tm_timeout_fr },
360+
{"timeout_finalresponse_inv" , 0, &tm_timeout_fr_inv },
346361
{0,0,0}
347362
};
348363

0 commit comments

Comments
 (0)