13c6f29a0SDhruvaraj Subhashchandran #include <phosphor-logging/elog.hpp>
2*151122aaSWilliam A. Kennington III #include <sdbusplus/exception.hpp>
33c6f29a0SDhruvaraj Subhashchandran #include "xyz/openbmc_project/Led/Fru/Monitor/error.hpp"
43c6f29a0SDhruvaraj Subhashchandran #include "xyz/openbmc_project/Led/Mapper/error.hpp"
53c6f29a0SDhruvaraj Subhashchandran #include "elog-errors.hpp"
659b86cd7SDhruvaraj Subhashchandran #include "fru-fault-monitor.hpp"
7891c4769SDhruvaraj Subhashchandran #include <phosphor-logging/elog-errors.hpp>
8891c4769SDhruvaraj Subhashchandran #include "xyz/openbmc_project/Common/error.hpp"
93c6f29a0SDhruvaraj Subhashchandran 
1059b86cd7SDhruvaraj Subhashchandran namespace phosphor
1159b86cd7SDhruvaraj Subhashchandran {
1259b86cd7SDhruvaraj Subhashchandran namespace led
1359b86cd7SDhruvaraj Subhashchandran {
1459b86cd7SDhruvaraj Subhashchandran namespace fru
1559b86cd7SDhruvaraj Subhashchandran {
1659b86cd7SDhruvaraj Subhashchandran namespace fault
1759b86cd7SDhruvaraj Subhashchandran {
1859b86cd7SDhruvaraj Subhashchandran namespace monitor
1959b86cd7SDhruvaraj Subhashchandran {
2059b86cd7SDhruvaraj Subhashchandran 
213c6f29a0SDhruvaraj Subhashchandran using namespace phosphor::logging;
223c6f29a0SDhruvaraj Subhashchandran 
233c6f29a0SDhruvaraj Subhashchandran constexpr auto MAPPER_BUSNAME   = "xyz.openbmc_project.ObjectMapper";
243c6f29a0SDhruvaraj Subhashchandran constexpr auto MAPPER_OBJ_PATH  = "/xyz/openbmc_project/object_mapper";
253c6f29a0SDhruvaraj Subhashchandran constexpr auto MAPPER_IFACE     = "xyz.openbmc_project.ObjectMapper";
263c6f29a0SDhruvaraj Subhashchandran constexpr auto OBJMGR_IFACE     = "org.freedesktop.DBus.ObjectManager";
273c6f29a0SDhruvaraj Subhashchandran constexpr auto LED_GROUPS       = "/xyz/openbmc_project/led/groups/";
283c6f29a0SDhruvaraj Subhashchandran constexpr auto LOG_PATH         = "/xyz/openbmc_project/logging";
29891c4769SDhruvaraj Subhashchandran constexpr auto LOG_IFACE        = "xyz.openbmc_project.Logging.Entry";
303c6f29a0SDhruvaraj Subhashchandran 
313c6f29a0SDhruvaraj Subhashchandran using AssociationList = std::vector<std::tuple<
323c6f29a0SDhruvaraj Subhashchandran                         std::string, std::string, std::string>>;
33aebfde81SDhruvaraj Subhashchandran using Attributes = sdbusplus::message::variant<bool,AssociationList>;
34aebfde81SDhruvaraj Subhashchandran using AttributeName = std::string;
35aebfde81SDhruvaraj Subhashchandran using AttributeMap = std::map<AttributeName, Attributes>;
36aebfde81SDhruvaraj Subhashchandran using PropertyName = std::string;
37aebfde81SDhruvaraj Subhashchandran using PropertyMap = std::map<PropertyName, AttributeMap>;
38aebfde81SDhruvaraj Subhashchandran using LogEntryMsg = std::pair<sdbusplus::message::object_path, PropertyMap>;
39aebfde81SDhruvaraj Subhashchandran 
40891c4769SDhruvaraj Subhashchandran using Service = std::string;
41891c4769SDhruvaraj Subhashchandran using Path = std::string;
42891c4769SDhruvaraj Subhashchandran using Interface = std::string;
43891c4769SDhruvaraj Subhashchandran using Interfaces = std::vector<Interface>;
44891c4769SDhruvaraj Subhashchandran using MapperResponseType = std::map<Path, std::map<Service, Interfaces>>;
45891c4769SDhruvaraj Subhashchandran 
46891c4769SDhruvaraj Subhashchandran using InternalFailure =
47891c4769SDhruvaraj Subhashchandran     sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
48891c4769SDhruvaraj Subhashchandran 
493c6f29a0SDhruvaraj Subhashchandran using MethodErr  =
503c6f29a0SDhruvaraj Subhashchandran     sdbusplus::xyz::openbmc_project::Led::Mapper::Error::MethodError;
513c6f29a0SDhruvaraj Subhashchandran using ObjectNotFoundErr =
523c6f29a0SDhruvaraj Subhashchandran     sdbusplus::xyz::openbmc_project::Led::Mapper::Error::ObjectNotFoundError;
533c6f29a0SDhruvaraj Subhashchandran using InventoryPathErr =
543c6f29a0SDhruvaraj Subhashchandran     sdbusplus::xyz::openbmc_project::
553c6f29a0SDhruvaraj Subhashchandran     Led::Fru::Monitor::Error::InventoryPathError;
563c6f29a0SDhruvaraj Subhashchandran 
573c6f29a0SDhruvaraj Subhashchandran std::string getService(sdbusplus::bus::bus& bus,
583c6f29a0SDhruvaraj Subhashchandran                        const std::string& path)
593c6f29a0SDhruvaraj Subhashchandran {
603c6f29a0SDhruvaraj Subhashchandran     auto mapper = bus.new_method_call(MAPPER_BUSNAME,
613c6f29a0SDhruvaraj Subhashchandran                                       MAPPER_OBJ_PATH,
623c6f29a0SDhruvaraj Subhashchandran                                       MAPPER_IFACE, "GetObject");
633c6f29a0SDhruvaraj Subhashchandran     mapper.append(path.c_str(), std::vector<std::string>({OBJMGR_IFACE}));
643c6f29a0SDhruvaraj Subhashchandran     auto mapperResponseMsg = bus.call(mapper);
653c6f29a0SDhruvaraj Subhashchandran     if (mapperResponseMsg.is_method_error())
663c6f29a0SDhruvaraj Subhashchandran     {
673c6f29a0SDhruvaraj Subhashchandran         using namespace xyz::openbmc_project::Led::Mapper;
683c6f29a0SDhruvaraj Subhashchandran         elog<MethodErr>(
693c6f29a0SDhruvaraj Subhashchandran             MethodError::METHOD_NAME("GetObject"),
703c6f29a0SDhruvaraj Subhashchandran             MethodError::PATH(path.c_str()),
713c6f29a0SDhruvaraj Subhashchandran             MethodError::INTERFACE(
723c6f29a0SDhruvaraj Subhashchandran                 OBJMGR_IFACE));
733c6f29a0SDhruvaraj Subhashchandran     }
743c6f29a0SDhruvaraj Subhashchandran 
753c6f29a0SDhruvaraj Subhashchandran     std::map<std::string, std::vector<std::string>> mapperResponse;
76*151122aaSWilliam A. Kennington III     try
77*151122aaSWilliam A. Kennington III     {
783c6f29a0SDhruvaraj Subhashchandran         mapperResponseMsg.read(mapperResponse);
79*151122aaSWilliam A. Kennington III     }
80*151122aaSWilliam A. Kennington III     catch (const sdbusplus::exception::SdBusError& e)
81*151122aaSWilliam A. Kennington III     {
82*151122aaSWilliam A. Kennington III         log<level::ERR>("Failed to parse getService mapper response",
83*151122aaSWilliam A. Kennington III                         entry("ERROR=%s", e.what()),
84*151122aaSWilliam A. Kennington III                         entry("REPLY_SIG=%s", mapperResponseMsg.get_signature()));
85*151122aaSWilliam A. Kennington III         using namespace xyz::openbmc_project::Led::Mapper;
86*151122aaSWilliam A. Kennington III         elog<ObjectNotFoundErr>(
87*151122aaSWilliam A. Kennington III             ObjectNotFoundError::METHOD_NAME("GetObject"),
88*151122aaSWilliam A. Kennington III             ObjectNotFoundError::PATH(path.c_str()),
89*151122aaSWilliam A. Kennington III             ObjectNotFoundError::INTERFACE(
90*151122aaSWilliam A. Kennington III                 OBJMGR_IFACE));
91*151122aaSWilliam A. Kennington III     }
923c6f29a0SDhruvaraj Subhashchandran     if (mapperResponse.empty())
933c6f29a0SDhruvaraj Subhashchandran     {
943c6f29a0SDhruvaraj Subhashchandran         using namespace xyz::openbmc_project::Led::Mapper;
953c6f29a0SDhruvaraj Subhashchandran         elog<ObjectNotFoundErr>(
963c6f29a0SDhruvaraj Subhashchandran             ObjectNotFoundError::METHOD_NAME("GetObject"),
973c6f29a0SDhruvaraj Subhashchandran             ObjectNotFoundError::PATH(path.c_str()),
983c6f29a0SDhruvaraj Subhashchandran             ObjectNotFoundError::INTERFACE(
993c6f29a0SDhruvaraj Subhashchandran                 OBJMGR_IFACE));
1003c6f29a0SDhruvaraj Subhashchandran     }
1013c6f29a0SDhruvaraj Subhashchandran 
1023c6f29a0SDhruvaraj Subhashchandran     return mapperResponse.cbegin()->first;
1033c6f29a0SDhruvaraj Subhashchandran }
1043c6f29a0SDhruvaraj Subhashchandran 
10559b86cd7SDhruvaraj Subhashchandran void action(sdbusplus::bus::bus& bus,
1063c6f29a0SDhruvaraj Subhashchandran             const std::string& path,
10759b86cd7SDhruvaraj Subhashchandran             bool assert)
10859b86cd7SDhruvaraj Subhashchandran {
1093c6f29a0SDhruvaraj Subhashchandran     std::string service;
1103c6f29a0SDhruvaraj Subhashchandran     try
1113c6f29a0SDhruvaraj Subhashchandran     {
1123c6f29a0SDhruvaraj Subhashchandran         service = getService(bus, LED_GROUPS);
1133c6f29a0SDhruvaraj Subhashchandran     }
1143c6f29a0SDhruvaraj Subhashchandran     catch (MethodErr& e)
1153c6f29a0SDhruvaraj Subhashchandran     {
1163c6f29a0SDhruvaraj Subhashchandran         commit<MethodErr>();
1173c6f29a0SDhruvaraj Subhashchandran         return;
1183c6f29a0SDhruvaraj Subhashchandran     }
1193c6f29a0SDhruvaraj Subhashchandran     catch (ObjectNotFoundErr& e)
1203c6f29a0SDhruvaraj Subhashchandran     {
1213c6f29a0SDhruvaraj Subhashchandran         commit<ObjectNotFoundErr>();
1223c6f29a0SDhruvaraj Subhashchandran         return;
1233c6f29a0SDhruvaraj Subhashchandran     }
1243c6f29a0SDhruvaraj Subhashchandran 
1253c6f29a0SDhruvaraj Subhashchandran     auto pos = path.rfind("/");
1263c6f29a0SDhruvaraj Subhashchandran     if (pos == std::string::npos)
1273c6f29a0SDhruvaraj Subhashchandran     {
1283c6f29a0SDhruvaraj Subhashchandran         using namespace xyz::openbmc_project::Led::Fru::Monitor;
1293c6f29a0SDhruvaraj Subhashchandran         report<InventoryPathErr>(
1303c6f29a0SDhruvaraj Subhashchandran             InventoryPathError::PATH(
1313c6f29a0SDhruvaraj Subhashchandran                 path.c_str()));
1323c6f29a0SDhruvaraj Subhashchandran         return;
1333c6f29a0SDhruvaraj Subhashchandran     }
1343c6f29a0SDhruvaraj Subhashchandran     auto unit = path.substr(pos + 1);
1353c6f29a0SDhruvaraj Subhashchandran 
1363c6f29a0SDhruvaraj Subhashchandran     std::string ledPath = LED_GROUPS +
1373c6f29a0SDhruvaraj Subhashchandran                           unit + '_' + LED_FAULT;
1383c6f29a0SDhruvaraj Subhashchandran 
1393c6f29a0SDhruvaraj Subhashchandran     auto method =  bus.new_method_call(service.c_str(),
1403c6f29a0SDhruvaraj Subhashchandran                                        ledPath.c_str(),
1413c6f29a0SDhruvaraj Subhashchandran                                        "org.freedesktop.DBus.Properties",
1423c6f29a0SDhruvaraj Subhashchandran                                        "Set");
1433c6f29a0SDhruvaraj Subhashchandran     method.append("xyz.openbmc_project.Led.Group");
1443c6f29a0SDhruvaraj Subhashchandran     method.append("Asserted");
1453c6f29a0SDhruvaraj Subhashchandran 
1463c6f29a0SDhruvaraj Subhashchandran     method.append(sdbusplus::message::variant<bool>(assert));
1473c6f29a0SDhruvaraj Subhashchandran     bus.call_noreply(method);
1483c6f29a0SDhruvaraj Subhashchandran 
14959b86cd7SDhruvaraj Subhashchandran     return;
15059b86cd7SDhruvaraj Subhashchandran }
15159b86cd7SDhruvaraj Subhashchandran 
1523eedbe44SPatrick Williams void Add::created(sdbusplus::message::message& msg)
15359b86cd7SDhruvaraj Subhashchandran {
1543eedbe44SPatrick Williams     auto bus = msg.get_bus();
1553c6f29a0SDhruvaraj Subhashchandran 
156aebfde81SDhruvaraj Subhashchandran     LogEntryMsg logEntry;
157*151122aaSWilliam A. Kennington III     try
158*151122aaSWilliam A. Kennington III     {
159aebfde81SDhruvaraj Subhashchandran         msg.read(logEntry);
160*151122aaSWilliam A. Kennington III     }
161*151122aaSWilliam A. Kennington III     catch (const sdbusplus::exception::SdBusError& e)
162*151122aaSWilliam A. Kennington III     {
163*151122aaSWilliam A. Kennington III         log<level::ERR>("Failed to parse created message",
164*151122aaSWilliam A. Kennington III                         entry("ERROR=%s", e.what()),
165*151122aaSWilliam A. Kennington III                         entry("REPLY_SIG=%s", msg.get_signature()));
166*151122aaSWilliam A. Kennington III         return;
167*151122aaSWilliam A. Kennington III     }
168aebfde81SDhruvaraj Subhashchandran     std::string objectPath(std::move(logEntry.first));
1693c6f29a0SDhruvaraj Subhashchandran 
1703c6f29a0SDhruvaraj Subhashchandran     std::size_t found = objectPath.find(ELOG_ENTRY);
1713c6f29a0SDhruvaraj Subhashchandran     if (found == std::string::npos)
1723c6f29a0SDhruvaraj Subhashchandran     {
1733c6f29a0SDhruvaraj Subhashchandran         //Not a new error entry skip
1743eedbe44SPatrick Williams         return;
1753c6f29a0SDhruvaraj Subhashchandran     }
176aebfde81SDhruvaraj Subhashchandran     auto iter = logEntry.second.find("org.openbmc.Associations");
177aebfde81SDhruvaraj Subhashchandran     if (iter == logEntry.second.end())
1783c6f29a0SDhruvaraj Subhashchandran     {
1793eedbe44SPatrick Williams         return;
1803c6f29a0SDhruvaraj Subhashchandran     }
1813c6f29a0SDhruvaraj Subhashchandran 
1823d2b0d62SMatt Spinler     //Nothing else shows when a specific error log
1833d2b0d62SMatt Spinler     //has been created. Do it here.
1843d2b0d62SMatt Spinler     std::string message{objectPath + " created"};
1853d2b0d62SMatt Spinler     log<level::INFO>(message.c_str());
1863d2b0d62SMatt Spinler 
187aebfde81SDhruvaraj Subhashchandran     auto attr = iter->second.find("associations");
188aebfde81SDhruvaraj Subhashchandran     if (attr == iter->second.end())
1893c6f29a0SDhruvaraj Subhashchandran     {
1903eedbe44SPatrick Williams         return;
1913c6f29a0SDhruvaraj Subhashchandran     }
1923c6f29a0SDhruvaraj Subhashchandran 
193aebfde81SDhruvaraj Subhashchandran     auto& assocs =
194aebfde81SDhruvaraj Subhashchandran         sdbusplus::message::variant_ns::get<AssociationList>(attr->second);
1953c6f29a0SDhruvaraj Subhashchandran     if (assocs.empty())
1963c6f29a0SDhruvaraj Subhashchandran     {
1973c6f29a0SDhruvaraj Subhashchandran         //No associations skip
1983eedbe44SPatrick Williams         return;
1993c6f29a0SDhruvaraj Subhashchandran     }
2003c6f29a0SDhruvaraj Subhashchandran 
2013c6f29a0SDhruvaraj Subhashchandran     for (const auto& item : assocs)
2023c6f29a0SDhruvaraj Subhashchandran     {
2033c6f29a0SDhruvaraj Subhashchandran         if (std::get<1>(item).compare(CALLOUT_REV_ASSOCIATION) == 0)
2043c6f29a0SDhruvaraj Subhashchandran         {
2053eedbe44SPatrick Williams             removeWatches.emplace_back(
2063c6f29a0SDhruvaraj Subhashchandran                 std::make_unique<Remove>(bus, std::get<2>(item)));
207891c4769SDhruvaraj Subhashchandran             action(bus, std::get<2>(item), true);
2083c6f29a0SDhruvaraj Subhashchandran         }
2093c6f29a0SDhruvaraj Subhashchandran     }
210aebfde81SDhruvaraj Subhashchandran 
2113eedbe44SPatrick Williams     return;
21259b86cd7SDhruvaraj Subhashchandran }
21359b86cd7SDhruvaraj Subhashchandran 
214891c4769SDhruvaraj Subhashchandran void Add::processExistingCallouts(sdbusplus::bus::bus& bus)
215891c4769SDhruvaraj Subhashchandran {
216891c4769SDhruvaraj Subhashchandran     auto depth = 0;
217891c4769SDhruvaraj Subhashchandran     auto mapperCall = bus.new_method_call(MAPPER_BUSNAME,
218891c4769SDhruvaraj Subhashchandran                                           MAPPER_OBJ_PATH,
219891c4769SDhruvaraj Subhashchandran                                           MAPPER_IFACE,
220891c4769SDhruvaraj Subhashchandran                                           "GetSubTree");
221891c4769SDhruvaraj Subhashchandran     mapperCall.append("/");
222891c4769SDhruvaraj Subhashchandran     mapperCall.append(depth);
223891c4769SDhruvaraj Subhashchandran     mapperCall.append(std::vector<Interface>({LOG_IFACE}));
224891c4769SDhruvaraj Subhashchandran 
225891c4769SDhruvaraj Subhashchandran     auto mapperResponseMsg = bus.call(mapperCall);
226891c4769SDhruvaraj Subhashchandran     if (mapperResponseMsg.is_method_error())
227891c4769SDhruvaraj Subhashchandran     {
228891c4769SDhruvaraj Subhashchandran         using namespace xyz::openbmc_project::Led::Mapper;
229891c4769SDhruvaraj Subhashchandran         report<MethodErr>(
230891c4769SDhruvaraj Subhashchandran             MethodError::METHOD_NAME("GetSubTree"),
231891c4769SDhruvaraj Subhashchandran             MethodError::PATH(MAPPER_OBJ_PATH),
232891c4769SDhruvaraj Subhashchandran             MethodError::INTERFACE(
233891c4769SDhruvaraj Subhashchandran                 OBJMGR_IFACE));
234891c4769SDhruvaraj Subhashchandran         return;
235891c4769SDhruvaraj Subhashchandran     }
236891c4769SDhruvaraj Subhashchandran 
237891c4769SDhruvaraj Subhashchandran     MapperResponseType mapperResponse;
238*151122aaSWilliam A. Kennington III     try
239*151122aaSWilliam A. Kennington III     {
240891c4769SDhruvaraj Subhashchandran         mapperResponseMsg.read(mapperResponse);
241*151122aaSWilliam A. Kennington III     }
242*151122aaSWilliam A. Kennington III     catch (const sdbusplus::exception::SdBusError& e)
243*151122aaSWilliam A. Kennington III     {
244*151122aaSWilliam A. Kennington III         log<level::ERR>("Failed to parse existing callouts subtree message",
245*151122aaSWilliam A. Kennington III                         entry("ERROR=%s", e.what()),
246*151122aaSWilliam A. Kennington III                         entry("REPLY_SIG=%s", mapperResponseMsg.get_signature()));
247*151122aaSWilliam A. Kennington III         return;
248*151122aaSWilliam A. Kennington III     }
249891c4769SDhruvaraj Subhashchandran     if (mapperResponse.empty())
250891c4769SDhruvaraj Subhashchandran     {
251fc30e0c1SDhruvaraj Subhashchandran         //No errors to process.
252891c4769SDhruvaraj Subhashchandran         return;
253891c4769SDhruvaraj Subhashchandran     }
254891c4769SDhruvaraj Subhashchandran 
255891c4769SDhruvaraj Subhashchandran     for (const auto& elem : mapperResponse)
256891c4769SDhruvaraj Subhashchandran     {
257891c4769SDhruvaraj Subhashchandran         auto method =  bus.new_method_call(elem.second.begin()->first.c_str(),
258891c4769SDhruvaraj Subhashchandran                                            elem.first.c_str(),
259891c4769SDhruvaraj Subhashchandran                                            "org.freedesktop.DBus.Properties",
260891c4769SDhruvaraj Subhashchandran                                            "Get");
261891c4769SDhruvaraj Subhashchandran         method.append("org.openbmc.Associations");
262891c4769SDhruvaraj Subhashchandran         method.append("associations");
263891c4769SDhruvaraj Subhashchandran         auto reply = bus.call(method);
264891c4769SDhruvaraj Subhashchandran         if (reply.is_method_error())
265891c4769SDhruvaraj Subhashchandran         {
266891c4769SDhruvaraj Subhashchandran             //do not stop, continue with next elog
267891c4769SDhruvaraj Subhashchandran             log<level::ERR>("Error in getting associations");
268891c4769SDhruvaraj Subhashchandran             continue;
269891c4769SDhruvaraj Subhashchandran         }
270891c4769SDhruvaraj Subhashchandran 
271891c4769SDhruvaraj Subhashchandran         sdbusplus::message::variant<AssociationList> assoc;
272*151122aaSWilliam A. Kennington III         try
273*151122aaSWilliam A. Kennington III         {
274891c4769SDhruvaraj Subhashchandran             reply.read(assoc);
275*151122aaSWilliam A. Kennington III         }
276*151122aaSWilliam A. Kennington III         catch (const sdbusplus::exception::SdBusError& e)
277*151122aaSWilliam A. Kennington III         {
278*151122aaSWilliam A. Kennington III             log<level::ERR>("Failed to parse existing callouts associations message",
279*151122aaSWilliam A. Kennington III                             entry("ERROR=%s", e.what()),
280*151122aaSWilliam A. Kennington III                             entry("REPLY_SIG=%s", reply.get_signature()));
281*151122aaSWilliam A. Kennington III             continue;
282*151122aaSWilliam A. Kennington III         }
283891c4769SDhruvaraj Subhashchandran         auto& assocs = assoc.get<AssociationList>();
284891c4769SDhruvaraj Subhashchandran         if (assocs.empty())
285891c4769SDhruvaraj Subhashchandran         {
286891c4769SDhruvaraj Subhashchandran             //no associations, skip
287891c4769SDhruvaraj Subhashchandran             continue;
288891c4769SDhruvaraj Subhashchandran         }
289891c4769SDhruvaraj Subhashchandran 
290891c4769SDhruvaraj Subhashchandran         for (const auto& item : assocs)
291891c4769SDhruvaraj Subhashchandran         {
292891c4769SDhruvaraj Subhashchandran             if (std::get<1>(item).compare(CALLOUT_REV_ASSOCIATION) == 0)
293891c4769SDhruvaraj Subhashchandran             {
294891c4769SDhruvaraj Subhashchandran                 removeWatches.emplace_back(
295891c4769SDhruvaraj Subhashchandran                     std::make_unique<Remove>(bus, std::get<2>(item)));
296891c4769SDhruvaraj Subhashchandran                 action(bus, std::get<2>(item), true);
297891c4769SDhruvaraj Subhashchandran             }
298891c4769SDhruvaraj Subhashchandran         }
299891c4769SDhruvaraj Subhashchandran     }
300891c4769SDhruvaraj Subhashchandran }
301891c4769SDhruvaraj Subhashchandran 
3023eedbe44SPatrick Williams void Remove::removed(sdbusplus::message::message& msg)
30359b86cd7SDhruvaraj Subhashchandran {
3043eedbe44SPatrick Williams     auto bus = msg.get_bus();
3053c6f29a0SDhruvaraj Subhashchandran 
3063eedbe44SPatrick Williams     action(bus, inventoryPath, false);
3073eedbe44SPatrick Williams     return;
30859b86cd7SDhruvaraj Subhashchandran }
30959b86cd7SDhruvaraj Subhashchandran 
31059b86cd7SDhruvaraj Subhashchandran }//namespace monitor
31159b86cd7SDhruvaraj Subhashchandran }//namespace fault
31259b86cd7SDhruvaraj Subhashchandran }//namespace fru
31359b86cd7SDhruvaraj Subhashchandran }//namespace led
31459b86cd7SDhruvaraj Subhashchandran }//namespace phosphor
315