summaryrefslogtreecommitdiffstats
path: root/entity_map_json.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'entity_map_json.cpp')
-rw-r--r--entity_map_json.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/entity_map_json.cpp b/entity_map_json.cpp
index 96ef61c..c0b836c 100644
--- a/entity_map_json.cpp
+++ b/entity_map_json.cpp
@@ -3,6 +3,7 @@
#include <exception>
#include <fstream>
#include <ipmid/types.hpp>
+#include <memory>
#include <nlohmann/json.hpp>
#include <string>
#include <utility>
@@ -14,9 +15,34 @@ namespace sensor
extern const EntityInfoMap entities;
-const EntityInfoMap& getIpmiEntityRecords()
+EntityInfoMapContainer* EntityInfoMapContainer::getContainer()
{
- return entities;
+ static std::unique_ptr<EntityInfoMapContainer> instance;
+
+ if (!instance)
+ {
+ /* TODO: With multi-threading this would all need to be locked so
+ * the first thread to hit it would set it up.
+ */
+ EntityInfoMap builtEntityMap = buildEntityMapFromFile();
+ if (!builtEntityMap.empty())
+ {
+ instance = std::unique_ptr<EntityInfoMapContainer>(
+ new EntityInfoMapContainer(builtEntityMap));
+ }
+ else
+ {
+ instance = std::unique_ptr<EntityInfoMapContainer>(
+ new EntityInfoMapContainer(entities));
+ }
+ }
+
+ return instance.get();
+}
+
+const EntityInfoMap& EntityInfoMapContainer::getIpmiEntityRecords()
+{
+ return entityRecords;
}
EntityInfoMap buildEntityMapFromFile()
OpenPOWER on IntegriCloud