blob: 1636b9ae87e1a10e5240b6c7b9806ef568221b37 [file] [log] [blame]
Matthew Barth5c15b792017-03-01 11:17:00 -06001/**
2 * Copyright © 2017 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 */
Matthew Barthfd05d642019-11-14 15:01:57 -060016#include "config.h"
Matthew Barth3a429d92019-12-05 16:58:27 -060017#if defined(PRESENCE_JSON_FILE) || \
18 (defined(PRESENCE_JSON_DBUS_INTF) && defined(PRESENCE_JSON_DBUS_PROP))
Matthew Barthfd05d642019-11-14 15:01:57 -060019#include "json_config.hpp"
20#else
Brad Bishop76596b22017-06-13 14:39:13 -040021#include "generated.hpp"
Matthew Barthfd05d642019-11-14 15:01:57 -060022#endif
Brad Bishopec613db2017-06-08 12:12:53 -040023#include "sdbusplus.hpp"
William A. Kennington III1cfc2f12018-10-19 17:29:46 -070024#include <sdeventplus/event.hpp>
Matthew Barthf3e70472019-12-03 13:33:20 -060025#include <functional>
26#include <stdplus/signal.hpp>
27#include <sdeventplus/source/signal.hpp>
Matthew Barth293477d2017-02-17 15:39:36 -060028
29int main(void)
30{
Brad Bishop8e9a8e72017-06-08 23:21:03 -040031 using namespace phosphor::fan;
Brad Bishop8e9a8e72017-06-08 23:21:03 -040032
Matthew Barth3a429d92019-12-05 16:58:27 -060033 auto bus = sdbusplus::bus::new_default();
William A. Kennington III1cfc2f12018-10-19 17:29:46 -070034 auto event = sdeventplus::Event::get_default();
Matthew Barth3a429d92019-12-05 16:58:27 -060035 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
Matthew Barthb8034452017-02-17 16:39:46 -060036
Matthew Barthfd05d642019-11-14 15:01:57 -060037#ifdef PRESENCE_JSON_FILE
38 // Use json file for presence config
39 presence::JsonConfig config(PRESENCE_JSON_FILE);
Matthew Barth3a429d92019-12-05 16:58:27 -060040#elif defined(PRESENCE_JSON_DBUS_INTF) && defined(PRESENCE_JSON_DBUS_PROP)
41 // Use first object returned in the subtree
42 // (There should really only be one object with the config interface)
43 std::string jsonFile = "";
44 auto objects = util::SDBusPlus::getSubTree(
45 bus, "/", PRESENCE_JSON_DBUS_INTF, 0);
46 auto itObj = objects.begin();
47 if (itObj != objects.end())
48 {
49 auto itServ = itObj->second.begin();
50 if (itServ != itObj->second.end())
51 {
52 // Retrieve json config file location from dbus
53 jsonFile = util::SDBusPlus::getProperty<std::string>(
54 bus, itServ->first, itObj->first,
55 PRESENCE_JSON_DBUS_INTF, PRESENCE_JSON_DBUS_PROP);
56 }
57 }
58 presence::JsonConfig config(jsonFile);
59#endif
60
61#if defined(PRESENCE_JSON_FILE) || \
62 (defined(PRESENCE_JSON_DBUS_INTF) && defined(PRESENCE_JSON_DBUS_PROP))
Matthew Barthfd05d642019-11-14 15:01:57 -060063 for (auto& p: presence::JsonConfig::get())
64 {
65 p->monitor();
66 }
Matthew Barthf3e70472019-12-03 13:33:20 -060067
68 stdplus::signal::block(SIGHUP);
69 sdeventplus::source::Signal signal(event, SIGHUP,
70 std::bind(&presence::JsonConfig::sighupHandler,
71 &config, std::placeholders::_1, std::placeholders::_2));
Matthew Barthfd05d642019-11-14 15:01:57 -060072#else
Brad Bishop372b22c2017-07-12 15:57:14 -040073 for (auto& p: presence::ConfigPolicy::get())
Matthew Barthb8034452017-02-17 16:39:46 -060074 {
Brad Bishop372b22c2017-07-12 15:57:14 -040075 p->monitor();
Matthew Barthb8034452017-02-17 16:39:46 -060076 }
Matthew Barthfd05d642019-11-14 15:01:57 -060077#endif
Matthew Barthb8034452017-02-17 16:39:46 -060078
William A. Kennington III1cfc2f12018-10-19 17:29:46 -070079 return event.loop();
Matthew Barth293477d2017-02-17 15:39:36 -060080}