blob: 8bcc4fa5816aeab07869aead93ce86587b302fbd [file] [log] [blame]
James Feist6714a252018-09-10 15:26:18 -07001#pragma once
2#include <Utils.hpp>
3#include <nlohmann/json.hpp>
4
James Feist251c7822018-09-12 12:54:15 -07005struct Sensor;
James Feist6714a252018-09-10 15:26:18 -07006namespace thresholds
7{
8enum Level
9{
10 WARNING,
11 CRITICAL
12};
13enum Direction
14{
15 HIGH,
16 LOW
17};
18struct Threshold
19{
James Feistd8705872019-02-08 13:26:09 -080020 Threshold(const Level& lev, const Direction& dir, const double& val,
James Feist6714a252018-09-10 15:26:18 -070021 bool write = true) :
22 level(lev),
23 direction(dir), value(val), writeable(write)
24 {
25 }
26 Level level;
27 Direction direction;
28 double value;
29 bool writeable;
James Feist251c7822018-09-12 12:54:15 -070030 bool asserted = false;
James Feist6714a252018-09-10 15:26:18 -070031};
32
Jae Hyun Yoo9ced0a32018-10-25 10:42:39 -070033bool parseThresholdsFromConfig(
James Feistd8705872019-02-08 13:26:09 -080034 const SensorData& sensorData,
35 std::vector<thresholds::Threshold>& thresholdVector,
36 const std::string* matchLabel = nullptr);
James Feist6714a252018-09-10 15:26:18 -070037
James Feistd8705872019-02-08 13:26:09 -080038bool parseThresholdsFromAttr(std::vector<thresholds::Threshold>& thresholds,
39 const std::string& inputPath,
40 const double& scaleFactor);
Jae Hyun Yoo9ced0a32018-10-25 10:42:39 -070041bool hasCriticalInterface(
James Feistd8705872019-02-08 13:26:09 -080042 const std::vector<thresholds::Threshold>& thresholdVector);
James Feist251c7822018-09-12 12:54:15 -070043
Jae Hyun Yoo9ced0a32018-10-25 10:42:39 -070044bool hasWarningInterface(
James Feistd8705872019-02-08 13:26:09 -080045 const std::vector<thresholds::Threshold>& thresholdVector);
James Feist6714a252018-09-10 15:26:18 -070046
James Feistd8705872019-02-08 13:26:09 -080047void persistThreshold(const std::string& baseInterface, const std::string& path,
48 const thresholds::Threshold& threshold,
49 std::shared_ptr<sdbusplus::asio::connection>& conn);
James Feist251c7822018-09-12 12:54:15 -070050
James Feistdc6c55f2018-10-31 12:53:20 -070051// returns false if a critical threshold has been crossed, true otherwise
James Feistd8705872019-02-08 13:26:09 -080052bool checkThresholds(Sensor* sensor);
53void assertThresholds(Sensor* sensor, thresholds::Level level,
James Feist251c7822018-09-12 12:54:15 -070054 thresholds::Direction direction, bool assert);
James Feist6714a252018-09-10 15:26:18 -070055} // namespace thresholds