blob: d47a54ee111350d9924aa422d6dcd852cf28fa16 [file] [log] [blame]
Alexander Hansen90e4f052025-10-10 22:58:01 +02001#include "log_device_inventory.hpp"
2
Alexander Hansenf57a2592025-06-27 15:07:07 +02003#include "../utils.hpp"
4
5#include <systemd/sd-journal.h>
6
Alexander Hansenf57a2592025-06-27 15:07:07 +02007#include <nlohmann/json.hpp>
Alexander Hansenc58af0b2025-09-12 15:47:19 +02008#include <xyz/openbmc_project/Inventory/Decorator/Asset/common.hpp>
Alexander Hansenf57a2592025-06-27 15:07:07 +02009
Ed Tanousdbf95b22025-10-13 11:38:35 -070010#include <flat_map>
Alexander Hansenf57a2592025-06-27 15:07:07 +020011#include <string>
12
Alexander Hansen90e4f052025-10-10 22:58:01 +020013static void setStringIfFound(std::string& value, const std::string& key,
14 const nlohmann::json& record, bool dump = false)
Alexander Hansen71fbff72025-10-09 18:06:12 +020015{
Alexander Hansen90e4f052025-10-10 22:58:01 +020016 const nlohmann::json::const_iterator find = record.find(key);
Alexander Hansen71fbff72025-10-09 18:06:12 +020017
Alexander Hansen90e4f052025-10-10 22:58:01 +020018 if (find == record.end())
Alexander Hansen71fbff72025-10-09 18:06:12 +020019 {
Alexander Hansen90e4f052025-10-10 22:58:01 +020020 return;
Alexander Hansen71fbff72025-10-09 18:06:12 +020021 }
Alexander Hansen90e4f052025-10-10 22:58:01 +020022
23 const std::string* foundValue = find->get_ptr<const std::string*>();
24 if (foundValue != nullptr)
25 {
26 value = *foundValue;
27 }
28 else if (dump)
29 {
30 value = find->dump();
31 }
32}
33
34InvAddRemoveInfo queryInvInfo(const nlohmann::json& record)
35{
36 InvAddRemoveInfo ret;
37
38 setStringIfFound(ret.type, "Type", record);
39 setStringIfFound(ret.name, "Name", record);
40
41 const nlohmann::json::const_iterator findAsset = record.find(
42 sdbusplus::common::xyz::openbmc_project::inventory::decorator::Asset::
43 interface);
44
Alexander Hansen71fbff72025-10-09 18:06:12 +020045 if (findAsset != record.end())
46 {
Alexander Hansen90e4f052025-10-10 22:58:01 +020047 setStringIfFound(ret.model, "Model", *findAsset);
48 setStringIfFound(ret.sn, "SerialNumber", *findAsset, true);
Alexander Hansen71fbff72025-10-09 18:06:12 +020049 }
50
Alexander Hansen90e4f052025-10-10 22:58:01 +020051 return ret;
Alexander Hansen71fbff72025-10-09 18:06:12 +020052}
53
Alexander Hansenf57a2592025-06-27 15:07:07 +020054void logDeviceAdded(const nlohmann::json& record)
55{
Alexander Hansene6651852025-01-21 16:22:05 +010056 if (!EM_CACHE_CONFIGURATION)
57 {
58 return;
59 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020060 if (!deviceHasLogging(record))
61 {
62 return;
63 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020064
Alexander Hansen90e4f052025-10-10 22:58:01 +020065 const InvAddRemoveInfo info = queryInvInfo(record);
Alexander Hansenf57a2592025-06-27 15:07:07 +020066
Alexander Hansen71fbff72025-10-09 18:06:12 +020067 sd_journal_send(
68 "MESSAGE=Inventory Added: %s", info.name.c_str(), "PRIORITY=%i",
69 LOG_INFO, "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryAdded",
70 "REDFISH_MESSAGE_ARGS=%s,%s,%s", info.model.c_str(), info.type.c_str(),
71 info.sn.c_str(), "NAME=%s", info.name.c_str(), NULL);
Alexander Hansenf57a2592025-06-27 15:07:07 +020072}
73
74void logDeviceRemoved(const nlohmann::json& record)
75{
76 if (!deviceHasLogging(record))
77 {
78 return;
79 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020080
Alexander Hansen90e4f052025-10-10 22:58:01 +020081 const InvAddRemoveInfo info = queryInvInfo(record);
Alexander Hansenf57a2592025-06-27 15:07:07 +020082
Alexander Hansen71fbff72025-10-09 18:06:12 +020083 sd_journal_send(
84 "MESSAGE=Inventory Removed: %s", info.name.c_str(), "PRIORITY=%i",
85 LOG_INFO, "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryRemoved",
86 "REDFISH_MESSAGE_ARGS=%s,%s,%s", info.model.c_str(), info.type.c_str(),
87 info.sn.c_str(), "NAME=%s", info.name.c_str(), NULL);
Alexander Hansenf57a2592025-06-27 15:07:07 +020088}