nodemanager/utils/Configuration.cpp (49 lines of code) (raw):
#include <fstream>
#include "Configuration.h"
#include "../common/ErrorCodes.h"
#include "WriterLock.h"
using namespace hpc::utils;
using namespace hpc::common;
Configuration::Configuration(const std::string& configurationFile)
: confFile(configurationFile)
{
std::ifstream ifs(confFile, std::ios::in);
if (ifs.good())
{
std::error_code error;
this->data = web::json::value::parse(ifs, error);
if (error)
{
Logger::Error("Failed to read {0}: {1}", confFile, error.message());
exit(error.value());
}
ifs.close();
}
else
{
Logger::Error("Failed to open {0}", confFile);
exit((int)ErrorCodes::ConfigurationFileError);
}
}
void Configuration::Save()
{
WriterLock writerLock(&this->lock);
std::string tmpConfFile = confFile + ".tmp";
std::ofstream ofs(tmpConfFile, std::ios::trunc);
if (ofs.good())
{
this->data.serialize(ofs);
ofs.close();
if (-1 == rename(tmpConfFile.c_str(), this->confFile.c_str()))
{
int err = errno;
Logger::Error("Failed to save {0} to {1}, errno {2}", tmpConfFile, confFile, err);
exit((int)ErrorCodes::ConfigurationFileError);
}
}
else
{
Logger::Error("Failed to save {0}", confFile);
exit((int)ErrorCodes::ConfigurationFileError);
}
}