blob: 65399e963f29aaf31de0618cb459e082181abd79 [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 /**
Sunny Srivastava15a189a2025-02-26 16:53:19 +053024 * @brief API to get Error type.
25 *
26 * @param[in] i_exception - Exception object.
27 *
28 * @return Error type set for the exception.
29 * types::ErrorType::InternalFailure otherwise.
30 */
31 static types::ErrorType getErrorType(const std::exception& i_exception);
32
33 /**
34 * @brief API to get Error msg.
35 *
36 * @param[in] i_exception - Exception object.
37 *
38 * @return Error msg set for the specific exception. Default error msg
39 * otherwise.
40 */
41 static std::string getErrorMsg(const std::exception& i_exception);
42
43 /**
Souvik Roy612bce82025-04-16 02:22:33 -050044 * @brief API to get string representation of a Error type enum.
45 *
46 * @param[in] i_exception - Exception object.
47 *
48 * @return Error msg set for the specific error type. Default error msg
49 * otherwise.
50 */
51 static std::string getErrorTypeString(
52 const types::ErrorType& i_errorType) noexcept;
53
54 /**
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -050055 * @brief An API to create a PEL with inventory path callout.
56 *
57 * This API calls an async method to create PEL, and also handles inventory
58 * path callout.
59 *
60 * Note: If inventory path callout info is not provided, it will create a
61 * PEL without any callout. Currently only one callout is handled in this
62 * API.
63 *
64 * @todo: Symbolic FRU and procedure callout needs to be handled in this
65 * API.
66 *
67 * @param[in] i_errorType - Enum to map with event message name.
68 * @param[in] i_severity - Severity of the event.
69 * @param[in] i_callouts - Callout information, list of tuple having
70 * inventory path and priority as input [optional].
71 * @param[in] i_fileName - File name.
72 * @param[in] i_funcName - Function name.
73 * @param[in] i_internalRc - Internal return code.
74 * @param[in] i_description - Error description.
75 * @param[in] i_userData1 - Additional user data [optional].
76 * @param[in] i_userData2 - Additional user data [optional].
77 * @param[in] i_symFru - Symblolic FRU callout data [optional].
78 * @param[in] i_procedure - Procedure callout data [optional].
79 *
80 * @throw exception in case of error.
81 */
82 static void createAsyncPelWithInventoryCallout(
83 const types::ErrorType& i_errorType,
84 const types::SeverityType& i_severity,
85 const std::vector<types::InventoryCalloutData>& i_callouts,
86 const std::string& i_fileName, const std::string& i_funcName,
87 const uint8_t i_internalRc, const std::string& i_description,
88 const std::optional<std::string> i_userData1,
89 const std::optional<std::string> i_userData2,
90 const std::optional<std::string> i_symFru,
91 const std::optional<std::string> i_procedure);
92
93 /**
94 * @brief An API to create a PEL with device path callout.
95 *
96 * @param[in] i_errorType - Enum to map with event message name.
97 * @param[in] i_severity - Severity of the event.
98 * @param[in] i_callouts - Callout information, list of tuple having device
99 * path and error number as input.
100 * @param[in] i_fileName - File name.
101 * @param[in] i_funcName - Function name.
102 * @param[in] i_internalRc - Internal return code.
103 * @param[in] i_userData1 - Additional user data [optional].
104 * @param[in] i_userData2 - Additional user data [optional].
105 */
106 static void createAsyncPelWithI2cDeviceCallout(
107 const types::ErrorType i_errorType,
108 const types::SeverityType i_severity,
109 const std::vector<types::DeviceCalloutData>& i_callouts,
110 const std::string& i_fileName, const std::string& i_funcName,
111 const uint8_t i_internalRc,
112 const std::optional<std::pair<std::string, std::string>> i_userData1,
113 const std::optional<std::pair<std::string, std::string>> i_userData2);
114
115 /**
116 * @brief An API to create a PEL with I2c bus callout.
117 *
118 * @param[in] i_errorType - Enum to map with event message name.
119 * @param[in] i_severity - Severity of the event.
120 * @param[in] i_callouts - Callout information, list of tuple having i2c
121 * bus, i2c address and error number as input.
122 * @param[in] i_fileName - File name.
123 * @param[in] i_funcName - Function name.
124 * @param[in] i_internalRc - Internal return code.
125 * @param[in] i_userData1 - Additional user data [optional].
126 * @param[in] i_userData2 - Additional user data [optional].
127 */
128 static void createAsyncPelWithI2cBusCallout(
129 const types::ErrorType i_errorType,
130 const types::SeverityType i_severity,
131 const std::vector<types::I2cBusCalloutData>& i_callouts,
132 const std::string& i_fileName, const std::string& i_funcName,
133 const uint8_t i_internalRc,
134 const std::optional<std::pair<std::string, std::string>> i_userData1,
135 const std::optional<std::pair<std::string, std::string>> i_userData2);
136
137 /**
138 * @brief An API to create a PEL.
139 *
140 * @param[in] i_errorType - Enum to map with event message name.
141 * @param[in] i_severity - Severity of the event.
142 * @param[in] i_fileName - File name.
143 * @param[in] i_funcName - Function name.
144 * @param[in] i_internalRc - Internal return code.
145 * @param[in] i_description - Error description.
146 * @param[in] i_userData1 - Additional user data [optional].
147 * @param[in] i_userData2 - Additional user data [optional].
148 * @param[in] i_symFru - Symblolic FRU callout data [optional].
149 * @param[in] i_procedure - Procedure callout data [optional].
150 *
151 * @todo: Symbolic FRU and procedure callout needs to be handled in this
152 * API.
153 */
154 static void createAsyncPel(
155 const types::ErrorType& i_errorType,
156 const types::SeverityType& i_severity, const std::string& i_fileName,
157 const std::string& i_funcName, const uint8_t i_internalRc,
158 const std::string& i_description,
159 const std::optional<std::string> i_userData1,
160 const std::optional<std::string> i_userData2,
161 const std::optional<std::string> i_symFru,
162 const std::optional<std::string> i_procedure);
163
164 /**
165 * @brief An API to create PEL.
166 *
167 * This API makes synchronous call to phosphor-logging Create method.
168 *
169 * @param[in] i_errorType - Enum to map with event message name.
170 * @param[in] i_severity - Severity of the event.
171 * @param[in] i_fileName - File name.
172 * @param[in] i_funcName - Function name.
173 * @param[in] i_internalRc - Internal return code.
174 * @param[in] i_description - Error description.
175 * @param[in] i_userData1 - Additional user data [optional].
176 * @param[in] i_userData2 - Additional user data [optional].
177 * @param[in] i_symFru - Symblolic FRU callout data [optional].s
178 * @param[in] i_procedure - Procedure callout data [optional].
179 *
180 * @todo: Symbolic FRU and procedure callout needs to be handled in this
181 * API.
182 */
183 static void createSyncPel(
184 const types::ErrorType& i_errorType,
185 const types::SeverityType& i_severity, const std::string& i_fileName,
186 const std::string& i_funcName, const uint8_t i_internalRc,
187 const std::string& i_description,
188 const std::optional<std::string> i_userData1,
189 const std::optional<std::string> i_userData2,
190 const std::optional<std::string> i_symFru,
191 const std::optional<std::string> i_procedure);
192
193 private:
Anupama B Rb53d97c2025-02-24 03:37:34 -0600194 /**
195 * @brief API to get error info based on the exception.
196 *
197 * @param[in] i_exception - Exception object.
198 *
199 * @return - Valid ExceptionDataMap on success, otherwise map having default
200 * value.
201 */
202 static types::ExceptionDataMap getExceptionData(
203 const std::exception& i_exception);
204
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -0500205 static const std::unordered_map<types::SeverityType, std::string>
206 m_severityMap;
207 static const std::unordered_map<types::ErrorType, std::string>
208 m_errorMsgMap;
209 static const std::unordered_map<types::CalloutPriority, std::string>
210 m_priorityMap;
211};
212} // namespace vpd