Page MenuHomePhorge

configuration.h
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

configuration.h

#ifndef CONFIGURATION_H
#define CONFIGURATION_H
// clang-tidy off
// clang-format off
#include "nlohmann/json.hpp"
// clang-format on
// clang-tidy on
#include "rosa/config/version.h"
#include "rosa/app/Application.hpp"
#include <fstream>
using namespace rosa;
using nlohmann::json;
enum DataInterfaceTypes { CSV, MQTT };
struct SignalConfiguration {
std::string Name;
std::string InputPath;
std::string MQTTTopic;
DataInterfaceTypes DataInterfaceType;
bool Output;
float InnerBound;
float OuterBound;
float InnerBoundDrift;
float OuterBoundDrift;
// SAVE CHANGES
uint32_t DriftLookbackRange;
// - SAVE CHANGES
uint32_t SampleHistorySize;
uint32_t DABSize;
uint32_t DABHistorySize;
std::string DistanceMetric;
};
struct AppConfiguration {
std::string OutputFilePath;
uint32_t BrokenCounter;
uint32_t NumberOfSimulationCycles;
uint32_t DownsamplingRate;
std::vector<SignalConfiguration> SignalConfigurations;
};
void from_json(const json &J, SignalConfiguration &SC) {
J.at("Name").get_to(SC.Name);
if (J.contains("InputPath")) {
J.at("InputPath").get_to(SC.InputPath);
SC.DataInterfaceType = DataInterfaceTypes::CSV;
} else if (J.contains("MQTTTopic")) {
J.at("MQTTTopic").get_to(SC.MQTTTopic);
SC.DataInterfaceType = DataInterfaceTypes::MQTT;
}
J.at("Output").get_to(SC.Output);
J.at("InnerBound").get_to(SC.InnerBound);
J.at("OuterBound").get_to(SC.OuterBound);
J.at("InnerBoundDrift").get_to(SC.InnerBoundDrift);
J.at("OuterBoundDrift").get_to(SC.OuterBoundDrift);
if (J.contains("DriftLookbackRange")) {
J.at("DriftLookbackRange").get_to(SC.DriftLookbackRange);
} else {
// TODO: is 1 the best?
SC.DriftLookbackRange = 1;
}
J.at("SampleHistorySize").get_to(SC.SampleHistorySize);
J.at("DABSize").get_to(SC.DABSize);
J.at("DABHistorySize").get_to(SC.DABHistorySize);
SC.DistanceMetric = J.value("DistanceMetric", "relative");
}
void from_json(const json &J, AppConfiguration &AC) {
J.at("OutputFilePath").get_to(AC.OutputFilePath);
J.at("BrokenCounter").get_to(AC.BrokenCounter);
J.at("NumberOfSimulationCycles").get_to(AC.NumberOfSimulationCycles);
J.at("DownsamplingRate").get_to(AC.DownsamplingRate);
J.at("SignalConfigurations").get_to(AC.SignalConfigurations);
}
AppConfiguration AppConfig;
bool readConfigFile(std::string ConfigPath) {
LOG_INFO("READING CONFIG FILE");
LOG_INFO_STREAM << "Looking for config file at \"" << ConfigPath << "\"\n";
std::ifstream ConfigFile;
ConfigFile.open(ConfigPath);
if (!ConfigFile) {
LOG_ERROR("Unable to open config file");
return false;
}
json ConfigObj;
ConfigFile >> ConfigObj;
LOG_INFO_STREAM << "Read JSON file as \"" << ConfigObj << "\"\n";
try {
ConfigObj.get_to(AppConfig);
} catch (nlohmann::detail::type_error ex) {
LOG_ERROR("Misformatted Config File");
return false;
}
return true;
}
#endif // CONFIGURATION_H

File Metadata

Mime Type
text/x-c
Expires
Sun, Mar 1, 9:31 PM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
288221
Default Alt Text
configuration.h (2 KB)

Event Timeline