batch database access done
This commit is contained in:
parent
efd80926e1
commit
1403c442ca
@ -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);
|
||||
}
|
||||
}
|
||||
|
33
src/influx.c
33
src/influx.c
@ -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++;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user