1 #pragma once 2 3 #include <analyzer/resolution.hpp> 4 #include <hei_main.hpp> 5 #include <nlohmann/json.hpp> 6 7 #include <map> 8 9 namespace analyzer 10 { 11 12 /** 13 * @brief Manages the RAS data files and resolves service actions required for 14 * error signatures. 15 */ 16 class RasDataParser 17 { 18 public: 19 /** @brief Default constructor. */ 20 RasDataParser() 21 { 22 initDataFiles(); 23 } 24 25 private: 26 /** @brief The RAS data files. */ 27 std::map<libhei::ChipType_t, nlohmann::json> iv_dataFiles; 28 29 public: 30 /** 31 * @brief Returns a resolution for all the RAS actions needed for the given 32 * signature. 33 * @param i_signature The target error signature. 34 */ 35 std::shared_ptr<Resolution> 36 getResolution(const libhei::Signature& i_signature); 37 38 private: 39 /** 40 * @brief Parses all of the RAS data JSON files and validates them against 41 * the associated schema. 42 */ 43 void initDataFiles(); 44 45 /** 46 * @brief Parses a signature in the given data file and returns a string 47 * representing the target action for the signature. 48 * @param i_data The parsed RAS data file associated with the 49 * signature's chip type. 50 * @param i_signature The target signature. 51 * @return A string representing the target action for the signature. 52 */ 53 std::string parseSignature(const nlohmann::json& i_data, 54 const libhei::Signature& i_signature); 55 56 /** 57 * @brief Parses a bus object in the given data file and returns the bus 58 * type and unit path. 59 * @param i_data The parsed RAS data file associated with the signature's 60 * chip type. 61 * @param i_name The name of the target bus. 62 * @return A tuple containing the bus type and unit path. 63 */ 64 std::tuple<callout::BusType, std::string> 65 parseBus(const nlohmann::json& i_data, const std::string& i_name); 66 67 /** 68 * @brief Parses an action in the given data file and returns the 69 * corresponding resolution. 70 * @param i_data The parsed RAS data file associated with the signature's 71 * chip type. 72 * @param i_action The target action to parse from the given RAS data. 73 * @return A resolution (or nested resolutions) representing the given 74 * action. 75 * @note This function is called recursively because an action could 76 * reference another action. This function will maintain a stack of 77 * parsed actions and will assert that the same action cannot be 78 * parsed more than once in the recursion stack. 79 */ 80 std::shared_ptr<Resolution> parseAction(const nlohmann::json& i_data, 81 const std::string& i_action); 82 83 /** 84 * @brief Returns a callout priority enum value for the given string. 85 * @param i_priority The priority string. 86 * @return A callout priority enum value. 87 */ 88 callout::Priority getPriority(const std::string& i_priority); 89 }; 90 91 } // namespace analyzer 92