123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*
- * $Id$
- *
- * Copyright (C) 2010 iptelorg GmbH
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- /** k compatible statistics implemented in terms of sr counters.
- * @file kstats_wrapper.h
- * @ingroup: libkcore
- */
- /*
- * History:
- * --------
- * 2010-08-08 initial version (andrei)
- */
- #include "kstats_wrapper.h"
- #ifdef STATISTICS
- /** internal wrapper for kamailio type stat callbacks.
- * sr counter callbacks are different from the kamailio type stat callbacks.
- * This function is meant as a sr counter callback that will call
- * k stat callback passed as parameter.
- * @param h - not used.
- * @param param - k stat callback function pointer (stat_function).
- * @return result of calling the passed k stat_function.
- */
- static counter_val_t cnt_cbk_wrapper(counter_handle_t h, void* param)
- {
- stat_function k_stat_f;
-
- k_stat_f = param;
- return k_stat_f();
- }
- int register_stat( char *module, char *name, stat_var **pvar, int flags)
- {
- int cnt_flags;
- counter_handle_t h;
- int ret;
-
- if (module == 0 || name == 0 || pvar == 0) {
- BUG("invalid parameters (%p, %p, %p)\n", module, name, pvar);
- return -1;
- }
- /* translate kamailio stat flags into sr counter flags */
- cnt_flags = (flags & STAT_NO_RESET) ? CNT_F_NO_RESET : 0;
- if (flags & STAT_IS_FUNC)
- ret = counter_register(&h, module, name, cnt_flags,
- cnt_cbk_wrapper,(stat_function)pvar,
- "kamailio statistic (no description)",
- 0);
- else
- ret = counter_register(&h, module, name, cnt_flags, 0, 0,
- "kamailio statistic (no description)", 0);
- if (ret < 0) {
- if (ret == -2)
- ERR("counter %s.%s already registered\n", module, name);
- goto error;
- }
- if (!(flags & STAT_IS_FUNC))
- *pvar = (void*)(unsigned long)h.id;
- return 0;
- error:
- if (!(flags & STAT_IS_FUNC))
- *pvar = 0;
- return -1;
- }
- int register_module_stats(char *module, stat_export_t *stats)
- {
- if (module == 0 || *module == 0) {
- BUG("null or empty module name\n");
- goto error;
- }
- if (stats == 0 || stats[0].name == 0)
- /* empty stats */
- return 0;
- for (; stats->name; stats++)
- if (register_stat(module, stats->name, stats->stat_pointer,
- stats->flags) < 0 ){
- ERR("failed to add statistic %s.%s\n", module, stats->name);
- goto error;
- }
- return 0;
- error:
- return -1;
- }
- #endif /* STATISTICS */
- /* vi: set ts=4 sw=4 tw=79:ai:cindent: */
|