entity-manager: deduplicate code in logDeviceAdded
`logDeviceAdded' and `logDeviceRemoved` were using identical code to
query their information from json.
```
diff <(sed -n '20,60p' src/entity_manager/log_device_inventory.cpp) <(sed -n '74,114p' src/entity_manager/log_device_inventory.cpp); echo $?
0
```
Deduplicate the code to prevent future code drift and increase
readability.
Tested: on Tyan S8030
Journal logs appear as expected
```
Oct 09 16:16:52 s8030-bmc-30303035c0c1 entity-manager[7281]: Inventory Added: Supermicro PWS 920P SQ 0
Oct 09 16:16:52 s8030-bmc-30303035c0c1 entity-manager[7281]: Inventory Added: Supermicro PWS 920P SQ 1
Oct 09 16:16:52 s8030-bmc-30303035c0c1 entity-manager[7281]: Inventory Added: Tyan S8030 Baseboard
```
```
PRIORITY=6
_BOOT_ID=9c09f24836074e7a95a7eb0fc88c9b42
_MACHINE_ID=980464f768884a9a8b76eacd41d988bd
_HOSTNAME=s8030-bmc-30303035c0c1
_RUNTIME_SCOPE=system
_UID=0
_GID=0
_SYSTEMD_SLICE=system.slice
_TRANSPORT=journal
_CAP_EFFECTIVE=1ffffffffff
CODE_LINE=77
CODE_FILE=../git/src/entity_manager/log_device_inventory.cpp
CODE_FUNC=logDeviceAdded
REDFISH_MESSAGE_ID=OpenBMC.0.1.InventoryAdded
SYSLOG_IDENTIFIER=entity-manager
_COMM=entity-manager
_EXE=/usr/libexec/entity-manager/entity-manager
_CMDLINE=/usr/libexec/entity-manager/entity-manager
_SYSTEMD_CGROUP=/system.slice/xyz.openbmc_project.EntityManager.service
_SYSTEMD_UNIT=xyz.openbmc_project.EntityManager.service
MESSAGE=Inventory Added: Supermicro PWS 920P SQ 1
REDFISH_MESSAGE_ARGS=PWS-920P-SQ,PowerSupply,P9212CK03EN1643
NAME=Supermicro PWS 920P SQ 1
_PID=7281
_SYSTEMD_INVOCATION_ID=cf27821a00954b4c84a116c263c39bff
_SOURCE_REALTIME_TIMESTAMP=1760026612675043
```
Change-Id: I0a51dc781d12069f766f9da9c0a595abd3ae1847
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/src/entity_manager/log_device_inventory.cpp b/src/entity_manager/log_device_inventory.cpp
index 5a8a918..5dd97d1 100644
--- a/src/entity_manager/log_device_inventory.cpp
+++ b/src/entity_manager/log_device_inventory.cpp
@@ -7,6 +7,60 @@
#include <string>
+struct InvAddRemoveInfo
+{
+ std::string model = "Unknown";
+ std::string type = "Unknown";
+ std::string sn = "Unknown";
+ std::string name = "Unknown";
+};
+
+static InvAddRemoveInfo queryInvInfo(const nlohmann::json& record)
+{
+ auto findType = record.find("Type");
+ auto findAsset =
+ record.find("xyz.openbmc_project.Inventory.Decorator.Asset");
+
+ std::string model = "Unknown";
+ std::string type = "Unknown";
+ std::string sn = "Unknown";
+ std::string name = "Unknown";
+
+ if (findType != record.end())
+ {
+ type = findType->get<std::string>();
+ }
+ if (findAsset != record.end())
+ {
+ auto findModel = findAsset->find("Model");
+ auto findSn = findAsset->find("SerialNumber");
+ if (findModel != findAsset->end())
+ {
+ model = findModel->get<std::string>();
+ }
+ if (findSn != findAsset->end())
+ {
+ const std::string* getSn = findSn->get_ptr<const std::string*>();
+ if (getSn != nullptr)
+ {
+ sn = *getSn;
+ }
+ else
+ {
+ sn = findSn->dump();
+ }
+ }
+ }
+
+ auto findName = record.find("Name");
+ if (findName != record.end())
+ {
+ name = findName->get<std::string>();
+ }
+
+ return {model, type, sn, name};
+}
+
void logDeviceAdded(const nlohmann::json& record)
{
if (!EM_CACHE_CONFIGURATION)
@@ -17,52 +71,14 @@
{
return;
}
- auto findType = record.find("Type");
- auto findAsset =
- record.find("xyz.openbmc_project.Inventory.Decorator.Asset");
- std::string model = "Unknown";
- std::string type = "Unknown";
- std::string sn = "Unknown";
- std::string name = "Unknown";
+ const auto info = queryInvInfo(record);
- if (findType != record.end())
- {
- type = findType->get<std::string>();
- }
- if (findAsset != record.end())
- {
- auto findModel = findAsset->find("Model");
- auto findSn = findAsset->find("SerialNumber");
- if (findModel != findAsset->end())
- {
- model = findModel->get<std::string>();
- }
- if (findSn != findAsset->end())
- {
- const std::string* getSn = findSn->get_ptr<const std::string*>();
- if (getSn != nullptr)
- {
- sn = *getSn;
- }
- else
- {
- sn = findSn->dump();
- }
- }
- }
-
- auto findName = record.find("Name");
- if (findName != record.end())
- {
- name = findName->get<std::string>();
- }
-
- sd_journal_send("MESSAGE=Inventory Added: %s", name.c_str(), "PRIORITY=%i",
- LOG_INFO, "REDFISH_MESSAGE_ID=%s",
- "OpenBMC.0.1.InventoryAdded",
- "REDFISH_MESSAGE_ARGS=%s,%s,%s", model.c_str(),
- type.c_str(), sn.c_str(), "NAME=%s", name.c_str(), NULL);
+ sd_journal_send(
+ "MESSAGE=Inventory Added: %s", info.name.c_str(), "PRIORITY=%i",
+ LOG_INFO, "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryAdded",
+ "REDFISH_MESSAGE_ARGS=%s,%s,%s", info.model.c_str(), info.type.c_str(),
+ info.sn.c_str(), "NAME=%s", info.name.c_str(), NULL);
}
void logDeviceRemoved(const nlohmann::json& record)
@@ -71,50 +87,12 @@
{
return;
}
- auto findType = record.find("Type");
- auto findAsset =
- record.find("xyz.openbmc_project.Inventory.Decorator.Asset");
- std::string model = "Unknown";
- std::string type = "Unknown";
- std::string sn = "Unknown";
- std::string name = "Unknown";
+ const auto info = queryInvInfo(record);
- if (findType != record.end())
- {
- type = findType->get<std::string>();
- }
- if (findAsset != record.end())
- {
- auto findModel = findAsset->find("Model");
- auto findSn = findAsset->find("SerialNumber");
- if (findModel != findAsset->end())
- {
- model = findModel->get<std::string>();
- }
- if (findSn != findAsset->end())
- {
- const std::string* getSn = findSn->get_ptr<const std::string*>();
- if (getSn != nullptr)
- {
- sn = *getSn;
- }
- else
- {
- sn = findSn->dump();
- }
- }
- }
-
- auto findName = record.find("Name");
- if (findName != record.end())
- {
- name = findName->get<std::string>();
- }
-
- sd_journal_send("MESSAGE=Inventory Removed: %s", name.c_str(),
- "PRIORITY=%i", LOG_INFO, "REDFISH_MESSAGE_ID=%s",
- "OpenBMC.0.1.InventoryRemoved",
- "REDFISH_MESSAGE_ARGS=%s,%s,%s", model.c_str(),
- type.c_str(), sn.c_str(), "NAME=%s", name.c_str(), NULL);
+ sd_journal_send(
+ "MESSAGE=Inventory Removed: %s", info.name.c_str(), "PRIORITY=%i",
+ LOG_INFO, "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryRemoved",
+ "REDFISH_MESSAGE_ARGS=%s,%s,%s", info.model.c_str(), info.type.c_str(),
+ info.sn.c_str(), "NAME=%s", info.name.c_str(), NULL);
}