package cc.blynk.server.core.reporting.raw;
import cc.blynk.server.core.model.auth.User;
import cc.blynk.server.core.reporting.average.AggregationKey;
import cc.blynk.utils.NumberUtil;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Simply stores every record in memory that should be stored in reporting DB lately.
* Could cause OOM at high request rate. However we don't use it very high loads.
* So this is fine for now.
*
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 25.01.17.
*/
public class RawDataProcessor {
public final Map<AggregationKey, Object> rawStorage;
public RawDataProcessor(boolean enable) {
if (enable) {
rawStorage = new ConcurrentHashMap<>();
} else {
rawStorage = Collections.emptyMap();
}
}
//todo 2 millis is minimum allowed interval for data pushing.
public void collect(User user, int dashId, int deviceId, char pinType, byte pin, long ts, String stringValue, double doubleValue) {
final AggregationKey aggregationKey = new AggregationKey(user.email, user.appName, dashId, deviceId, pinType, pin, ts);
if (doubleValue == NumberUtil.NO_RESULT) {
rawStorage.put(aggregationKey, stringValue);
} else {
rawStorage.put(aggregationKey, doubleValue);
}
}
}