Skip to content

STATISTICS module

The Statistics module is a wrapper over the internal statistics manager, allowing the script writer to dynamically define and use of statistic variables.

By bringing the statistics support into the script, it takes advantage of the script flexibility in defining logics, making possible implementation of any kind of statistic scenario.

Starting with OpenSIPS 2.3, statistics may be grouped by prefixing their names with the name of the desired group, along with a colon separator (e.g. $stat(method:invite) or update_stat(“packets:$var(ptype)”, “+1”)). In order for this to work, the groups must be defined prior to OpenSIPS startup using the stat groups module parameter.

The module allows easy iteration over the statistics of a group using the stat iter init and stat iter next functions.

By default, all statistics belong to the “dynamic” group.

The following modules must be loaded before this module:

  • No dependencies on other OpenSIPS modules.

The following libraries or applications must be installed before running OpenSIPS with this module loaded:

  • None.

Name of a new statistic variable. The name may be followed by additional flag which describe the variable behavior:

  • no_reset : variable cannot be reset.
variable example
modparam("statistics", "variable", "register_counter")
modparam("statistics", "variable", "active_calls/no_reset")

A comma-separated values string, specifying the statistic groups that may be used throughout the OpenSIPS script. Groups cannot contain leading or trailing whitespace characters.

setting the stat_groups parameter
modparam("statistics", "stat_groups", "method, packet, response")

Updates the value of the statistic variable with the new value.

Meaning of the parameters is as follows:

  • variable (string) - variable to be updated;
  • value (int) - value to update with; it may be also negative.

This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, FAILURE_ROUTE and ONREPLY_ROUTE.

update_stat usage
...
update_stat("register_counter", 1);
...
$var(a_calls) = "active_calls";
update_stat($var(a_calls), -1);
...

Resets to zero the value of the statistic variable.

Meaning of the parameters is as follows:

  • variable (string) - variable to be reset-ed

This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, FAILURE_ROUTE and ONREPLY_ROUTE.

reset_stat usage
...
reset_stat("register_counter");
...
$var(reg_counter) = "register_counter";
update_stat($var(reg_counter));
...

Re-initializes “iter” in order to begin iterating through all statistics belonging to the given “group”.

Meaning of the parameters is as follows:

  • group (string)
  • iter (string) - internally matched to a corresponding iterator

This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, FAILURE_ROUTE and ONREPLY_ROUTE.

stat_iter_init usage
...
stat_iter_init("packet", "iter");
...

Attempts to fetch the current statistic to which “iter” points. If successful, the relevant data will be written to “name” and “val”, while also advancing “iter”. Returns negative when reaching the end of iteration.

Meaning of the parameters is as follows:

  • name (var)
  • val (var)
  • iter (string) - internally matched to a corresponding iterator

This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, FAILURE_ROUTE and ONREPLY_ROUTE.

stat_iter_next usage
...
# periodically clear packet-related data
timer_route [clear_packet_stats, 7200] {
stat_iter_init("packet", "iter");
while (stat_iter_next($var(stat), $var(val), "iter"))
reset_stat("packet:$var(stat)");
}
...

Allows “get” or “reset” operations on the given statistics.

The name of a statistic may be optionally prefixed with a searching group, along with a colon separator.

If a searching group is not provided, the statistic is first searched for in the core groups. If not found, search continues with the “dynamic” group which, by default, holds all non-explicitly grouped statistics which are not exported by the OpenSIPS core.

$stat usage
...
xlog("SHM used size = $stat(used_size), no_invites = $stat(method:invite)\n");
...
$stat(err_requests) = 0;
...

Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)

#NameDevScoreCommitsLines++Lines—
1.Bogdan-Andrei Iancu (@bogdan-iancu)34201062252
2.Liviu Chircu (@liviuchircu)2517534178
3.Razvan Crainea (@razvancrainea)12101913
4.Daniel-Constantin Mierla (@miconda)1192218
5.Vlad Patrascu (@rvlad-patrascu)94115219
6.Stefan Darius (@dariusstefan)7328338
7.Vlad Paiu (@vladpaiu)5215613
8.Anca Vamanu421416
9.Henning Westerholt (@henningw)4244
10.Ionut Ionita (@ionutrazvanionita)31171

All remaining contributors: Ovidiu Sas (@ovidiusas), Konstantin Bokarius, Peter Lemenkov (@lemenkov), Julián Moreno Patiño, Edson Gellert Schubert.

(1) DevScore = author_commits + author_lines_added / (project_lines_added / project_commits) + author_lines_deleted / (project_lines_deleted / project_commits)

(2) including any documentation-related commits, excluding merge commits

(3) ignoring whitespace edits, renamed files and auto-generated files

#NameCommit Activity
1.Stefan Darius (@dariusstefan)Jun 2026 - Jul 2026
2.Razvan Crainea (@razvancrainea)Feb 2012 - Jun 2026
3.Liviu Chircu (@liviuchircu)Mar 2014 - Jun 2020
4.Vlad Patrascu (@rvlad-patrascu)May 2017 - May 2019
5.Bogdan-Andrei Iancu (@bogdan-iancu)Mar 2006 - Apr 2019
6.Peter Lemenkov (@lemenkov)Jun 2018 - Jun 2018
7.Ionut Ionita (@ionutrazvanionita)Apr 2017 - Apr 2017
8.Julián Moreno PatiñoFeb 2016 - Feb 2016
9.Vlad Paiu (@vladpaiu)Jul 2010 - Feb 2011
10.Anca VamanuOct 2007 - Sep 2009

All remaining contributors: Ovidiu Sas (@ovidiusas), Daniel-Constantin Mierla (@miconda), Konstantin Bokarius, Edson Gellert Schubert, Henning Westerholt (@henningw).

(1) including any documentation-related commits, excluding merge commits

Last edited by: Razvan Crainea (@razvancrainea), Liviu Chircu (@liviuchircu), Vlad Patrascu (@rvlad-patrascu), Peter Lemenkov (@lemenkov), Bogdan-Andrei Iancu (@bogdan-iancu), Vlad Paiu (@vladpaiu), Ovidiu Sas (@ovidiusas), Daniel-Constantin Mierla (@miconda), Konstantin Bokarius, Edson Gellert Schubert.

All documentation files (i.e. .md extension) are licensed under the Creative Common License 4.0