xref: /openbmc/bmcweb/features/redfish/include/utils/dbus_event_log_entry.hpp (revision d78572018fc2022091ff8b8eb5a7fef2172ba3d6)
1262dcc1cSAlexander Hansen #pragma once
2262dcc1cSAlexander Hansen 
3262dcc1cSAlexander Hansen #include "dbus_utility.hpp"
4262dcc1cSAlexander Hansen #include "utils/dbus_utils.hpp"
5262dcc1cSAlexander Hansen 
6*d7857201SEd Tanous #include <sdbusplus/unpack_properties.hpp>
7*d7857201SEd Tanous 
8*d7857201SEd Tanous #include <cstdint>
9262dcc1cSAlexander Hansen #include <optional>
10262dcc1cSAlexander Hansen #include <string>
11262dcc1cSAlexander Hansen 
12262dcc1cSAlexander Hansen namespace redfish
13262dcc1cSAlexander Hansen {
14262dcc1cSAlexander Hansen struct DbusEventLogEntry
15262dcc1cSAlexander Hansen {
16262dcc1cSAlexander Hansen     // represents a subset of an instance of dbus interface
17262dcc1cSAlexander Hansen     // xyz.openbmc_project.Logging.Entry
18262dcc1cSAlexander Hansen 
19262dcc1cSAlexander Hansen     uint32_t Id = 0;
20262dcc1cSAlexander Hansen     std::string Message;
21262dcc1cSAlexander Hansen     const std::string* Path = nullptr;
22262dcc1cSAlexander Hansen     const std::string* Resolution = nullptr;
23262dcc1cSAlexander Hansen     bool Resolved = false;
24262dcc1cSAlexander Hansen     std::string ServiceProviderNotify;
25262dcc1cSAlexander Hansen     std::string Severity;
26262dcc1cSAlexander Hansen     uint64_t Timestamp = 0;
27262dcc1cSAlexander Hansen     uint64_t UpdateTimestamp = 0;
28262dcc1cSAlexander Hansen };
29262dcc1cSAlexander Hansen 
30262dcc1cSAlexander Hansen inline std::optional<DbusEventLogEntry> fillDbusEventLogEntryFromPropertyMap(
31262dcc1cSAlexander Hansen     const dbus::utility::DBusPropertiesMap& resp)
32262dcc1cSAlexander Hansen {
33262dcc1cSAlexander Hansen     DbusEventLogEntry entry;
34262dcc1cSAlexander Hansen 
35262dcc1cSAlexander Hansen     // clang-format off
36262dcc1cSAlexander Hansen     bool success = sdbusplus::unpackPropertiesNoThrow(
37262dcc1cSAlexander Hansen         dbus_utils::UnpackErrorPrinter(), resp,
38262dcc1cSAlexander Hansen         "Id", entry.Id,
39262dcc1cSAlexander Hansen         "Message", entry.Message,
40262dcc1cSAlexander Hansen         "Path", entry.Path,
41262dcc1cSAlexander Hansen         "Resolution", entry.Resolution,
42262dcc1cSAlexander Hansen         "Resolved", entry.Resolved,
43262dcc1cSAlexander Hansen         "ServiceProviderNotify", entry.ServiceProviderNotify,
44262dcc1cSAlexander Hansen         "Severity", entry.Severity,
45262dcc1cSAlexander Hansen         "Timestamp", entry.Timestamp,
46262dcc1cSAlexander Hansen         "UpdateTimestamp", entry.UpdateTimestamp
47262dcc1cSAlexander Hansen     );
48262dcc1cSAlexander Hansen     // clang-format on
49262dcc1cSAlexander Hansen     if (!success)
50262dcc1cSAlexander Hansen     {
51262dcc1cSAlexander Hansen         return std::nullopt;
52262dcc1cSAlexander Hansen     }
53262dcc1cSAlexander Hansen     return entry;
54262dcc1cSAlexander Hansen }
55262dcc1cSAlexander Hansen } // namespace redfish
56