aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-02-14 18:39:51 +0000
committerqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-02-14 18:39:51 +0000
commit339bee10d3ae59878edabb7146a727a27f81324f (patch)
treea827a9c972a63702838b0e0aa2e3bda5bf9cf93a
parentdb260b55fd55f402bd0a031ec3a116e78d94b3b6 (diff)
Add periodic jitter stats to CLI and manager.
(closes issue #8188) Reported by: stevedavies Patches: jblogging-trunk.patch uploaded by stevedavies jblogging-trunk_wmgrevent.patch uploaded by johann8384 updated_jbloggin-trunk_mgrevent.patch uploaded by johann8384 (license 190) (with additional changes by me) Tested by: stevedavies, johann8384 git-svn-id: http://svn.digium.com/svn/asterisk/trunk@103677 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_iax2.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index c82c88fee..6418d0d46 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -7300,6 +7300,61 @@ static void save_osptoken(struct iax_frame *fr, struct iax_ies *ies)
ast_string_field_set(iaxs[fr->callno], osptoken, full_osptoken);
}
+static void log_jitterstats(unsigned short callno)
+{
+ int localjitter = -1, localdelay = 0, locallost = -1, locallosspct = -1, localdropped = 0, localooo = -1, localpackets = -1;
+ jb_info jbinfo;
+
+ ast_mutex_lock(&iaxsl[callno]);
+ if (iaxs[callno] && iaxs[callno]->owner && iaxs[callno]->owner->name) {
+ if(ast_test_flag(iaxs[callno], IAX_USEJITTERBUF)) {
+ jb_getinfo(iaxs[callno]->jb, &jbinfo);
+ localjitter = jbinfo.jitter;
+ localdelay = jbinfo.current - jbinfo.min;
+ locallost = jbinfo.frames_lost;
+ locallosspct = jbinfo.losspct/1000;
+ localdropped = jbinfo.frames_dropped;
+ localooo = jbinfo.frames_ooo;
+ localpackets = jbinfo.frames_in;
+ }
+ ast_verb(3, "JB STATS:%s ping=%d ljitterms=%d ljbdelayms=%d ltotlost=%d lrecentlosspct=%d ldropped=%d looo=%d lrecvd=%d rjitterms=%d rjbdelayms=%d rtotlost=%d rrecentlosspct=%d rdropped=%d rooo=%d rrecvd=%d\n",
+ iaxs[callno]->owner->name,
+ iaxs[callno]->pingtime,
+ localjitter,
+ localdelay,
+ locallost,
+ locallosspct,
+ localdropped,
+ localooo,
+ localpackets,
+ iaxs[callno]->remote_rr.jitter,
+ iaxs[callno]->remote_rr.delay,
+ iaxs[callno]->remote_rr.losscnt,
+ iaxs[callno]->remote_rr.losspct/1000,
+ iaxs[callno]->remote_rr.dropped,
+ iaxs[callno]->remote_rr.ooo,
+ iaxs[callno]->remote_rr.packets);
+ manager_event(EVENT_FLAG_REPORTING, "JB Stats", "Owner: %s\r\nPing: %d\r\nLocalJitter: %d\r\nLocalJBDelay: %d\t\nLocalTotalLost: %d LocalLossPercent: %d\r\nLocalDropped: %d\r\nLocalooo: %d\r\nLocalReceived: %d\r\nRemoteJitter: %d\r\nRemoteJBDelay: %d\r\nRemoteTotalLost: %d\r\nRemoteLossPercent: %d\r\nRemoteDropped: %d\r\nRemoteooo: %d\r\nRemoteReceived: %d\r\n",
+ iaxs[callno]->owner->name,
+ iaxs[callno]->pingtime,
+ localjitter,
+ localdelay,
+ locallost,
+ locallosspct,
+ localdropped,
+ localooo,
+ localpackets,
+ iaxs[callno]->remote_rr.jitter,
+ iaxs[callno]->remote_rr.delay,
+ iaxs[callno]->remote_rr.losscnt,
+ iaxs[callno]->remote_rr.losspct/1000,
+ iaxs[callno]->remote_rr.dropped,
+ iaxs[callno]->remote_rr.ooo,
+ iaxs[callno]->remote_rr.packets);
+ }
+ ast_mutex_unlock(&iaxsl[callno]);
+}
+
static int socket_process(struct iax2_thread *thread);
/*!
@@ -8464,6 +8519,9 @@ retryowner2:
/* save RR info */
save_rr(fr, &ies);
+ /* Good time to write jb stats for this call */
+ log_jitterstats(fr->callno);
+
if (iaxs[fr->callno]->peerpoke) {
peer = iaxs[fr->callno]->peerpoke;
if ((peer->lastms < 0) || (peer->historicms > peer->maxms)) {