| #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; |
| }; |