xref: /openbmc/ibm-logging/policy_table.hpp (revision b96fa3214ee40d8a219ee741e24aa035b74a130a)
1 #pragma once
2 
3 #include <experimental/optional>
4 #include <map>
5 #include <vector>
6 #include "config.h"
7 
8 namespace ibm
9 {
10 namespace logging
11 {
12 namespace policy
13 {
14 
15 
16 /**
17  *  The details of a policy table entry:
18  *  - search modifier
19  *  - error message
20  *  - common error event ID
21  */
22 struct Details
23 {
24     std::string modifier;
25     std::string msg;
26     std::string ceid;
27 };
28 
29 using DetailsList = std::vector<Details>;
30 using DetailsReference = std::reference_wrapper<const Details>;
31 
32 using PolicyMap = std::map<std::string, DetailsList>;
33 
34 namespace optional_ns = std::experimental;
35 
36 /**
37  * @class Table
38  *
39  * This class wraps the error policy table data, and provides the
40  * ability to find a policy table entry based on the error and a
41  * search modifier.  This data contains additional information
42  * about error logs and may be system specific.
43  */
44 class Table
45 {
46     public:
47 
48         Table() = delete;
49         ~Table() = default;
50         Table(const Table&) = default;
51         Table& operator=(const Table&) = default;
52         Table(Table&&) = default;
53         Table& operator=(Table&&) = default;
54 
55         /**
56          * Constructor
57          *
58          * @param[in] jsonFile - the path to the policy JSON.
59          */
60         explicit Table(const std::string& jsonFile);
61 
62         /**
63          * Says if the JSON has been loaded successfully.
64          *
65          * @return bool
66          */
67         inline bool isLoaded() const
68         {
69             return loaded;
70         }
71 
72         /**
73          * Finds an entry in the policy table based on the
74          * error and the search modifier.
75          *
76          * @param[in] error - the error, like xyz.openbmc_project.Error.X
77          * @param[in] modifier - the search modifier, used to find the entry
78          *                   when multiple ones share the same error
79          *
80          * @return optional<DetailsReference> - the details entry
81          */
82         optional_ns::optional<DetailsReference> find(
83                 const std::string& error,
84                 const std::string& modifier) const;
85 
86     private:
87 
88         /**
89          * Loads the JSON data into the PolicyMap map
90          *
91          * @param[in] jsonFile - the path to the .json file
92          */
93         void load(const std::string& jsonFile);
94 
95         /**
96          * Reflects if the JSON was successfully loaded or not.
97          */
98         bool loaded = false;
99 
100         /**
101          * The policy table
102          */
103         PolicyMap policies;
104 };
105 
106 
107 }
108 }
109 }
110