blob: 30e9d0201566845db77ba6ad6e1843a6718a5299 [file] [log] [blame]
Matthew Barthccaf2db2020-06-04 13:09:35 -05001/**
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"
Matt Spinlerac1efc12020-10-27 10:20:11 -050019#include "power_off_action.hpp"
Matthew Barth9ea8bee2020-06-04 14:27:19 -050020#include "trust_group.hpp"
21#include "types.hpp"
Matthew Barthccaf2db2020-06-04 13:09:35 -050022
23#include <nlohmann/json.hpp>
24#include <sdbusplus/bus.hpp>
25
26namespace phosphor::fan::monitor
27{
28
29using json = nlohmann::json;
Matt Spinlerf06ab072020-10-14 12:58:22 -050030class PowerOffRule;
31class PowerInterfaceBase;
Matt Spinlerac1efc12020-10-27 10:20:11 -050032class System;
Matthew Barthccaf2db2020-06-04 13:09:35 -050033
34constexpr auto confAppName = "monitor";
35constexpr auto confFileName = "config.json";
36
Matthew Barth9ea8bee2020-06-04 14:27:19 -050037// Trust group class handler function
38using trustHandler = std::function<CreateGroupFunction(
39 const std::vector<trust::GroupDefinition>&)>;
Matthew Barth3ad14342020-06-08 16:17:42 -050040// Fan monitoring condition handler function
41using condHandler = std::function<Condition(const json&)>;
Matthew Barth9ea8bee2020-06-04 14:27:19 -050042
Matthew Barthccaf2db2020-06-04 13:09:35 -050043/**
44 * @brief Get the JSON object
45 *
Matthew Barthccaf2db2020-06-04 13:09:35 -050046 * @return JSON object
47 * A JSON object created after loading the JSON configuration file
48 */
Mike Capps808d7fe2022-06-13 10:12:16 -040049inline const json getJsonObj()
Matthew Barthccaf2db2020-06-04 13:09:35 -050050{
51 return fan::JsonConfig::load(
Mike Capps808d7fe2022-06-13 10:12:16 -040052 fan::JsonConfig::getConfFile(confAppName, confFileName));
Matthew Barthccaf2db2020-06-04 13:09:35 -050053}
54
Matthew Barth9ea8bee2020-06-04 14:27:19 -050055/**
56 * @brief Get any configured trust groups
57 *
58 * @param[in] obj - JSON object to parse from
59 *
60 * @return List of functions applied on trust groups
61 */
62const std::vector<CreateGroupFunction> getTrustGrps(const json& obj);
63
Matthew Barth22ab93b2020-06-08 10:47:56 -050064/**
65 * @brief Get the configured sensor definitions that make up a fan
66 *
67 * @param[in] sensor - JSON object containing a list of sensors
68 *
69 * @return List of sensor definition data that make up a fan being monitored
70 */
71const std::vector<SensorDefinition> getSensorDefs(const json& sensors);
72
73/**
74 * @brief Get the configured fan definitions to be monitored
75 *
76 * @param[in] obj - JSON object to parse from
77 *
78 * @return List of fan definition data on the fans to be monitored
79 */
80const std::vector<FanDefinition> getFanDefs(const json& obj);
81
Matt Spinlerf06ab072020-10-14 12:58:22 -050082/**
83 * @brief Get the configured power off rules
84 *
85 * @param[in] obj - JSON object to parse from
86 *
87 * @param[in] powerInterface - The power interface object to use
88 *
Matt Spinlerac1efc12020-10-27 10:20:11 -050089 * @param[in] func - Optional user defined function that gets called
90 * right before a power off occurs.
91 *
Matt Spinlerf06ab072020-10-14 12:58:22 -050092 * @return std::vector<std::unique_ptr<PowerOffRule>> -
93 * The PowerOffRule objects
94 */
Patrick Williamsdfddd642024-08-16 15:21:51 -040095std::vector<std::unique_ptr<PowerOffRule>> getPowerOffRules(
96 const json& obj, std::shared_ptr<PowerInterfaceBase>& powerInterface,
97 PowerOffAction::PrePowerOffFunc& func);
Matt Spinlerf06ab072020-10-14 12:58:22 -050098
Matt Spinlerf13b42e2020-10-26 15:29:49 -050099/**
100 * @brief Returns the 'num_nonfunc_rotors_before_error field
101 *
102 * @param[in] obj - JSON object to parse from
103 *
104 * @return optional<size_t> - The value, or std::nullopt if not present
105 */
106std::optional<size_t> getNumNonfuncRotorsBeforeError(const json& obj);
107
Matthew Barthccaf2db2020-06-04 13:09:35 -0500108} // namespace phosphor::fan::monitor