blob: 492dff9f8ee18c8f639263220c2e764a0a8501c1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
|