1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-23 00:00:01 +01:00
VILLASnode/server/src/stats.c

75 lines
1.9 KiB
C

/** Hook functions to collect statistics
*
* @file
* @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
* @copyright 2014-2015, Institute for Automation of Complex Power Systems, EONERC
* This file is part of S2SS. All Rights Reserved. Proprietary and confidential.
* Unauthorized copying of this file, via any medium is strictly prohibited.
*********************************************************************************/
#include "stats.h"
#include "path.h"
#include "timing.h"
#include "utils.h"
int stats_line(struct path *p)
{
char buf[33];
path_print(p, buf, sizeof(buf));
info("%-32s : %-8u %-8u %-8u %-8u %-8u", buf,
p->sent, p->received, p->dropped, p->skipped, p->invalid);
return 0;
}
int stats_show(struct path *p)
{
if (p->hist_delay.length) { info("One-way delay:"); hist_print(&p->hist_delay); }
if (p->hist_gap.length) { info("Message gap time:"); hist_print(&p->hist_gap); }
if (p->hist_sequence.length) { info("Sequence number gaps:"); hist_print(&p->hist_sequence); }
return 0;
}
int stats_collect(struct path *p)
{
int dist = p->current->sequence - (int32_t) p->previous->sequence;
struct timespec ts1 = MSG_TS(p->current);
struct timespec ts2 = MSG_TS(p->previous);
hist_put(&p->hist_sequence, dist);
hist_put(&p->hist_delay, time_delta(&ts1, &p->ts_recv));
hist_put(&p->hist_gap, time_delta(&ts2, &ts1));
return 0;
}
int stats_start(struct path *p)
{
/** @todo Allow configurable bounds for histograms */
hist_create(&p->hist_sequence, -HIST_SEQ, +HIST_SEQ, 1);
hist_create(&p->hist_delay, 0, 2, 100e-3);
hist_create(&p->hist_gap, 0, 40e-3, 1e-3);
return 0;
}
int stats_stop(struct path *p)
{
hist_destroy(&p->hist_sequence);
hist_destroy(&p->hist_delay);
hist_destroy(&p->hist_gap);
return 0;
}
int stats_reset(struct path *p)
{
hist_reset(&p->hist_sequence);
hist_reset(&p->hist_delay);
hist_reset(&p->hist_gap);
return 0;
}