odissey: add basic stats object

This commit is contained in:
Dmitry Simonenko 2017-02-21 13:51:13 +03:00
parent ed1ddd01de
commit e8311eeacf
1 changed files with 51 additions and 0 deletions

51
core/od_stat.h Normal file
View File

@ -0,0 +1,51 @@
#ifndef OD_STAT_H_
#define OD_STAT_H_
/*
* odissey.
*
* PostgreSQL connection pooler and request router.
*/
typedef struct od_stat_t od_stat_t;
#define OD_STAT_MAX 8
struct od_stat_t {
int pos;
uint32_t stat[OD_STAT_MAX];
};
static inline void
od_stat_init(od_stat_t *stat)
{
stat->pos = 0;
memset(stat->stat, 0, sizeof(stat->stat));
}
static inline void
od_stat_tick(od_stat_t *stat)
{
stat->pos = (stat->pos + 1) % OD_STAT_MAX;
stat->stat[stat->pos] = 0;
}
static inline void
od_stat_add(od_stat_t *stat, uint32_t value)
{
stat->stat[stat->pos] += value;
}
static inline float
od_stat_avg(od_stat_t *stat)
{
float sum = 0;
int i = 0;
while (i < OD_STAT_MAX) {
sum += stat->stat[i];
i++;
}
return sum / (float)OD_STAT_MAX;
}
#endif