entity-manager: function for building inventory/system path
Tested: on QEMU/yosemite4 with adapted config.
```
root@yosemite4:~# journalctl | grep entity-manager
Apr 03 13:35:06 yosemite4 entity-manager[503]: Clearing previous configuration
Apr 03 13:35:07 yosemite4 entity-manager[503]: dbus command syntax error {"BOARD_MANUFACTURER": "(Quanta|Ingrasys)", BOARD_PRODUCT_NAME": "Ventura FAN Board", "BOARD_INFO_AM4": "adc-max"}
Apr 03 13:35:08 yosemite4 entity-manager[503]: dbus command syntax error {"BOARD_MANUFACTURER": "(Quanta|Ingrasys)", BOARD_PRODUCT_NAME": "Ventura FAN Board", "BOARD_INFO_AM4": "adc-max"}
Apr 03 13:35:08 yosemite4 entity-manager[503]: Inventory Added: Yosemite 4 Management Board
Aug 19 00:22:52 yosemite4 entity-manager[503]: dbus command syntax error {"BOARD_MANUFACTURER": "(Quanta|Ingrasys)", BOARD_PRODUCT_NAME": "Ventura FAN Board", "BOARD_INFO_AM4": "adc-max"}
Aug 19 00:22:59 yosemite4 entity-manager[503]: dbus command syntax error {"BOARD_MANUFACTURER": "(Quanta|Ingrasys)", BOARD_PRODUCT_NAME": "Ventura FAN Board", "BOARD_INFO_AM4": "adc-max"}
root@yosemite4:~# busctl tree xyz.openbmc_project.EntityManager
`- /xyz
`- /xyz/openbmc_project
|- /xyz/openbmc_project/EntityManager
`- /xyz/openbmc_project/inventory
`- /xyz/openbmc_project/inventory/system
`- /xyz/openbmc_project/inventory/system/board
`- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/All_Fan
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P0V6_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P12V_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P1V0_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P1V2_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P1V8_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P2V5_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P3V3_RGM_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P3V3_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P3V_BAT_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P5V_USB_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P5V_VOLT_V
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_TEMP_C
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/PID_NIC_TEMP
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_MGNT_TEMP
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_NIC_TEMP
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_SENTINEL_DOME_SLOT_PRESENT_PERCENTAGE
|- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_VIRTUAL_NIC_TEMP_C
`- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Zone_1
```
Change-Id: I603ea4707e3a9078968b0f76e4a649feb9fdd1c0
Signed-off-by: Christopher Meis <christopher.meis@9elements.com>
diff --git a/src/entity_manager/utils.cpp b/src/entity_manager/utils.cpp
index 90d53d1..8af3dce 100644
--- a/src/entity_manager/utils.cpp
+++ b/src/entity_manager/utils.cpp
@@ -3,6 +3,7 @@
#include "../variant_visitors.hpp"
#include "expression.hpp"
+#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/find.hpp>
#include <boost/algorithm/string/predicate.hpp>
@@ -12,6 +13,9 @@
#include <fstream>
#include <iostream>
+#include <regex>
+
+const std::regex illegalDbusMemberRegex("[^A-Za-z0-9_]");
namespace em_utils
{
@@ -219,4 +223,15 @@
return ret;
}
+std::string buildInventorySystemPath(std::string& boardName,
+ const std::string& boardType)
+{
+ std::string path = "/xyz/openbmc_project/inventory/system/";
+ std::string boardTypeLower = boost::algorithm::to_lower_copy(boardType);
+
+ std::regex_replace(boardName.begin(), boardName.begin(), boardName.end(),
+ illegalDbusMemberRegex, "_");
+
+ return std::format("{}{}/{}", path, boardTypeLower, boardName);
+}
} // namespace em_utils