From 806be428037d2333b5ccbbff6979d9c1f5f0f7f5 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Thu, 9 Jan 2020 10:35:06 +0100 Subject: [PATCH] influx: add support for complex signal types --- lib/nodes/influxdb.cpp | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/lib/nodes/influxdb.cpp b/lib/nodes/influxdb.cpp index 6ea5ac6f9..9711c3a5e 100644 --- a/lib/nodes/influxdb.cpp +++ b/lib/nodes/influxdb.cpp @@ -140,7 +140,8 @@ int influxdb_write(struct node *n, struct sample *smps[], unsigned cnt, unsigned if ( sig->type != SignalType::BOOLEAN && sig->type != SignalType::FLOAT && - sig->type != SignalType::INTEGER + sig->type != SignalType::INTEGER && + sig->type != SignalType::COMPLEX ) { warning("Unsupported signal format for node %s. Skipping", node_name(n)); continue; @@ -152,25 +153,36 @@ int influxdb_write(struct node *n, struct sample *smps[], unsigned cnt, unsigned if (!sig) return -1; + char name[32]; if (sig->name) - strcatf(&buf, "%s=", sig->name); + strncpy(name, sig->name, sizeof(name)); else - strcatf(&buf, "value%d=", j); + snprintf(name, sizeof(name), "value%d", j); - switch (sig->type) { - case SignalType::BOOLEAN: - strcatf(&buf, "%s", data->b ? "true" : "false"); - break; + if (sig->type == SignalType::COMPLEX) { + strcatf(&buf, "%s_re=%f, %s_im=%f", + name, std::real(data->z), + name, std::imag(data->z) + ); + } + else { + strcatf(&buf, "%s=", name); - case SignalType::FLOAT: - strcatf(&buf, "%f", data->f); - break; + switch (sig->type) { + case SignalType::BOOLEAN: + strcatf(&buf, "%s", data->b ? "true" : "false"); + break; - case SignalType::INTEGER: - strcatf(&buf, "%" PRIi64, data->i); - break; + case SignalType::FLOAT: + strcatf(&buf, "%f", data->f); + break; - default: { } + case SignalType::INTEGER: + strcatf(&buf, "%" PRIi64, data->i); + break; + + default: { } + } } }