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();
double f = 1.0 / (((double) diff) / 1000000.0);
printf("%f\n", f);
// printf("%f\n", f);
influxAddFrequency(f);
}
}

View File

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

View File

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