blob: 7cc84e918bfa6f5433946b9545d9bc308ffa99fb [file] [log] [blame]
Matthew Barthdfd4a052020-09-02 16:31:51 -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 "config_base.hpp"
19
20#include <nlohmann/json.hpp>
21#include <sdbusplus/bus.hpp>
22
23namespace phosphor::fan::control::json
24{
25
26using json = nlohmann::json;
27
28/**
29 * @class Group - Represents a group of dbus objects for configured events
30 *
31 * A group contains a list of dbus objects that are logically grouped together
32 * to be used within one-or-more configured fan control events. An event object
33 * is configured to apply a set of actions against a list of groups that could
34 * result in a fan control speed change. A group may also be configured against
35 * a list of profiles(OPTIONAL) and or denote a specific service(OPTIONAL) that
36 * serves the list of dbus objects in the group.
37 *
38 * (When no profile for a group is given, the group defaults to always be used
39 * within the events its included in)
40 *
41 */
42class Group : public ConfigBase
43{
44 public:
45 /* JSON file name for groups */
46 static constexpr auto confFileName = "groups.json";
47
48 Group() = delete;
49 Group(const Group&) = delete;
50 Group(Group&&) = delete;
51 Group& operator=(const Group&) = delete;
52 Group& operator=(Group&&) = delete;
53 ~Group() = default;
54
55 /**
56 * Constructor
57 * Parses and populates a configuration group from JSON object data
58 *
59 * @param[in] bus - sdbusplus bus object
60 * @param[in] jsonObj - JSON object
61 */
62 Group(sdbusplus::bus::bus& bus, const json& jsonObj);
63
64 /**
65 * @brief Get the members
66 *
67 * @return List of dbus paths representing the members of the group
68 */
69 inline const auto& getMembers() const
70 {
71 return _members;
72 }
73
74 /**
75 * @brief Get the service
76 *
77 * @return Service name serving the members of the group
78 */
79 inline const auto& getService() const
80 {
81 return _service;
82 }
83
84 private:
85 /* Members of the group */
86 std::vector<std::string> _members;
87
88 /* Service name serving all the members */
89 std::string _service;
90
91 /**
92 * @brief Parse and set the members list
93 *
94 * @param[in] jsonObj - JSON object for the group
95 *
96 * Sets the list of dbus paths making up the members of the group
97 */
98 void setMembers(const json& jsonObj);
99
100 /**
101 * @brief Parse and set the service name(OPTIONAL)
102 *
103 * @param[in] jsonObj - JSON object for the group
104 *
105 * Sets the service name serving the members. It is recommended this service
106 * name be provided for a group containing members served by the fan control
107 * application itself, otherwise they may not be mapped correctly into any
108 * configured events.
109 */
110 void setService(const json& jsonObj);
111};
112
113} // namespace phosphor::fan::control::json