Move common structures

It's ideal if the various BMCWEB_ROUTE lib calls do not call from one
another.  This reduces the amount of code that's compiled each time
separately.

Tested: Code compiles.

Change-Id: I4822ce66c122f261cc6aa34bbd99371b7eff48c8
Signed-off-by: Ed Tanous <etanous@nvidia.com>
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index 31ee12a..566b3ad 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -12,11 +12,11 @@
 #include "filesystem_log_watcher.hpp"
 #include "io_context_singleton.hpp"
 #include "logging.hpp"
-#include "metric_report.hpp"
 #include "ossl_random.hpp"
 #include "persistent_data.hpp"
 #include "server_sent_event.hpp"
 #include "subscription.hpp"
+#include "telemetry_readings.hpp"
 #include "utils/time_utils.hpp"
 
 #include <boost/circular_buffer.hpp>
diff --git a/redfish-core/include/subscription.hpp b/redfish-core/include/subscription.hpp
index 7fe2fdc..f4fb5e5 100644
--- a/redfish-core/include/subscription.hpp
+++ b/redfish-core/include/subscription.hpp
@@ -8,8 +8,8 @@
 #include "filter_expr_parser_ast.hpp"
 #include "http_client.hpp"
 #include "http_response.hpp"
-#include "metric_report.hpp"
 #include "server_sent_event.hpp"
+#include "telemetry_readings.hpp"
 
 #include <boost/asio/io_context.hpp>
 #include <boost/asio/steady_timer.hpp>
diff --git a/redfish-core/include/telemetry_readings.hpp b/redfish-core/include/telemetry_readings.hpp
new file mode 100644
index 0000000..492dff9
--- /dev/null
+++ b/redfish-core/include/telemetry_readings.hpp
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileCopyrightText: Copyright OpenBMC Authors
+
+#pragma once
+
+#include "utils/time_utils.hpp"
+
+#include <boost/url/format.hpp>
+#include <nlohmann/json.hpp>
+
+#include <cstdint>
+#include <string>
+#include <tuple>
+#include <vector>
+
+namespace redfish
+{
+namespace telemetry
+{
+
+using Readings = std::vector<std::tuple<std::string, double, uint64_t>>;
+using TimestampReadings = std::tuple<uint64_t, Readings>;
+
+inline nlohmann::json toMetricValues(const Readings& readings)
+{
+    nlohmann::json metricValues = nlohmann::json::array_t();
+
+    for (const auto& [metadata, sensorValue, timestamp] : readings)
+    {
+        nlohmann::json::object_t metricReport;
+        metricReport["MetricProperty"] = metadata;
+        metricReport["MetricValue"] = std::to_string(sensorValue);
+        metricReport["Timestamp"] =
+            redfish::time_utils::getDateTimeUintMs(timestamp);
+        metricValues.emplace_back(std::move(metricReport));
+    }
+
+    return metricValues;
+}
+
+inline bool fillReport(nlohmann::json& json, const std::string& id,
+                       const TimestampReadings& timestampReadings)
+{
+    json["@odata.type"] = "#MetricReport.v1_3_0.MetricReport";
+    json["@odata.id"] = boost::urls::format(
+        "/redfish/v1/TelemetryService/MetricReports/{}", id);
+    json["Id"] = id;
+    json["Name"] = id;
+    json["MetricReportDefinition"]["@odata.id"] = boost::urls::format(
+        "/redfish/v1/TelemetryService/MetricReportDefinitions/{}", id);
+
+    const auto& [timestamp, readings] = timestampReadings;
+    json["Timestamp"] = redfish::time_utils::getDateTimeUintMs(timestamp);
+    json["MetricValues"] = toMetricValues(readings);
+    return true;
+}
+
+} // namespace telemetry
+} // namespace redfish
diff --git a/redfish-core/lib/metric_report.hpp b/redfish-core/lib/metric_report.hpp
index 4814059..6aeadfb 100644
--- a/redfish-core/lib/metric_report.hpp
+++ b/redfish-core/lib/metric_report.hpp
@@ -11,9 +11,9 @@
 #include "logging.hpp"
 #include "query.hpp"
 #include "registries/privilege_registry.hpp"
+#include "telemetry_readings.hpp"
 #include "utils/collection.hpp"
 #include "utils/telemetry_utils.hpp"
-#include "utils/time_utils.hpp"
 
 #include <asm-generic/errno.h>
 
@@ -28,54 +28,11 @@
 #include <memory>
 #include <string>
 #include <string_view>
-#include <tuple>
 #include <utility>
-#include <vector>
 
 namespace redfish
 {
 
-namespace telemetry
-{
-
-using Readings = std::vector<std::tuple<std::string, double, uint64_t>>;
-using TimestampReadings = std::tuple<uint64_t, Readings>;
-
-inline nlohmann::json toMetricValues(const Readings& readings)
-{
-    nlohmann::json metricValues = nlohmann::json::array_t();
-
-    for (const auto& [metadata, sensorValue, timestamp] : readings)
-    {
-        nlohmann::json::object_t metricReport;
-        metricReport["MetricProperty"] = metadata;
-        metricReport["MetricValue"] = std::to_string(sensorValue);
-        metricReport["Timestamp"] =
-            redfish::time_utils::getDateTimeUintMs(timestamp);
-        metricValues.emplace_back(std::move(metricReport));
-    }
-
-    return metricValues;
-}
-
-inline bool fillReport(nlohmann::json& json, const std::string& id,
-                       const TimestampReadings& timestampReadings)
-{
-    json["@odata.type"] = "#MetricReport.v1_3_0.MetricReport";
-    json["@odata.id"] = boost::urls::format(
-        "/redfish/v1/TelemetryService/MetricReports/{}", id);
-    json["Id"] = id;
-    json["Name"] = id;
-    json["MetricReportDefinition"]["@odata.id"] = boost::urls::format(
-        "/redfish/v1/TelemetryService/MetricReportDefinitions/{}", id);
-
-    const auto& [timestamp, readings] = timestampReadings;
-    json["Timestamp"] = redfish::time_utils::getDateTimeUintMs(timestamp);
-    json["MetricValues"] = toMetricValues(readings);
-    return true;
-}
-} // namespace telemetry
-
 inline void requestRoutesMetricReportCollection(App& app)
 {
     BMCWEB_ROUTE(app, "/redfish/v1/TelemetryService/MetricReports/")
diff --git a/redfish-core/src/dbus_log_watcher.cpp b/redfish-core/src/dbus_log_watcher.cpp
index c6ca381..4418bb4 100644
--- a/redfish-core/src/dbus_log_watcher.cpp
+++ b/redfish-core/src/dbus_log_watcher.cpp
@@ -5,7 +5,7 @@
 #include "event_logs_object_type.hpp"
 #include "event_service_manager.hpp"
 #include "logging.hpp"
-#include "metric_report.hpp"
+#include "telemetry_readings.hpp"
 #include "utils/dbus_event_log_entry.hpp"
 #include "utils/time_utils.hpp"
 
diff --git a/redfish-core/src/subscription.cpp b/redfish-core/src/subscription.cpp
index 48e9c2c..69836a8 100644
--- a/redfish-core/src/subscription.cpp
+++ b/redfish-core/src/subscription.cpp
@@ -13,9 +13,9 @@
 #include "http_client.hpp"
 #include "http_response.hpp"
 #include "logging.hpp"
-#include "metric_report.hpp"
 #include "server_sent_event.hpp"
 #include "ssl_key_handler.hpp"
+#include "telemetry_readings.hpp"
 #include "utils/time_utils.hpp"
 
 #include <boost/asio/error.hpp>