blob: cf2afd35e141d8e7ff6e24897d1d22cd0411dd46 [file] [log] [blame]
#pragma once
#include "sensorset.hpp"
#include <optional>
#include <string>
#include <vector>
/** @class AverageHandling
* @brief Handle avergae value when AVERAGE_* is set in env
*/
class Average
{
public:
/** @brief The key type of average_set */
using averageKey = SensorSet::key_type;
/** @brief <average, average_interval>
* average is the value of power*_average.
* average_interval is the value of power*_average_interval.
*/
using averageValue = std::pair<int64_t, int64_t>;
/** @brief Store sensors' <averageKey, averageValue> map */
using averageMap = std::map<averageKey, averageValue>;
/** @brief Get averageValue in averageMap based on averageKey.
* This function will be called only when the env AVERAGE_xxx is set to
* true.
*
* @param[in] sensorKey - Sensor details
*
* @return - Optional
* return {}, if sensorKey can not be found in averageMap
* return averageValue, if sensorKey can be found in averageMap
*/
std::optional<averageValue>
getAverageValue(const averageKey& sensorKey) const;
/** @brief Set average value in averageMap based on sensor key.
* This function will be called only when the env AVERAGE_xxx is set to
* true.
*
* @param[in] sensorKey - Sensor details
* @param[in] sensorValue - The related average values of this sensor
*/
void setAverageValue(const averageKey& sensorKey,
const averageValue& sensorValue);
/** @brief Calculate the average value.
*
* @param[in] preAverage - The previous average value from *_average file
* @param[in] preInterval - The previous interval value from
* *_average_interval file
* @param[in] curAverage - The current average value from *_average file
* @param[in] curInterval - The current interval value from
* *_average_interval file
*
* @return value - Optional
* return {}, if curInterval-preInterval=0
* return new calculated average value, if curInterval-preInterval>0
*/
static std::optional<int64_t> calcAverage(int64_t preAverage,
int64_t preInterval,
int64_t curAverage,
int64_t curInterval);
private:
/** @brief Store the previous average sensor map */
averageMap _previousAverageMap;
};