xref: /openbmc/telemetry/src/on_change_threshold.hpp (revision c1dbac16fe3c705b773155f607a4541cf2ad79fa)
1 #pragma once
2 
3 #include "interfaces/clock.hpp"
4 #include "interfaces/sensor.hpp"
5 #include "interfaces/sensor_listener.hpp"
6 #include "interfaces/threshold.hpp"
7 #include "interfaces/trigger_action.hpp"
8 #include "types/trigger_types.hpp"
9 
10 #include <boost/asio/steady_timer.hpp>
11 
12 #include <chrono>
13 #include <memory>
14 #include <vector>
15 
16 class OnChangeThreshold :
17     public interfaces::Threshold,
18     public interfaces::SensorListener,
19     public std::enable_shared_from_this<OnChangeThreshold>
20 {
21   public:
22     OnChangeThreshold(
23         const std::string& triggerId, Sensors sensors,
24         std::vector<std::unique_ptr<interfaces::TriggerAction>> actions,
25         std::unique_ptr<interfaces::Clock> clock);
26     ~OnChangeThreshold() = default;
27     OnChangeThreshold(const OnChangeThreshold&) = delete;
28     OnChangeThreshold& operator=(const OnChangeThreshold&) = delete;
29     OnChangeThreshold(OnChangeThreshold&&) = delete;
30     OnChangeThreshold& operator=(OnChangeThreshold&&) = delete;
31 
32     void initialize() override;
33     void sensorUpdated(interfaces::Sensor&, Milliseconds, double) override;
34     LabeledThresholdParam getThresholdParam() const override;
35     void updateSensors(Sensors newSensors) override;
36 
37   private:
38     const std::string& triggerId;
39     Sensors sensors;
40     const std::vector<std::unique_ptr<interfaces::TriggerAction>> actions;
41     bool initialized = false;
42     bool isFirstReading = true;
43     std::unique_ptr<interfaces::Clock> clock;
44 
45     void commit(const std::string&, double);
46 };
47