monitor: Create PowerOffAction class hierarchy
The PowerOffAction base class and its derived classes will be used to
power off a system due to fan failures.
There are 3 types of power offs:
1. HardPowerOff - Do a hard power off after a delay
2. SoftPowerOff - Do a soft power off after a delay
3. EpowPowerOff - This isn't fully defined yet, but it will involve
powering off after setting an early power off warning
somehow and then waiting through 2 delays.
The code that makes the D-Bus calls to do the power offs is in a
standalone class so that it can be be mocked in testcases.
This code also makes use of the Logger class for logging, so this commit
brings that in as a singleton.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I83118963df4ec0b4f89619572f6935329eec3adb
diff --git a/monitor/power_interface.cpp b/monitor/power_interface.cpp
new file mode 100644
index 0000000..372993f
--- /dev/null
+++ b/monitor/power_interface.cpp
@@ -0,0 +1,41 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "power_interface.hpp"
+
+#include "sdbusplus.hpp"
+
+namespace phosphor::fan::monitor
+{
+
+constexpr auto systemdService = "org.freedesktop.systemd1";
+constexpr auto systemdPath = "/org/freedesktop/systemd1";
+constexpr auto systemdMgrIface = "org.freedesktop.systemd1.Manager";
+
+void PowerInterface::softPowerOff()
+{
+ util::SDBusPlus::callMethod(systemdService, systemdPath, systemdMgrIface,
+ "StartUnit", "obmc-host-shutdown@0.target",
+ "replace");
+}
+
+void PowerInterface::hardPowerOff()
+{
+ util::SDBusPlus::callMethod(
+ systemdService, systemdPath, systemdMgrIface, "StartUnit",
+ "obmc-chassis-hard-poweroff@0.target", "replace");
+}
+
+} // namespace phosphor::fan::monitor