blob: 0080be674d35dbd8e4c7fb1ac2cd8a94349ef1f9 [file] [log] [blame]
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -05001#pragma once
2
3#include "constants.hpp"
4#include "types.hpp"
5
6#include <iostream>
7#include <optional>
8#include <string>
9#include <unordered_map>
10
11namespace vpd
12{
13/**
14 * @brief Class for logging events.
15 *
16 * Class handles logging PEL under 'logging' service.
17 * Provide separate async API's for calling out inventory_path, device_path and
18 * i2c bus.
19 */
20class EventLogger
21{
22 public:
23 /**
24 * @brief An API to create a PEL with inventory path callout.
25 *
26 * This API calls an async method to create PEL, and also handles inventory
27 * path callout.
28 *
29 * Note: If inventory path callout info is not provided, it will create a
30 * PEL without any callout. Currently only one callout is handled in this
31 * API.
32 *
33 * @todo: Symbolic FRU and procedure callout needs to be handled in this
34 * API.
35 *
36 * @param[in] i_errorType - Enum to map with event message name.
37 * @param[in] i_severity - Severity of the event.
38 * @param[in] i_callouts - Callout information, list of tuple having
39 * inventory path and priority as input [optional].
40 * @param[in] i_fileName - File name.
41 * @param[in] i_funcName - Function name.
42 * @param[in] i_internalRc - Internal return code.
43 * @param[in] i_description - Error description.
44 * @param[in] i_userData1 - Additional user data [optional].
45 * @param[in] i_userData2 - Additional user data [optional].
46 * @param[in] i_symFru - Symblolic FRU callout data [optional].
47 * @param[in] i_procedure - Procedure callout data [optional].
48 *
49 * @throw exception in case of error.
50 */
51 static void createAsyncPelWithInventoryCallout(
52 const types::ErrorType& i_errorType,
53 const types::SeverityType& i_severity,
54 const std::vector<types::InventoryCalloutData>& i_callouts,
55 const std::string& i_fileName, const std::string& i_funcName,
56 const uint8_t i_internalRc, const std::string& i_description,
57 const std::optional<std::string> i_userData1,
58 const std::optional<std::string> i_userData2,
59 const std::optional<std::string> i_symFru,
60 const std::optional<std::string> i_procedure);
61
62 /**
63 * @brief An API to create a PEL with device path callout.
64 *
65 * @param[in] i_errorType - Enum to map with event message name.
66 * @param[in] i_severity - Severity of the event.
67 * @param[in] i_callouts - Callout information, list of tuple having device
68 * path and error number as input.
69 * @param[in] i_fileName - File name.
70 * @param[in] i_funcName - Function name.
71 * @param[in] i_internalRc - Internal return code.
72 * @param[in] i_userData1 - Additional user data [optional].
73 * @param[in] i_userData2 - Additional user data [optional].
74 */
75 static void createAsyncPelWithI2cDeviceCallout(
76 const types::ErrorType i_errorType,
77 const types::SeverityType i_severity,
78 const std::vector<types::DeviceCalloutData>& i_callouts,
79 const std::string& i_fileName, const std::string& i_funcName,
80 const uint8_t i_internalRc,
81 const std::optional<std::pair<std::string, std::string>> i_userData1,
82 const std::optional<std::pair<std::string, std::string>> i_userData2);
83
84 /**
85 * @brief An API to create a PEL with I2c bus callout.
86 *
87 * @param[in] i_errorType - Enum to map with event message name.
88 * @param[in] i_severity - Severity of the event.
89 * @param[in] i_callouts - Callout information, list of tuple having i2c
90 * bus, i2c address and error number as input.
91 * @param[in] i_fileName - File name.
92 * @param[in] i_funcName - Function name.
93 * @param[in] i_internalRc - Internal return code.
94 * @param[in] i_userData1 - Additional user data [optional].
95 * @param[in] i_userData2 - Additional user data [optional].
96 */
97 static void createAsyncPelWithI2cBusCallout(
98 const types::ErrorType i_errorType,
99 const types::SeverityType i_severity,
100 const std::vector<types::I2cBusCalloutData>& i_callouts,
101 const std::string& i_fileName, const std::string& i_funcName,
102 const uint8_t i_internalRc,
103 const std::optional<std::pair<std::string, std::string>> i_userData1,
104 const std::optional<std::pair<std::string, std::string>> i_userData2);
105
106 /**
107 * @brief An API to create a PEL.
108 *
109 * @param[in] i_errorType - Enum to map with event message name.
110 * @param[in] i_severity - Severity of the event.
111 * @param[in] i_fileName - File name.
112 * @param[in] i_funcName - Function name.
113 * @param[in] i_internalRc - Internal return code.
114 * @param[in] i_description - Error description.
115 * @param[in] i_userData1 - Additional user data [optional].
116 * @param[in] i_userData2 - Additional user data [optional].
117 * @param[in] i_symFru - Symblolic FRU callout data [optional].
118 * @param[in] i_procedure - Procedure callout data [optional].
119 *
120 * @todo: Symbolic FRU and procedure callout needs to be handled in this
121 * API.
122 */
123 static void createAsyncPel(
124 const types::ErrorType& i_errorType,
125 const types::SeverityType& i_severity, const std::string& i_fileName,
126 const std::string& i_funcName, const uint8_t i_internalRc,
127 const std::string& i_description,
128 const std::optional<std::string> i_userData1,
129 const std::optional<std::string> i_userData2,
130 const std::optional<std::string> i_symFru,
131 const std::optional<std::string> i_procedure);
132
133 /**
134 * @brief An API to create PEL.
135 *
136 * This API makes synchronous call to phosphor-logging Create method.
137 *
138 * @param[in] i_errorType - Enum to map with event message name.
139 * @param[in] i_severity - Severity of the event.
140 * @param[in] i_fileName - File name.
141 * @param[in] i_funcName - Function name.
142 * @param[in] i_internalRc - Internal return code.
143 * @param[in] i_description - Error description.
144 * @param[in] i_userData1 - Additional user data [optional].
145 * @param[in] i_userData2 - Additional user data [optional].
146 * @param[in] i_symFru - Symblolic FRU callout data [optional].s
147 * @param[in] i_procedure - Procedure callout data [optional].
148 *
149 * @todo: Symbolic FRU and procedure callout needs to be handled in this
150 * API.
151 */
152 static void createSyncPel(
153 const types::ErrorType& i_errorType,
154 const types::SeverityType& i_severity, const std::string& i_fileName,
155 const std::string& i_funcName, const uint8_t i_internalRc,
156 const std::string& i_description,
157 const std::optional<std::string> i_userData1,
158 const std::optional<std::string> i_userData2,
159 const std::optional<std::string> i_symFru,
160 const std::optional<std::string> i_procedure);
161
162 private:
163 static const std::unordered_map<types::SeverityType, std::string>
164 m_severityMap;
165 static const std::unordered_map<types::ErrorType, std::string>
166 m_errorMsgMap;
167 static const std::unordered_map<types::CalloutPriority, std::string>
168 m_priorityMap;
169};
170} // namespace vpd