libosmocore  UNKNOWN
Osmocom core library
rate_ctr.h
Go to the documentation of this file.
1 #pragma once
2 
9 #include <stdint.h>
10 
11 #include <osmocom/core/linuxlist.h>
12 
14 #define RATE_CTR_INTV_NUM 4
15 
22 };
23 
26  uint64_t last;
27  uint64_t rate;
28 };
29 
31 struct rate_ctr {
32  uint64_t current;
33  uint64_t previous;
36 };
37 
39 struct rate_ctr_desc {
40  const char *name;
41  const char *description;
42 };
43 
47  const char *group_name_prefix;
49  const char *group_description;
51  int class_id;
53  const unsigned int num_ctr;
55  const struct rate_ctr_desc *ctr_desc;
56 };
57 
61  struct llist_head list;
63  const struct rate_ctr_group_desc *desc;
65  unsigned int idx;
67  struct rate_ctr ctr[0];
68 };
69 
70 struct rate_ctr_group *rate_ctr_group_alloc(void *ctx,
71  const struct rate_ctr_group_desc *desc,
72  unsigned int idx);
73 
74 static inline void rate_ctr_group_upd_idx(struct rate_ctr_group *grp, unsigned int idx)
75 {
76  grp->idx = idx;
77 }
78 
79 void rate_ctr_group_free(struct rate_ctr_group *grp);
80 
84 void rate_ctr_add(struct rate_ctr *ctr, int inc);
85 
88 static inline void rate_ctr_inc(struct rate_ctr *ctr)
89 {
90  rate_ctr_add(ctr, 1);
91 }
92 
94 int64_t rate_ctr_difference(struct rate_ctr *ctr);
95 
96 int rate_ctr_init(void *tall_ctx);
97 
98 struct rate_ctr_group *rate_ctr_get_group_by_name_idx(const char *name, const unsigned int idx);
99 const struct rate_ctr *rate_ctr_get_by_name(const struct rate_ctr_group *ctrg, const char *name);
100 
101 typedef int (*rate_ctr_handler_t)(
102  struct rate_ctr_group *, struct rate_ctr *,
103  const struct rate_ctr_desc *, void *);
104 typedef int (*rate_ctr_group_handler_t)(struct rate_ctr_group *, void *);
105 
106 
112  rate_ctr_handler_t handle_counter, void *data);
113 
114 int rate_ctr_for_each_group(rate_ctr_group_handler_t handle_group, void *data);
115 
last day
Definition: rate_ctr.h:21
int rate_ctr_for_each_counter(struct rate_ctr_group *ctrg, rate_ctr_handler_t handle_counter, void *data)
Iterate over all counters.
Definition: rate_ctr.c:205
last hour
Definition: rate_ctr.h:20
void rate_ctr_group_free(struct rate_ctr_group *grp)
Free the memory for the specified group of counters.
Definition: rate_ctr.c:74
One instance of a counter group class.
Definition: rate_ctr.h:59
void rate_ctr_add(struct rate_ctr *ctr, int inc)
Increment the counter by inc.
Definition: rate_ctr.c:81
last minute
Definition: rate_ctr.h:19
const struct rate_ctr_desc * ctr_desc
Pointer to array of counter names.
Definition: rate_ctr.h:55
data we keep for each actual value
Definition: rate_ctr.h:31
const struct rate_ctr_group_desc * desc
Pointer to the counter group class.
Definition: rate_ctr.h:63
description of a rate counter group
Definition: rate_ctr.h:45
int class_id
The class to which this group belongs.
Definition: rate_ctr.h:51
int64_t rate_ctr_difference(struct rate_ctr *ctr)
Return the counter difference since the last call to this function.
Definition: rate_ctr.c:87
const char * group_description
The human-readable description of the group.
Definition: rate_ctr.h:49
static void rate_ctr_inc(struct rate_ctr *ctr)
Increment the counter by 1.
Definition: rate_ctr.h:88
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.
Definition: rate_ctr.c:181
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.
Definition: rate_ctr.c:160
int rate_ctr_for_each_group(rate_ctr_group_handler_t handle_group, void *data)
Iterate over all counter groups.
Definition: rate_ctr.c:227
int rate_ctr_init(void *tall_ctx)
Initialize the counter module.
Definition: rate_ctr.c:147
uint64_t rate
counter rate
Definition: rate_ctr.h:27
Simple doubly linked list implementation.
const char * description
description of the counter
Definition: rate_ctr.h:41
(double) linked list header structure
Definition: linuxlist.h:47
uint64_t last
counter value in last interval
Definition: rate_ctr.h:26
data we keep for each of the intervals
Definition: rate_ctr.h:25
rate_ctr_intv
Rate counter interval.
Definition: rate_ctr.h:17
const unsigned int num_ctr
The number of counters in this group.
Definition: rate_ctr.h:53
const char * group_name_prefix
The prefix to the name of all counters in this group.
Definition: rate_ctr.h:47
uint64_t current
current value
Definition: rate_ctr.h:32
last second
Definition: rate_ctr.h:18
const char * name
name of the counter
Definition: rate_ctr.h:40
uint64_t previous
previous value, used for delta
Definition: rate_ctr.h:33
#define RATE_CTR_INTV_NUM
Number of rate counter intervals.
Definition: rate_ctr.h:14
unsigned int idx
The index of this ctr_group within its class.
Definition: rate_ctr.h:65
rate counter description
Definition: rate_ctr.h:39
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.
Definition: rate_ctr.c:48