diff options
author | Matt Jordan <mjordan@digium.com> | 2015-11-18 10:07:09 -0600 |
---|---|---|
committer | Matt Jordan <mjordan@digium.com> | 2015-11-23 08:44:21 -0600 |
commit | 75d90a9951b6b679d475335698544540089750a1 (patch) | |
tree | d215fa862c0a8622b7171bdb661039b234f27bb3 /res/res_pjsip/pjsip_options.c | |
parent | 97d7b344de46236d153cdcc162371178c7b39854 (diff) |
res_pjsip/pjsip_options: Add StatsD statistics for PJSIP contacts
This patch adds the ability to send StatsD statistics related to the
state of PJSIP contacts. This includes:
* A GUAGE statistic measuring the count of contacts in a particular state.
This measures how many contacts are reachable, unreachable, etc.
* The RTT time for each contact, if those contacts are qualified. This
provides StatsD engines useful time-based data about each contact.
ASTERISK-25571
Change-Id: Ib8378d73afedfc622be0643b87c542557e0b332c
Diffstat (limited to 'res/res_pjsip/pjsip_options.c')
-rw-r--r-- | res/res_pjsip/pjsip_options.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c index d8e3779e5..c7579fdc1 100644 --- a/res/res_pjsip/pjsip_options.c +++ b/res/res_pjsip/pjsip_options.c @@ -29,6 +29,7 @@ #include "asterisk/cli.h" #include "asterisk/time.h" #include "asterisk/test.h" +#include "asterisk/statsd.h" #include "include/res_pjsip_private.h" #define DEFAULT_LANGUAGE "en" @@ -113,6 +114,9 @@ struct ast_sip_contact_status *ast_res_pjsip_find_or_create_contact_status(const return NULL; } + ast_statsd_log_string_va("PJSIP.contacts.states.%s", AST_STATSD_GUAGE, + "+1", 1.0, ast_sip_get_contact_status_label(status->status)); + return status; } @@ -143,6 +147,12 @@ static void update_contact_status(const struct ast_sip_contact *contact, update->last_status = status->status; update->status = value; + if (update->last_status != update->status) { + ast_statsd_log_string_va("PJSIP.contacts.states.%s", AST_STATSD_GUAGE, + "-1", 1.0, ast_sip_get_contact_status_label(update->last_status)); + ast_statsd_log_string_va("PJSIP.contacts.states.%s", AST_STATSD_GUAGE, + "+1", 1.0, ast_sip_get_contact_status_label(update->status)); + } /* if the contact is available calculate the rtt as the diff between the last start time and "now" */ @@ -151,10 +161,12 @@ static void update_contact_status(const struct ast_sip_contact *contact, update->rtt_start = ast_tv(0, 0); + ast_statsd_log_full_va("PJSIP.contacts.%s.rtt", AST_STATSD_TIMER, + update->rtt / 1000, 1.0, ast_sorcery_object_get_id(update)); ast_test_suite_event_notify("AOR_CONTACT_QUALIFY_RESULT", "Contact: %s\r\n" - "Status: %s\r\n" - "RTT: %" PRId64, + "Status: %s\r\n" + "RTT: %" PRId64, ast_sorcery_object_get_id(update), ast_sip_get_contact_status_label(update->status), update->rtt); |