190bfaea4SRatan Gupta #pragma once 290bfaea4SRatan Gupta 390bfaea4SRatan Gupta #include <phosphor-logging/log.hpp> 490bfaea4SRatan Gupta #include "callback.hpp" 590bfaea4SRatan Gupta 690bfaea4SRatan Gupta namespace phosphor 790bfaea4SRatan Gupta { 890bfaea4SRatan Gupta namespace dbus 990bfaea4SRatan Gupta { 1090bfaea4SRatan Gupta namespace monitoring 1190bfaea4SRatan Gupta { 1290bfaea4SRatan Gupta 1390bfaea4SRatan Gupta /** @class EventBase 1490bfaea4SRatan Gupta * @brief Event callback implementation. 1590bfaea4SRatan Gupta * 1690bfaea4SRatan Gupta * The event callback creates the event dbus object 1790bfaea4SRatan Gupta * which has event message and metadata as key value pairs 1890bfaea4SRatan Gupta * as specified by the client supplied property index. 1990bfaea4SRatan Gupta */ 2090bfaea4SRatan Gupta class EventBase : public IndexedCallback 2190bfaea4SRatan Gupta { 2290bfaea4SRatan Gupta public: 2390bfaea4SRatan Gupta EventBase() = delete; 2490bfaea4SRatan Gupta EventBase(const EventBase&) = delete; 2590bfaea4SRatan Gupta EventBase(EventBase&&) = default; 2690bfaea4SRatan Gupta EventBase& operator=(const EventBase&) = delete; 2790bfaea4SRatan Gupta EventBase& operator=(EventBase&&) = default; 2890bfaea4SRatan Gupta virtual ~EventBase() = default; 2990bfaea4SRatan Gupta EventBase(const PropertyIndex& index) : 3090bfaea4SRatan Gupta IndexedCallback(index) {} 3190bfaea4SRatan Gupta 3290bfaea4SRatan Gupta /** @brief Callback interface implementation. */ 33*a45e086dSRatan Gupta void operator()(Context ctx) override 3490bfaea4SRatan Gupta { 3590bfaea4SRatan Gupta for (const auto& n : index) 3690bfaea4SRatan Gupta { 3790bfaea4SRatan Gupta const auto& path = std::get<pathIndex>(n.first); 3890bfaea4SRatan Gupta const auto& propertyMeta = std::get<metaIndex>(n.first); 3990bfaea4SRatan Gupta const auto& value = std::get<valueIndex>(n.second); 4090bfaea4SRatan Gupta 4190bfaea4SRatan Gupta if (!value.get().empty()) 4290bfaea4SRatan Gupta { 4390bfaea4SRatan Gupta createEvent( 4490bfaea4SRatan Gupta path, 4590bfaea4SRatan Gupta propertyMeta, 4690bfaea4SRatan Gupta value); 4790bfaea4SRatan Gupta } 4890bfaea4SRatan Gupta } 4990bfaea4SRatan Gupta 5090bfaea4SRatan Gupta } 5190bfaea4SRatan Gupta 5290bfaea4SRatan Gupta private: 5390bfaea4SRatan Gupta 5490bfaea4SRatan Gupta /** @brief Create the event Dbus Object. 5590bfaea4SRatan Gupta * @param[in] path - Dbus Object Path for which the 5690bfaea4SRatan Gupta * property has changed. 5790bfaea4SRatan Gupta * @param[in] property - Name of the property whose value 5890bfaea4SRatan Gupta * has been changed. 5990bfaea4SRatan Gupta * @param[in] value - Changed property value. 6090bfaea4SRatan Gupta */ 6190bfaea4SRatan Gupta virtual void createEvent( 6290bfaea4SRatan Gupta const std::string& path, 6390bfaea4SRatan Gupta const std::string& property, 6490bfaea4SRatan Gupta const any_ns::any& value) const = 0; 6590bfaea4SRatan Gupta 6690bfaea4SRatan Gupta 6790bfaea4SRatan Gupta }; 6890bfaea4SRatan Gupta 6990bfaea4SRatan Gupta /** @class Event 7090bfaea4SRatan Gupta * @brief C++ type specific logic for the event callback. 7190bfaea4SRatan Gupta * 7290bfaea4SRatan Gupta * @tparam T - The C++ type of the property values being traced. 7390bfaea4SRatan Gupta */ 7490bfaea4SRatan Gupta template <typename T> 7590bfaea4SRatan Gupta class Event : public EventBase 7690bfaea4SRatan Gupta { 7790bfaea4SRatan Gupta public: 7890bfaea4SRatan Gupta Event() = delete; 7990bfaea4SRatan Gupta Event(const Event&) = delete; 8090bfaea4SRatan Gupta Event(Event&&) = default; 8190bfaea4SRatan Gupta Event& operator=(const Event&) = delete; 8290bfaea4SRatan Gupta Event& operator=(Event&&) = default; 8390bfaea4SRatan Gupta ~Event() = default; 8490bfaea4SRatan Gupta 8590bfaea4SRatan Gupta /** @brief Constructor. 8690bfaea4SRatan Gupta * @param[in] eventName - Name of the event. 8790bfaea4SRatan Gupta * @param[in] eventMessage- Event Message. 8890bfaea4SRatan Gupta * @param[in] index - look up index for the properties. 8990bfaea4SRatan Gupta */ 9090bfaea4SRatan Gupta Event(std::string eventName, 9190bfaea4SRatan Gupta std::string eventMessage, 9290bfaea4SRatan Gupta const PropertyIndex& index) : 9390bfaea4SRatan Gupta EventBase(index), 9490bfaea4SRatan Gupta name(eventName), 9590bfaea4SRatan Gupta message(eventMessage) {} 9690bfaea4SRatan Gupta 9790bfaea4SRatan Gupta private: 9890bfaea4SRatan Gupta /** @brief Create the event Dbus Object. 9990bfaea4SRatan Gupta * @param[in] path - Dbus Object Path for which the 10090bfaea4SRatan Gupta * property has changed. 10190bfaea4SRatan Gupta * @param[in] property - Name of the property whose value 10290bfaea4SRatan Gupta * has been changed. 10390bfaea4SRatan Gupta * @param[in] value - Changed property value. 10490bfaea4SRatan Gupta */ 10590bfaea4SRatan Gupta void createEvent( 10690bfaea4SRatan Gupta const std::string& path, 10790bfaea4SRatan Gupta const std::string& property, 10890bfaea4SRatan Gupta const any_ns::any& value) const override {} 10990bfaea4SRatan Gupta 11090bfaea4SRatan Gupta /** @brief Event Name */ 11190bfaea4SRatan Gupta std::string name; 11290bfaea4SRatan Gupta 11390bfaea4SRatan Gupta /** @brief Event Message */ 11490bfaea4SRatan Gupta std::string message; 11590bfaea4SRatan Gupta }; 11690bfaea4SRatan Gupta 11790bfaea4SRatan Gupta } // namespace monitoring 11890bfaea4SRatan Gupta } // namespace dbus 11990bfaea4SRatan Gupta } // namespace phosphor 120