batch database access done

This commit is contained in:
Wolfgang Hottgenroth 2019-10-07 13:51:07 +02:00
parent efd80926e1
commit 1403c442ca
3 changed files with 26 additions and 21 deletions

View File

@ -51,7 +51,7 @@ int main (void) {
uint32_t diff = ringbufferGet(); uint32_t diff = ringbufferGet();
double f = 1.0 / (((double) diff) / 1000000.0); double f = 1.0 / (((double) diff) / 1000000.0);
printf("%f\n", f); // printf("%f\n", f);
influxAddFrequency(f); influxAddFrequency(f);
} }
} }

View File

@ -3,24 +3,28 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <time.h> #include <time.h>
#include <string.h> #include <string.h>
#include <unistd.h>
const char INFLUXURL[] = "http://172.16.3.15:8086/write?db=smarthome2&precision=ms"; const char INFLUXURL[] = "http://172.16.3.15:8086/write?db=smarthome2&precision=ms";
#define BUFSIZE 4096 // #define BUFSIZE 131070
char buffer[BUFSIZE]; #define BUFSIZE 65535
char *bufferNextEntry = buffer; char influxBuffer[BUFSIZE];
char *bufferNextEntry;
void influxInit() { void influxInit() {
memset(buffer, 0, BUFSIZE); memset(influxBuffer, 0, BUFSIZE);
bufferNextEntry = buffer; bufferNextEntry = influxBuffer;
} }
static void influxSendRequest() { static void influxSendRequest() {
//printf("About to send:\n");
//printf(influxBuffer);
CURL *curl = curl_easy_init(); CURL *curl = curl_easy_init();
if(curl) { if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, INFLUXURL); curl_easy_setopt(curl, CURLOPT_URL, INFLUXURL);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, influxBuffer);
CURLcode res = curl_easy_perform(curl); CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK) { if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
@ -31,24 +35,25 @@ static void influxSendRequest() {
void influxAddFrequency(double f) { void influxAddFrequency(double f) {
static uint32_t entries = 0; static uint32_t entries = 0;
char tmpBuf[128] static uint32_t totalEntries = 0;
char tmpBuf[128];
struct timespec t; struct timespec t;
clock_gettime(CLOCK_REALTIME, &t); clock_gettime(CLOCK_REALTIME, &t);
uint64_t tt = t.tv_sec * 1000 + t.tv_nsec / 1000000; uint64_t tt = (((uint64_t)t.tv_sec) * 1000) + (((uint64_t)t.tv_nsec) / 1000000);
int c = sprintf(tmpBuf, "mainsfrequency freq=%f %l\n", f, tt); int c = sprintf(tmpBuf, "mainsfrequency freq=%f %llu\n", f, tt);
entries++;
if ((bufferNextEntry + c + 10) > (influxBuffer + BUFSIZE)) {
if ((bufferNextEntry + c + 10) > (buffer + BUFSIZE)) { influxSendRequest();
influxSendRequest()
influxInit(); influxInit();
printf("%u entries sent to database\n", entries); totalEntries += entries;
printf("%u entries sent to database, in total %u\n", entries, totalEntries);
entries = 0; entries = 0;
} }
memcpy(bufferNextEntry, tmpBuf, c); memcpy(bufferNextEntry, tmpBuf, c);
bufferNextEntry += c; bufferNextEntry += c;
entries++;
} }

View File

@ -6,8 +6,8 @@
uint32_t buffer[BUFFER_SIZE+5]; uint32_t buffer[BUFFER_SIZE+5];
uint16_t bufferReadIdx = 0; uint32_t bufferReadIdx = 0;
uint16_t bufferWriteIdx = 0; uint32_t bufferWriteIdx = 0;
pthread_mutex_t eventMutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t eventMutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t eventSignal = PTHREAD_COND_INITIALIZER; pthread_cond_t eventSignal = PTHREAD_COND_INITIALIZER;
@ -42,11 +42,11 @@ uint32_t ringbufferGet() {
pthread_mutex_unlock(&eventMutex); pthread_mutex_unlock(&eventMutex);
} }
double res = buffer[bufferReadIdx]; double res = buffer[bufferReadIdx];
bufferReadIdx++; bufferReadIdx++;
if (bufferReadIdx > BUFFER_SIZE) { if (bufferReadIdx > BUFFER_SIZE) {
bufferReadIdx = 0; bufferReadIdx = 0;
} }
return res; return res;
} }