diff --git a/src/controller/controller.cpp b/src/controller/controller.cpp index 2c01c0cd..a0ff2ee8 100644 --- a/src/controller/controller.cpp +++ b/src/controller/controller.cpp @@ -259,6 +259,20 @@ int main_loop(int argc, char **argv){ setenv("MIST_CONTROL", "1", 0); // Signal in the environment that the controller handles all children } + if (Controller::Storage.isMember("config_split")){ + jsonForEach(Controller::Storage["config_split"], cs){ + if (cs->isString()){ + JSON::Value tmpConf = JSON::fromFile(cs->asStringRef()); + if (tmpConf.isMember(cs.key())){ + INFO_MSG("Loading '%s' section of config from file %s", cs.key().c_str(), cs->asStringRef().c_str()); + Controller::Storage[cs.key()] = tmpConf[cs.key()]; + }else{ + WARN_MSG("There is no '%s' section in file %s; skipping load", cs.key().c_str(), cs->asStringRef().c_str()); + } + } + } + } + if (Controller::conf.getOption("debug", true).size() > 1){ Controller::Storage["config"]["debug"] = Controller::conf.getInteger("debug"); } diff --git a/src/controller/controller_storage.cpp b/src/controller/controller_storage.cpp index 997d9ac7..58e7b521 100644 --- a/src/controller/controller_storage.cpp +++ b/src/controller/controller_storage.cpp @@ -135,6 +135,10 @@ namespace Controller{ ///\param Filename The full path of the file to write to. ///\param contents The data to be written to the file. bool WriteFile(std::string Filename, std::string contents){ + if (!Util::createPathFor(Filename)){ + ERROR_MSG("Could not create parent folder for file %s!", Filename.c_str()); + return false; + } std::ofstream File; File.open(Filename.c_str()); File << contents << std::endl; @@ -254,6 +258,22 @@ namespace Controller{ skip.insert("online"); skip.insert("error"); tmp.assignFrom(Controller::Storage, skip); + + if (Controller::Storage.isMember("config_split")){ + jsonForEach(Controller::Storage["config_split"], cs){ + if (cs->isString() && tmp.isMember(cs.key())){ + JSON::Value tmpConf = JSON::fromFile(cs->asStringRef()); + tmpConf[cs.key()] = tmp[cs.key()]; + if (!Controller::WriteFile(cs->asStringRef(), tmpConf.toString())){ + ERROR_MSG("Error writing config.%s to %s", cs.key().c_str(), cs->asStringRef().c_str()); + std::cout << "**config." << cs.key() <<"**" << std::endl; + std::cout << tmp[cs.key()].toString() << std::endl; + std::cout << "**End config." << cs.key() << "**" << std::endl; + } + if (cs.key() != "config_split"){tmp.removeMember(cs.key());} + } + } + } if (!Controller::WriteFile(Controller::conf.getString("configFile"), tmp.toString())){ ERROR_MSG("Error writing config to %s", Controller::conf.getString("configFile").c_str()); std::cout << "**Config**" << std::endl;