#include "../TimeUtil.h"
#include "PressureLogger.h"
-#define INSERTION_THRESHOLD 20000
#define SAMPLING_INTERVAL 60000
#define BATCH_LATENCY INT_MAX
-#define MAX_QUERY_LENGTH 1000
+
+#define RESAMPLING_INTERVAL 20000
+#define CACHE_LIMIT 20
using namespace ctx;
IF_FAIL_RETURN_TAG(!isRunning(), true, _D, "Started already");
_I(GREEN("Start to record"));
- __lastInsertionTime = TimeUtil::getTime();
+ __lastEventTime = 0;
+ __cacheCount = 0;
__resetInsertionQuery();
return listen();
_I(GREEN("Stop recording"));
unlisten();
+ flushCache(true);
+}
+
+void PressureLogger::flushCache(bool force)
+{
+ IF_FAIL_VOID(force || __cacheCount > CACHE_LIMIT);
+
+ __insertionQuery.resize(__insertionQuery.size() - 1);
+ if (__insertionQuery.at(__insertionQuery.size() - 1) == ')')
+ executeQuery(__insertionQuery.c_str());
+
+ __cacheCount = 0;
+ __resetInsertionQuery();
}
void PressureLogger::onEvent(sensor_data_t *eventData)
{
- uint64_t receivedTime = TimeUtil::getTime();
- __record(eventData, receivedTime);
+ uint64_t eventTime = TimeUtil::getTime(eventData->timestamp);
+ __record(eventData->values[0], eventTime);
removeExpired(SUBJ_SENSOR_PRESSURE, PRESSURE_RECORD, KEY_UNIV_TIME);
}
-void PressureLogger::__record(sensor_data_t *eventData, uint64_t receivedTime)
+void PressureLogger::__record(float pressure, uint64_t eventTime)
{
+ IF_FAIL_VOID(eventTime - __lastEventTime >= RESAMPLING_INTERVAL);
+
char buffer[64];
- g_snprintf(buffer, sizeof(buffer), "(%llu, %.5f),",
- TimeUtil::getTime(eventData->timestamp), eventData->values[0]);
+ g_snprintf(buffer, sizeof(buffer), "(%llu, %.5f),", eventTime, pressure);
+ _D("[%u] %s", __cacheCount, buffer);
__insertionQuery += buffer;
+ __lastEventTime = eventTime;
+ ++__cacheCount;
- if (receivedTime - __lastInsertionTime < INSERTION_THRESHOLD && __insertionQuery.size() < MAX_QUERY_LENGTH)
- return;
-
- __insertionQuery.resize(__insertionQuery.size() - 1);
- if (__insertionQuery.at(__insertionQuery.size() - 1) == ')')
- executeQuery(__insertionQuery.c_str());
-
- __lastInsertionTime = receivedTime;
- __resetInsertionQuery();
+ flushCache();
}
void PressureLogger::__resetInsertionQuery()