1*693eaed0SAndrew Geissler #pragma once
2*693eaed0SAndrew Geissler 
3*693eaed0SAndrew Geissler #include <map>
4*693eaed0SAndrew Geissler #include <string>
5*693eaed0SAndrew Geissler #include <vector>
6*693eaed0SAndrew Geissler 
7*693eaed0SAndrew Geissler #include <nlohmann/json.hpp>
8*693eaed0SAndrew Geissler 
9*693eaed0SAndrew Geissler /** @brief Stores the error to log if errors to monitor is found */
10*693eaed0SAndrew Geissler struct targetEntry
11*693eaed0SAndrew Geissler {
12*693eaed0SAndrew Geissler     std::string errorToLog;
13*693eaed0SAndrew Geissler     std::vector<std::string> errorsToMonitor;
14*693eaed0SAndrew Geissler };
15*693eaed0SAndrew Geissler 
16*693eaed0SAndrew Geissler /** @brief A map of the systemd target to its corresponding targetEntry*/
17*693eaed0SAndrew Geissler using TargetErrorData = std::map<std::string, targetEntry>;
18*693eaed0SAndrew Geissler 
19*693eaed0SAndrew Geissler using json = nlohmann::json;
20*693eaed0SAndrew Geissler 
21*693eaed0SAndrew Geissler extern bool gVerbose;
22*693eaed0SAndrew Geissler 
23*693eaed0SAndrew Geissler /** @brief Parse input json files
24*693eaed0SAndrew Geissler  *
25*693eaed0SAndrew Geissler  * Will return the parsed data in the TargetErrorData object
26*693eaed0SAndrew Geissler  *
27*693eaed0SAndrew Geissler  * @note This function will throw exceptions for an invalid json file
28*693eaed0SAndrew Geissler  * @note See phosphor-target-monitor-default.json for example of json file
29*693eaed0SAndrew Geissler  *       format
30*693eaed0SAndrew Geissler  *
31*693eaed0SAndrew Geissler  * @param[in] filePaths - The file(s) to parse
32*693eaed0SAndrew Geissler  *
33*693eaed0SAndrew Geissler  * @return Map of target to error log relationships
34*693eaed0SAndrew Geissler  */
35*693eaed0SAndrew Geissler TargetErrorData parseFiles(const std::vector<std::string>& filePaths);
36