1s entries

This commit is contained in:
Wolfgang Hottgenroth 2020-03-09 12:05:06 +01:00
parent 784346b833
commit e8102e74a9

View File

@ -23,6 +23,8 @@ const char DEFAULT_LOCATION[] = "Essen_DE";
const char LOCATION_KEY[] = "location"; const char LOCATION_KEY[] = "location";
const char *location; const char *location;
const uint8_t ONE_SECOND_DIVIDER = 50;
extern uint32_t skipped; extern uint32_t skipped;
@ -30,15 +32,34 @@ extern uint32_t skipped;
// #define BUFSIZE 131070 // #define BUFSIZE 131070
#define BUFSIZE 65535 #define BUFSIZE 65535
// #define BUFSIZE 1024 // #define BUFSIZE 1024
char influxBuffer[BUFSIZE]; // char influxBuffer[BUFSIZE];
char *bufferNextEntry; // char *bufferNextEntry;
typedef struct influxBuffer {
uint32_t entries;
uint32_t totalEntries;
char *nextEntry;
char buffer[BUFSIZE];
} tInfluxBuffer;
typedef enum {
PERIOD_20MS = 0,
PERIOD_1S,
PERIOD_END
} ePeriod;
tInfluxBuffer influxBuffers[PERIOD_END];
#define HOSTNAMESIZE 128 #define HOSTNAMESIZE 128
char hostname[HOSTNAMESIZE]; char hostname[HOSTNAMESIZE];
static void influxClearBuffer() { static void influxClearBuffer(tInfluxBuffer *influxBuffer, bool initial) {
memset(influxBuffer, 0, BUFSIZE); memset(influxBuffer->buffer, 0, BUFSIZE);
bufferNextEntry = influxBuffer; influxBuffer->nextEntry = influxBuffer->buffer;
influxBuffer->entries = 0;
if (initial) {
influxBuffer->totalEntries = 0;
}
} }
@ -64,12 +85,13 @@ void influxInit(config_t *pCfg) {
influxTag = hostname; influxTag = hostname;
} }
fprintf(stderr, "CONFIG: influxTag=%s\n", influxTag); fprintf(stderr, "CONFIG: influxTag=%s\n", influxTag);
influxClearBuffer(); influxClearBuffer(influxBuffers[PERIOD_20MS], true);
influxClearBuffer(influxBuffers[PERIOD_1S], true);
} }
static void influxSendRequest() { static void influxSendRequest(tInfluxBuffer *influxBuffer) {
led(E_RED, false); led(E_RED, false);
led(E_BLUE, true); led(E_BLUE, true);
CURL *curl = curl_easy_init(); CURL *curl = curl_easy_init();
@ -80,7 +102,7 @@ static void influxSendRequest() {
curl_easy_setopt(curl, CURLOPT_USERNAME, influxUser); curl_easy_setopt(curl, CURLOPT_USERNAME, influxUser);
curl_easy_setopt(curl, CURLOPT_PASSWORD, influxPass); curl_easy_setopt(curl, CURLOPT_PASSWORD, influxPass);
} }
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, influxBuffer); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, influxBuffer->buffer);
CURLcode res = curl_easy_perform(curl); CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK) { if(res != CURLE_OK) {
logmsg(LOG_ERR, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); logmsg(LOG_ERR, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
@ -93,8 +115,8 @@ static void influxSendRequest() {
void influxAddFrequency(uint32_t period, double fRaw, double fSmoothed, double gradient, void influxAddFrequency(uint32_t period, double fRaw, double fSmoothed, double gradient,
int valid) { int valid) {
static uint32_t entries = 0; static uint8_t divider = 0;
static uint32_t totalEntries = 0; static double summedUpTime = 0.0;
char tmpBuf[256]; char tmpBuf[256];
struct timespec t; struct timespec t;
@ -107,17 +129,45 @@ void influxAddFrequency(uint32_t period, double fRaw, double fSmoothed, double g
period, fSmoothed, fSmoothed, gradient, fRaw, period, fSmoothed, fSmoothed, gradient, fRaw,
tt); tt);
if ((bufferNextEntry + c + 10) > (influxBuffer + BUFSIZE)) { if ((influxBuffers[PERIOD_20MS]->nextEntry + c + 10) > (influxBuffers[PERIOD_20MS]->buffer + BUFSIZE)) {
influxSendRequest(); influxSendRequest(influxBuffers[PERIOD_20MS]);
influxClearBuffer(); influxBuffers[PERIOD_20MS]->totalEntries += influxBuffers[PERIOD_20MS]->entries;
totalEntries += entries; logmsg(LOG_INFO, "%u 20ms-entries sent to database, in total %u, invalid: %u\n",
logmsg(LOG_INFO, "%u entries sent to database, in total %u, invalid: %u\n", entries, totalEntries, skipped); influxBuffers[PERIOD_20MS]->entries, influxBuffers[PERIOD_20MS]->totalEntries, skipped);
entries = 0; influxClearBuffer(influxBuffers[PERIOD_20MS], false);
} }
memcpy(bufferNextEntry, tmpBuf, c); memcpy(influxBuffers[PERIOD_20MS]->nextEntry, tmpBuf, c);
bufferNextEntry += c; influxBuffers[PERIOD_20MS]->nextEntry += c;
entries++; influxBuffers[PERIOD_20MS]->entries += 1;
summedUpTime += fSmoothed;
divider += 1;
if (divider == ONE_SECOND_DIVIDER) {
double freq1S = ((double)ONE_SECOND_DIVIDER) / summedUpTime;
int c = sprintf(tmpBuf, "mainsfrequency1S,host=%s,location=%s "
"freq=%f "
"%llu\n",
influxTag, valid, location,
freq1S,
tt);
//if ((influxBuffers[PERIOD_1S]->nextEntry + c + 10) > (influxBuffers[PERIOD_1S]->buffer + BUFSIZE)) {
if (influxBuffers[PERIOD_1S]->entries == 10) {
influxSendRequest(influxBuffers[PERIOD_1S]);
influxBuffers[PERIOD_1S]->totalEntries += influxBuffers[PERIOD_1S]->entries;
logmsg(LOG_INFO, "%u 1s-entries sent to database, in total %u\n",
influxBuffers[PERIOD_1S]->entries, influxBuffers[PERIOD_1S]->totalEntries);
influxClearBuffer(influxBuffers[PERIOD_1S], false);
}
memcpy(influxBuffers[PERIOD_1S]->nextEntry, tmpBuf, c);
influxBuffers[PERIOD_1S]->nextEntry += c;
influxBuffers[PERIOD_1S]->entries += 1;
divider = 0;
}
} }