Change-Id: I77250bda622784e3adc522b41b90755105fb220a
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
+void SensorLogger::flushCache(bool force)
+{
+}
+
bool SensorLogger::executeQuery(const char *query)
{
return __dbMgr.execute(0, query, NULL);
bool SensorLogger::executeQuery(const char *query)
{
return __dbMgr.execute(0, query, NULL);
virtual bool start() = 0;
virtual void stop() = 0;
virtual bool start() = 0;
virtual void stop() = 0;
+ virtual void flushCache(bool force = false);
protected:
bool executeQuery(const char *query);
protected:
bool executeQuery(const char *query);
Querier *querier = getQuerier(option);
IF_FAIL_RETURN(querier, ERR_OPERATION_FAILED);
Querier *querier = getQuerier(option);
IF_FAIL_RETURN(querier, ERR_OPERATION_FAILED);
+ sensorLogger->flushCache(true);
+
if (interval == 0)
ret = querier->queryRaw(startTime, endTime);
else if (interval > 0)
if (interval == 0)
ret = querier->queryRaw(startTime, endTime);
else if (interval > 0)
#include "../TimeUtil.h"
#include "PressureLogger.h"
#include "../TimeUtil.h"
#include "PressureLogger.h"
-#define INSERTION_THRESHOLD 20000
#define SAMPLING_INTERVAL 60000
#define BATCH_LATENCY INT_MAX
#define SAMPLING_INTERVAL 60000
#define BATCH_LATENCY INT_MAX
-#define MAX_QUERY_LENGTH 1000
+
+#define RESAMPLING_INTERVAL 20000
+#define CACHE_LIMIT 20
IF_FAIL_RETURN_TAG(!isRunning(), true, _D, "Started already");
_I(GREEN("Start to record"));
IF_FAIL_RETURN_TAG(!isRunning(), true, _D, "Started already");
_I(GREEN("Start to record"));
- __lastInsertionTime = TimeUtil::getTime();
+ __lastEventTime = 0;
+ __cacheCount = 0;
__resetInsertionQuery();
return listen();
__resetInsertionQuery();
return listen();
_I(GREEN("Stop recording"));
unlisten();
_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)
{
}
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);
}
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);
+
- 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;
__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();
}
void PressureLogger::__resetInsertionQuery()
}
void PressureLogger::__resetInsertionQuery()
bool start();
void stop();
bool start();
void stop();
+ void flushCache(bool force = false);
protected:
void onEvent(sensor_data_t *eventData);
private:
protected:
void onEvent(sensor_data_t *eventData);
private:
- void __record(sensor_data_t *eventData, uint64_t receivedTime);
+ void __record(float pressure, uint64_t eventTime);
void __resetInsertionQuery();
void __resetInsertionQuery();
- uint64_t __lastInsertionTime;
+ uint64_t __lastEventTime;
+ uint32_t __cacheCount;
std::string __insertionQuery;
};
}
std::string __insertionQuery;
};
}
__sleepMonitor->stop();
__appendQuery(__startTime, __endTime);
__sleepMonitor->stop();
__appendQuery(__startTime, __endTime);
delete __sleepDetector;
__sleepDetector = NULL;
delete __sleepDetector;
__sleepDetector = NULL;
_D("Reset event: %llu ~ %llu", __startTime, __endTime);
}
_D("Reset event: %llu ~ %llu", __startTime, __endTime);
}
-void SleepLogger::flush()
+void SleepLogger::flushCache(bool force)
{
__insertionQuery.resize(__insertionQuery.size() - 1);
if (__insertionQuery.at(__insertionQuery.size() - 1) == ')')
{
__insertionQuery.resize(__insertionQuery.size() - 1);
if (__insertionQuery.at(__insertionQuery.size() - 1) == ')')
void wakeUp(uint64_t timestamp);
void record(uint64_t startTime, uint64_t endTime, int state);
void wakeUp(uint64_t timestamp);
void record(uint64_t startTime, uint64_t endTime, int state);
+ void flushCache(bool force = false);
private:
void __resetInsertionQuery();
private:
void __resetInsertionQuery();
if (static_cast<int>(eventData->values[IDX_REMAINING]) > 0)
return;
if (static_cast<int>(eventData->values[IDX_REMAINING]) > 0)
return;
+ __logger->flushCache();
if (__lazyStopOn)
stop();
if (__lazyStopOn)
stop();