Hi everybody,
A new feature is present on the development version of openser - Global Statistics Management support: the core includes a Statistics Manager which roll is to collect statistics variables from all over openser and to offer management support (to create and operate them); it also provides a single, centralized point of access to allow external apps or internal modules to get any statistics.
How it works? the core and the module exports different statistics variables (via the module interface). The Statistics Manager (SM) offers support for auto-initialization, for updating ans resetting variables. The statistics variables are kept into shared mem to be accessible to all processes. Synchronization support is offered by SM.
Statistic variable capabilities ------------------------------- be defined with: NO_RESET (it cannot be reset -ex. used mem, register subscribers, etc) NO_SYNC (it will not be synchronized during ops; by their nature, some variables are already synchronized) be updated (added with new val) be reset (set to zero if allowed).
Accessing the statistics -------------------------
The SM export two FIFO functions for offering access to the statistics: "get_statistics all" - gets all statistics "get_statistics stat_name" - gets the value of the stat_name variable "get_statistics module_name:" - get all statistics exported by module "module name"; to get statistics from core, use "core" as module_name "reset_statistics stat_name" - sets to 0 the value of the stat_name variable
The SM internally offers an API to be used by other modules interested in accessing the statistics. Ex: a future snmp module
Current statistics ------------------
For the moment only a few core statistics are defined (we can easily add them in time): received requests : "rcv_reqs" received replies : "rcv_rpls" dropped requests (by scripts or post-script callbacks) : "drp_reqs" dropped replies (by scripts or post-script callbacks) : "drp_rpls" error requests (basic parsing failed) : "err_reqs" error replies (bassic parsing failed) : "err_rpls"
How to use it --------------
first to need to enable its compiling - enable the -DSTATISTICS flag in Makefile.def (by default is disabled). Recompile and run openser. Use fifo to get the statistics. Ex: openserctl fifo get_statistics all openserctl fifo get_statistics core: openserctl fifo get_statistics rcv_reqs
Next steps -----------
optimization of the SM (better locking for sync, usage of atomic ops if possible)
replace old statistics (see stats.c) - the code is not compiling since it depends on some snmp stuff...
replace local module statistics (sl,tm,usrloc) with sttistics via SM
add more statistics...ideas are welcomed
new module to implement dynamic statistics variables to be used from script.
regards, bogdan