Rate counters

## Files

file | rate_ctr.h
file | rate_ctr.c

## Data Structures

struct | rate_ctr_per_intv
| data we keep for each of the intervals More...
struct | rate_ctr
| data we keep for each actual value More...
struct | rate_ctr_desc
| rate counter description More...
struct | rate_ctr_group_desc
| description of a rate counter group More...
struct | rate_ctr_group
| One instance of a counter group class. More...

## Macros

#define | RATE_CTR_INTV_NUM 4
| Number of rate counter intervals.

## Typedefs

typedef int(* | rate_ctr_handler_t) (struct rate_ctr_group *, struct rate_ctr *, const struct rate_ctr_desc *, void *)
typedef int(* | rate_ctr_group_handler_t) (struct rate_ctr_group *, void *)

## Enumerations

enum | rate_ctr_intv { RATE_CTR_INTV_SEC, RATE_CTR_INTV_MIN, RATE_CTR_INTV_HOUR, RATE_CTR_INTV_DAY }
| Rate counter interval. More...

## Functions

struct rate_ctr_group * | rate_ctr_group_alloc (void *ctx, const struct rate_ctr_group_desc *desc, unsigned int idx)
| Allocate a new group of counters according to description. More...
void | rate_ctr_group_free (struct rate_ctr_group *grp)
| Free the memory for the specified group of counters.
void | rate_ctr_add (struct rate_ctr *ctr, int inc)
| Add a number to the counter.
static void | rate_ctr_inc (struct rate_ctr *ctr)
| Increment the counter by 1.
int64_t | rate_ctr_difference (struct rate_ctr *ctr)
| Return the counter difference since the last call to this function.
int | rate_ctr_init (void *tall_ctx)
| Initialize the counter module.
struct rate_ctr_group * | rate_ctr_get_group_by_name_idx (const char *name, const unsigned int idx)
| Search for counter group based on group name and index.
const struct rate_ctr * | rate_ctr_get_by_name (const struct rate_ctr_group *ctrg, const char *name)
| Search for counter group based on group name.
int | rate_ctr_for_each_counter (struct rate_ctr_group *ctrg, rate_ctr_handler_t handle_counter, void *data)
| Iterate over all counters. More...
int | rate_ctr_for_each_group (rate_ctr_group_handler_t handle_group, void *data)
static | LLIST_HEAD (rate_ctr_groups)
static void | interval_expired (struct rate_ctr *ctr, enum rate_ctr_intv intv)
static void | rate_ctr_group_intv (struct rate_ctr_group *grp)
static void | rate_ctr_timer_cb (void *data)

## Variables

static void * | tall_rate_ctr_ctx
static struct osmo_timer_list | rate_ctr_timer
static uint64_t | timer_ticks

## Detailed Description

## Enumeration Type Documentation

enum rate_ctr_intv

Rate counter interval.

Enumerator
RATE_CTR_INTV_SEC | last second
RATE_CTR_INTV_MIN | last minute
RATE_CTR_INTV_HOUR | last hour
RATE_CTR_INTV_DAY | last day

## Function Documentation

int rate_ctr_for_each_counter | ( | struct rate_ctr_group * | ctrg,
|  | rate_ctr_handler_t | handle_counter,
|  | void * | data
| ) |  |

Iterate over all counters.

Parameters

  [in] | handle_item | Call-back function, aborts if rc < 0
  [in] | data | Private data handed through to handle_counter

References rate_ctr_group::ctr, rate_ctr_group_desc::ctr_desc, rate_ctr_group::desc, rate_ctr_group::list, and rate_ctr_group_desc::num_ctr.

Referenced by rate_ctr_inc().

struct rate_ctr_group * rate_ctr_group_alloc | ( | void * | ctx,
|  | const struct rate_ctr_group_desc * | desc,
|  | unsigned int | idx
| ) |  |

Allocate a new group of counters according to description.

Parameters

  [in] | ctx | talloc context
  [in] | desc | Rate counter group description
  [in] | idx | Index of new counter group

References rate_ctr_group::desc, rate_ctr_group::idx, and rate_ctr_group::list.