From efd80926e13d693cb78bdcdd58bcd50e24c0e9ed Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 7 Oct 2019 12:39:18 +0200 Subject: [PATCH] batch database access --- src/counter.c | 8 +++++++- src/influx.c | 39 +++++++++++++++++++++++++++++++++++---- src/influx.h | 4 ++-- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/counter.c b/src/counter.c index 7e999fa..923824f 100644 --- a/src/counter.c +++ b/src/counter.c @@ -34,18 +34,24 @@ void init() { digitalWrite(CTRL_OUT, 0); pinMode(INTR_IN, INPUT); +} + +void start() { wiringPiISR(INTR_IN, INT_EDGE_RISING, isr); } int main (void) { init(); ls7366rInit(SPI_CHAN); + influxInit(); + start(); + while (1) { uint32_t diff = ringbufferGet(); double f = 1.0 / (((double) diff) / 1000000.0); printf("%f\n", f); - influxSendFrequency(f); + influxAddFrequency(f); } } diff --git a/src/influx.c b/src/influx.c index e2ecbc6..ac7da08 100644 --- a/src/influx.c +++ b/src/influx.c @@ -1,15 +1,22 @@ #include #include #include +#include +#include + const char INFLUXURL[] = "http://172.16.3.15:8086/write?db=smarthome2&precision=ms"; +#define BUFSIZE 4096 +char buffer[BUFSIZE]; +char *bufferNextEntry = buffer; -void influxSendFrequency(double f) { - char buffer[256]; - - sprintf(buffer, "mainsfrequency freq=%f", f); +void influxInit() { + memset(buffer, 0, BUFSIZE); + bufferNextEntry = buffer; +} +static void influxSendRequest() { CURL *curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, INFLUXURL); @@ -21,3 +28,27 @@ void influxSendFrequency(double f) { curl_easy_cleanup(curl); } } + +void influxAddFrequency(double f) { + static uint32_t entries = 0; + char tmpBuf[128] + struct timespec t; + + clock_gettime(CLOCK_REALTIME, &t); + uint64_t tt = t.tv_sec * 1000 + t.tv_nsec / 1000000; + int c = sprintf(tmpBuf, "mainsfrequency freq=%f %l\n", f, tt); + entries++; + + + if ((bufferNextEntry + c + 10) > (buffer + BUFSIZE)) { + influxSendRequest() + influxInit(); + printf("%u entries sent to database\n", entries); + entries = 0; + } + + memcpy(bufferNextEntry, tmpBuf, c); + bufferNextEntry += c; +} + + diff --git a/src/influx.h b/src/influx.h index 4f7ed5f..29dba92 100644 --- a/src/influx.h +++ b/src/influx.h @@ -1,7 +1,7 @@ #ifndef _INFLUX_H_ #define _INFLUX_H_ -void influxSendFrequency(double f); - +void influxAddFrequency(double f); +void influxInit(); #endif // _INFLUX_H_ \ No newline at end of file