Add BMC UUID to BmcStaticMetrics.
Introduce a new field `bmc_uuid_` in `BmcStaticMetrics` and add a method `FetchBmcUuid` to retrieve the BMC's UUID during initialization.
#tlbmc
#pid-tlbmc-migration
PiperOrigin-RevId: 826174773
Change-Id: I59469498dcfcc962ed0ddd07bf4461e6d8059644
diff --git a/tlbmc/metrics/bmc_static_metrics.cc b/tlbmc/metrics/bmc_static_metrics.cc
index 4304ce7..049478a 100644
--- a/tlbmc/metrics/bmc_static_metrics.cc
+++ b/tlbmc/metrics/bmc_static_metrics.cc
@@ -1,5 +1,8 @@
#include "tlbmc/metrics/bmc_static_metrics.h"
+#include <sys/sysinfo.h>
+#include <systemd/sd-id128.h>
+
#include <array>
#include <cstdint>
#include <filesystem> // NOLINT
@@ -93,6 +96,23 @@
return version_id;
}
+absl::StatusOr<std::string> BmcStaticMetrics::FetchBmcUuid() {
+ std::string uuid;
+ // This ID needs to match the one in ipmid
+ sd_id128_t app_id{{0Xe0, 0Xe1, 0X73, 0X76, 0X64, 0X61, 0X47, 0Xda, 0Xa5, 0X0c,
+ 0Xd0, 0Xcc, 0X64, 0X12, 0X45, 0X78}};
+ sd_id128_t machine_id{};
+ if (sd_id128_get_machine_app_specific(app_id, &machine_id) == 0) {
+ std::array<char, SD_ID128_STRING_MAX> str{};
+ uuid = sd_id128_to_string(machine_id, str.data());
+ uuid.insert(8, 1, '-');
+ uuid.insert(13, 1, '-');
+ uuid.insert(18, 1, '-');
+ uuid.insert(23, 1, '-');
+ }
+ return uuid;
+}
+
absl::StatusOr<std::unique_ptr<BmcStaticMetrics>> BmcStaticMetrics::Create(
std::string_view root_path) {
ECCLESIA_ASSIGN_OR_RETURN(std::string bmc_firmware_version,
@@ -101,8 +121,10 @@
std::string bmc_firmware_version_id,
FetchBmcFirmwareVersionId(root_path, bmc_firmware_version));
- return absl::WrapUnique(
- new BmcStaticMetrics(bmc_firmware_version, bmc_firmware_version_id));
+ ECCLESIA_ASSIGN_OR_RETURN(std::string bmc_uuid, FetchBmcUuid());
+
+ return absl::WrapUnique(new BmcStaticMetrics(
+ bmc_firmware_version, bmc_firmware_version_id, bmc_uuid));
}
std::string BmcStaticMetrics::GetBmcFirmwareVersion() const {
@@ -113,4 +135,6 @@
return bmc_firmware_version_id_;
}
+std::string BmcStaticMetrics::GetBmcUuid() const { return bmc_uuid_; }
+
} // namespace milotic_tlbmc
diff --git a/tlbmc/metrics/bmc_static_metrics.h b/tlbmc/metrics/bmc_static_metrics.h
index e625165..3b25441 100644
--- a/tlbmc/metrics/bmc_static_metrics.h
+++ b/tlbmc/metrics/bmc_static_metrics.h
@@ -17,6 +17,7 @@
std::string GetBmcFirmwareVersion() const;
std::string GetBmcFirmwareVersionId() const;
+ std::string GetBmcUuid() const;
protected:
BmcStaticMetrics() = default;
@@ -33,14 +34,19 @@
static absl::StatusOr<std::string> FetchBmcFirmwareFlashId(
std::string_view root_path);
+ static absl::StatusOr<std::string> FetchBmcUuid();
+
private:
explicit BmcStaticMetrics(std::string_view bmc_firmware_version,
- std::string_view bmc_firmware_version_id)
+ std::string_view bmc_firmware_version_id,
+ std::string_view bmc_uuid)
: bmc_firmware_version_(bmc_firmware_version),
- bmc_firmware_version_id_(bmc_firmware_version_id) {}
+ bmc_firmware_version_id_(bmc_firmware_version_id),
+ bmc_uuid_(bmc_uuid) {}
std::string bmc_firmware_version_;
std::string bmc_firmware_version_id_;
+ std::string bmc_uuid_;
};
} // namespace milotic_tlbmc