xref: /openbmc/phosphor-fan-presence/monitor/json_parser.hpp (revision 9e9f599cece7fe6cdf99b1927a515fc8a552b7e9)
1 /**
2  * Copyright © 2020 IBM Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #pragma once
17 
18 #include "json_config.hpp"
19 #include "trust_group.hpp"
20 #include "types.hpp"
21 
22 #include <nlohmann/json.hpp>
23 #include <sdbusplus/bus.hpp>
24 
25 namespace phosphor::fan::monitor
26 {
27 
28 using json = nlohmann::json;
29 
30 constexpr auto confAppName = "monitor";
31 constexpr auto confFileName = "config.json";
32 
33 // Trust group class handler function
34 using trustHandler = std::function<CreateGroupFunction(
35     const std::vector<trust::GroupDefinition>&)>;
36 // Fan monitoring condition handler function
37 using condHandler = std::function<Condition(const json&)>;
38 
39 /**
40  * @brief Get the JSON object
41  *
42  * @param[in] bus - The dbus bus object
43  *
44  * @return JSON object
45  *     A JSON object created after loading the JSON configuration file
46  */
47 inline const json getJsonObj(sdbusplus::bus::bus& bus)
48 {
49     return fan::JsonConfig::load(
50         fan::JsonConfig::getConfFile(bus, confAppName, confFileName));
51 }
52 
53 /**
54  * @brief Get any configured trust groups
55  *
56  * @param[in] obj - JSON object to parse from
57  *
58  * @return List of functions applied on trust groups
59  */
60 const std::vector<CreateGroupFunction> getTrustGrps(const json& obj);
61 
62 /**
63  * @brief Get the configured sensor definitions that make up a fan
64  *
65  * @param[in] sensor - JSON object containing a list of sensors
66  *
67  * @return List of sensor definition data that make up a fan being monitored
68  */
69 const std::vector<SensorDefinition> getSensorDefs(const json& sensors);
70 
71 /**
72  * @brief Get the configured fan definitions to be monitored
73  *
74  * @param[in] obj - JSON object to parse from
75  *
76  * @return List of fan definition data on the fans to be monitored
77  */
78 const std::vector<FanDefinition> getFanDefs(const json& obj);
79 
80 } // namespace phosphor::fan::monitor
81