diff --git a/CHANGES b/CHANGES index 886cd00d3db3cf52c70b2fa1f402323d2dc70b68..431218ffd183080eb783ec78d39971603fddf31b 100644 --- a/CHANGES +++ b/CHANGES @@ -79,6 +79,12 @@ res_pjproject * Added new pjproject.conf startup section "log_level' option to set the initial maximum PJPROJECT logging level. +res_pjsip_outbound_registration +------------------ + * Statsd no longer logs redundant status PJSIP.registrations.state changes + for internal state transitions that don't change the reported public status + state. + ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 14.1.0 to Asterisk 14.2.0 ------------ ------------------------------------------------------------------------------ diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c index 29701a13c66c816b869df61153da9f33a83f366d..d486ccd639d098a926876b8e4a7cf48331470000 100644 --- a/res/res_pjsip_outbound_registration.c +++ b/res/res_pjsip_outbound_registration.c @@ -627,15 +627,30 @@ static void schedule_registration(struct sip_outbound_registration_client_state static void update_client_state_status(struct sip_outbound_registration_client_state *client_state, enum sip_outbound_registration_status status) { + const char *status_old; + const char *status_new; + if (client_state->status == status) { + /* Status state did not change at all. */ + return; + } + + status_old = sip_outbound_registration_status_str(client_state->status); + status_new = sip_outbound_registration_status_str(status); + client_state->status = status; + + if (!strcmp(status_old, status_new)) { + /* + * The internal status state may have changed but the status + * state we tell the world did not change at all. + */ return; } ast_statsd_log_string_va("PJSIP.registrations.state.%s", AST_STATSD_GAUGE, "-1", 1.0, - sip_outbound_registration_status_str(client_state->status)); + status_old); ast_statsd_log_string_va("PJSIP.registrations.state.%s", AST_STATSD_GAUGE, "+1", 1.0, - sip_outbound_registration_status_str(status)); - client_state->status = status; + status_new); } /*! \brief Callback function for unregistering (potentially) and destroying state */