From 69c8f0adaab75e715510bffb51b58e7ec498c1e1 Mon Sep 17 00:00:00 2001 From: Dennis Potter Date: Sat, 4 Aug 2018 17:27:06 +0200 Subject: [PATCH] Added flag to enable/disable warning about missed steps --- include/villas/nodes/signal_generator.h | 1 + lib/nodes/signal_generator.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/villas/nodes/signal_generator.h b/include/villas/nodes/signal_generator.h index ae227fdc0..83e828dd5 100644 --- a/include/villas/nodes/signal_generator.h +++ b/include/villas/nodes/signal_generator.h @@ -65,6 +65,7 @@ struct signal_generator { double amplitude; /**< Amplitude of the generated signals. */ double stddev; /**< Standard deviation of random signals (normal distributed). */ double offset; /**< A constant bias. */ + int monitor_missed; /**< Boolean, if set, node counts missed steps and warns user. */ double *last; /**< The values from the previous period which are required for random walk. */ diff --git a/lib/nodes/signal_generator.c b/lib/nodes/signal_generator.c index 8d733fdc8..0256fd8c7 100644 --- a/lib/nodes/signal_generator.c +++ b/lib/nodes/signal_generator.c @@ -67,8 +67,9 @@ int signal_generator_parse(struct node *n, json_t *cfg) s->amplitude = 1; s->stddev = 0.2; s->offset = 0; + s->monitor_missed = 1; - ret = json_unpack_ex(cfg, &err, 0, "{ s?: s, s?: b, s?: i, s?: i, s?: F, s?: F, s?: F, s?: F, s?: F }", + ret = json_unpack_ex(cfg, &err, 0, "{ s?: s, s?: b, s?: i, s?: i, s?: F, s?: F, s?: F, s?: F, s?: F, s?: b}", "signal", &type, "realtime", &s->rt, "limit", &s->limit, @@ -77,7 +78,8 @@ int signal_generator_parse(struct node *n, json_t *cfg) "frequency", &s->frequency, "amplitude", &s->amplitude, "stddev", &s->stddev, - "offset", &s->offset + "offset", &s->offset, + "monitor_missed", &s->monitor_missed ); if (ret) jerror(&err, "Failed to parse configuration of node %s", node_name(n)); @@ -114,10 +116,11 @@ int signal_generator_parse_cli(struct node *n, int argc, char *argv[]) s->values = 1; s->limit = -1; s->offset = 0; + s->monitor_missed = 1; /* Parse optional command line arguments */ char c, *endptr; - while ((c = getopt(argc, argv, "v:r:f:l:a:D:no:")) != -1) { + while ((c = getopt(argc, argv, "v:r:f:l:a:D:no:m")) != -1) { switch (c) { case 'n': s->rt = 0; @@ -143,6 +146,9 @@ int signal_generator_parse_cli(struct node *n, int argc, char *argv[]) case 'D': s->stddev = strtof(optarg, &endptr); goto check; + case 'm': + s->monitor_missed = 0; + goto check; case '?': break; } @@ -204,7 +210,7 @@ int signal_generator_stop(struct node *n) return ret; } - if (s->missed_steps > 0) + if (s->missed_steps > 0 && s->monitor_missed) warn("Node %s missed a total of %d steps.", node_name(n), s->missed_steps); free(s->last); @@ -226,7 +232,7 @@ int signal_generator_read(struct node *n, struct sample *smps[], unsigned cnt, u if (s->rt) { /* Block until 1/p->rate seconds elapsed */ steps = task_wait(&s->task); - if (steps > 1) { + if (steps > 1 && s->monitor_missed) { warn("Missed steps: %u", steps-1); s->missed_steps += steps-1; }