libosmocore 0.9.6-23.20170220git32ee5af8.fc42
Osmocom core library
Loading...
Searching...
No Matches
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_grouprate_ctr_group_alloc (void *ctx, const struct rate_ctr_group_desc *desc, unsigned int idx)
 Allocate a new group of counters according to description.
 
static void rate_ctr_group_upd_idx (struct rate_ctr_group *grp, unsigned int idx)
 
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)
 Increment the counter by inc.
 
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_grouprate_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_ctrrate_ctr_get_by_name (const struct rate_ctr_group *ctrg, const char *name)
 Search for counter 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.
 
int rate_ctr_for_each_group (rate_ctr_group_handler_t handle_group, void *data)
 Iterate over all counter groups.
 
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

◆ 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

◆ rate_ctr_add()

void rate_ctr_add ( struct rate_ctr * ctr,
int inc )

Increment the counter by inc.

Add a number to the counter.

Parameters
ctrRate counters to increment
incquantity to increment ctr by

References current.

Referenced by rate_ctr_inc().

◆ rate_ctr_for_each_counter()

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

Iterate over all counters.

Iterate over each counter in group and call function.

Parameters
[in]handle_itemCall-back function, aborts if rc < 0
[in]dataPrivate data handed through to handle_counter
[in]countergroup over whose counter to iterate
[in]handle_counterfunction pointer
[in]dataData to hand transparently to handle_counter
Returns
0 on success; negative otherwise

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

◆ rate_ctr_for_each_group()

int rate_ctr_for_each_group ( rate_ctr_group_handler_t handle_group,
void * data )

Iterate over all counter groups.

Parameters
[in]handle_groupfunction pointer of callback function
[in]dataData to hand transparently to handle_group
Returns
0 on success; negative otherwise

References rate_ctr_group::list, and llist_for_each_entry.

◆ rate_ctr_get_by_name()

const struct rate_ctr * rate_ctr_get_by_name ( const struct rate_ctr_group * ctrg,
const char * name )

Search for counter based on group + name.

Parameters
[in]ctrgpointer to rate_ctr_group
[in]namename of counter inside group
Returns
Rate counters or NULL in caes of error

References rate_ctr_group::ctr, rate_ctr_group_desc::ctr_desc, rate_ctr_group::desc, rate_ctr_desc::name, and rate_ctr_group_desc::num_ctr.

◆ rate_ctr_get_group_by_name_idx()

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.

Parameters
[in]nameName of the counter group you're looking for
[in]idxIndex inside the counter group
Returns
rate_ctr_group or NULL in case of error

References rate_ctr_group::desc, rate_ctr_group_desc::group_name_prefix, rate_ctr_group::idx, rate_ctr_group::list, and llist_for_each_entry.

◆ rate_ctr_group_alloc()

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]ctxtalloc context
[in]descRate counter group description
[in]idxIndex of new counter group

References rate_ctr_group::desc, rate_ctr_group::idx, rate_ctr_group::list, and llist_add().

◆ rate_ctr_inc()

static void rate_ctr_inc ( struct rate_ctr * ctr)
inlinestatic

Increment the counter by 1.

Parameters
ctrRate counters to increment

References rate_ctr_group::ctr, and rate_ctr_add().