Log device added and device removed into journal
Diff the last configuration file with the current after
some allotted time. If they are different log the change.
Also add ability to check for power status, as some are
only discovered after power change.
Tested: Corrupted backup file so that a device could be
"removed" then discovered.
Change-Id: I610a18b7c66ff183025f2171edddb3c7716a51fb
Signed-off-by: James Feist <james.feist@linux.intel.com>
diff --git a/include/EntityManager.hpp b/include/EntityManager.hpp
new file mode 100644
index 0000000..7f46ce2
--- /dev/null
+++ b/include/EntityManager.hpp
@@ -0,0 +1,38 @@
+/*
+// Copyright (c) 2018 Intel 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.
+*/
+
+#pragma once
+
+#include <systemd/sd-journal.h>
+
+#include <iostream>
+#include <string>
+
+inline void logDeviceAdded(const std::string& device)
+{
+
+ sd_journal_send("MESSAGE=%s", "Inventory Added", "PRIORITY=%i", LOG_ERR,
+ "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryAdded",
+ "REDFISH_MESSAGE_ARGS=%s", device.c_str(), NULL);
+}
+
+inline void logDeviceRemoved(const std::string& device)
+{
+
+ sd_journal_send("MESSAGE=%s", "Inventory Removed", "PRIORITY=%i", LOG_ERR,
+ "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryRemoved",
+ "REDFISH_MESSAGE_ARGS=%s", device.c_str(), NULL);
+}
\ No newline at end of file
diff --git a/include/Utils.hpp b/include/Utils.hpp
index 990eb14..b4603cb 100644
--- a/include/Utils.hpp
+++ b/include/Utils.hpp
@@ -17,15 +17,26 @@
#pragma once
#include "filesystem.hpp"
+#include <boost/container/flat_map.hpp>
+#include <fstream>
+#include <iostream>
#include <nlohmann/json.hpp>
+#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/exception.hpp>
+constexpr const char* configurationOutDir = "/var/configuration/";
+constexpr const char* versionHashFile = "/var/configuration/version";
+constexpr const char* versionFile = "/etc/os-release";
+
bool findFiles(const std::filesystem::path& dirPath,
const std::string& matchString,
std::vector<std::filesystem::path>& foundPaths);
bool validateJson(const nlohmann::json& schemaFile,
const nlohmann::json& input);
+
+bool isPowerOn(void);
+void setupPowerMatch(const std::shared_ptr<sdbusplus::asio::connection>& conn);
struct DBusInternalError final : public sdbusplus::exception_t
{
const char* name() const noexcept override
@@ -42,3 +53,42 @@
"internal error";
};
};
+
+inline bool fwVersionIsSame(void)
+{
+ std::ifstream version(versionFile);
+ if (!version.good())
+ {
+ std::cerr << "Can't read " << versionFile << "\n";
+ return false;
+ }
+
+ std::string versionData;
+ std::string line;
+ while (std::getline(version, line))
+ {
+ versionData += line;
+ }
+
+ std::string expectedHash =
+ std::to_string(std::hash<std::string>{}(versionData));
+
+ std::filesystem::create_directory(configurationOutDir);
+ std::ifstream hashFile(versionHashFile);
+ if (hashFile.good())
+ {
+
+ std::string hashString;
+ hashFile >> hashString;
+
+ if (expectedHash == hashString)
+ {
+ return true;
+ }
+ hashFile.close();
+ }
+
+ std::ofstream output(versionHashFile);
+ output << expectedHash;
+ return false;
+}
\ No newline at end of file