1 #include "otsdaq-core/ConfigurationInterface/DatabaseConfigurationInterface.h"
2 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationBase.h"
3 #include "otsdaq-core/MessageFacility/MessageFacility.h"
4 #include "otsdaq-core/Macros/CoutMacros.h"
12 #include "artdaq-database/ConfigurationDB/configurationdbifc.h"
13 #include "artdaq-database/BasicTypes/basictypes.h"
15 #include "artdaq-database/StorageProviders/FileSystemDB/provider_filedb.h"
16 #include "artdaq-database/StorageProviders/FileSystemDB/provider_filedb_index.h"
17 #include "artdaq-database/ConfigurationDB/configuration_common.h"
18 #include "artdaq-database/ConfigurationDB/dispatch_common.h"
19 #include "JSONConfigurationHandler.h.unused"
25 using artdaq::database::basictypes::FhiclData;
26 using artdaq::database::basictypes::JsonData;
29 using config_version_map_t = ots::DatabaseConfigurationInterface::config_version_map_t;
31 namespace db = artdaq::database::configuration;
32 using VersionInfoList_t = db::ConfigurationInterface::VersionInfoList_t;
34 constexpr
auto default_dbprovider =
"filesystem";
35 constexpr
auto default_entity =
"OTSROOT";
38 DatabaseConfigurationInterface::DatabaseConfigurationInterface()
44 artdaq::database::configuration::debug::ExportImport();
45 artdaq::database::configuration::debug::ManageAliases();
46 artdaq::database::configuration::debug::ManageConfigs();
47 artdaq::database::configuration::debug::ManageDocuments();
48 artdaq::database::configuration::debug::Metadata();
50 artdaq::database::configuration::debug::detail::ExportImport();
51 artdaq::database::configuration::debug::detail::ManageAliases();
52 artdaq::database::configuration::debug::detail::ManageConfigs();
53 artdaq::database::configuration::debug::detail::ManageDocuments();
54 artdaq::database::configuration::debug::detail::Metadata();
56 artdaq::database::configuration::debug::options::OperationBase();
57 artdaq::database::configuration::debug::options::BulkOperations();
58 artdaq::database::configuration::debug::options::ManageDocuments();
59 artdaq::database::configuration::debug::options::ManageConfigs();
60 artdaq::database::configuration::debug::options::ManageAliases();
62 artdaq::database::configuration::debug::MongoDB();
63 artdaq::database::configuration::debug::UconDB();
64 artdaq::database::configuration::debug::FileSystemDB();
66 artdaq::database::filesystem::index::debug::enable();
68 artdaq::database::filesystem::debug::enable();
69 artdaq::database::mongo::debug::enable();
71 artdaq::database::docrecord::debug::JSONDocumentBuilder();
72 artdaq::database::docrecord::debug::JSONDocument();
86 throw(std::runtime_error)
88 auto ifc = db::ConfigurationInterface{default_dbprovider};
90 auto versionstring = version.toString();
95 ifc.template loadVersion<decltype(configuration), JsonData>(configuration, versionstring, default_entity);
100 configuration->getViewP()->setVersion(version);
103 __SS__ <<
"\n\nDBI Error while filling '" << configuration->getConfigurationName() <<
104 "' version '" << versionstring <<
"' - are you sure this version exists?\n" <<
105 "Here is the error:\n\n" << result.second << std::endl;
106 std::cout << __COUT_HDR_FL__ <<
"\n" << ss.str();
107 throw std::runtime_error(ss.str());
113 configuration,
bool overwrite)
const
114 throw(std::runtime_error)
116 auto ifc = db::ConfigurationInterface{default_dbprovider};
120 auto versionstring = configuration->getView().getVersion().toString();
125 auto result = overwrite ?
126 ifc.template overwriteVersion<decltype(configuration), JsonData>(configuration, versionstring, default_entity) :
127 ifc.template storeVersion<decltype(configuration), JsonData>(configuration, versionstring, default_entity);
132 __SS__ <<
"DBI Error:" << result.second << std::endl;
133 std::cout << __COUT_HDR_FL__ <<
"\n" << ss.str();
134 throw std::runtime_error(ss.str());
142 auto versions = getVersions(configuration);
144 std::cout << __COUT_HDR_FL__ <<
"Config Name: " << configuration->getConfigurationName() << std::endl;
145 std::cout << __COUT_HDR_FL__ <<
"All Versions: " ;
146 for(
auto &v : versions)
147 std::cout << v <<
" ";
148 std::cout << std::endl;
152 return *(versions.rbegin());
157 std::set<ConfigurationVersion> DatabaseConfigurationInterface::getVersions(
const ConfigurationBase* configuration)
const
161 auto ifc = db::ConfigurationInterface{default_dbprovider};
162 auto result = ifc.template getVersions<decltype(configuration)>(configuration, default_entity);
164 auto resultSet = std::set<ConfigurationVersion>{};
165 for(std::string
const& version:result)
183 catch (std::exception
const& e)
185 std::cout << __COUT_HDR_FL__ <<
"DBI Exception:" << e.what() <<
"\n";
192 std::set<std::string > DatabaseConfigurationInterface::getAllConfigurationNames()
const
193 throw(std::runtime_error)
196 auto ifc = db::ConfigurationInterface{default_dbprovider};
198 auto collection_name_prefix=std::string{};
200 return ifc.listCollections(collection_name_prefix);
202 catch (std::exception
const& e)
204 __SS__ <<
"DBI Exception:" << e.what() <<
"\n";
205 __COUT_ERR__ << ss.str();
206 throw std::runtime_error(ss.str());
210 __SS__ <<
"DBI Unknown exception.\n";
211 __COUT_ERR__ << ss.str();
212 throw std::runtime_error(ss.str());
217 std::set<std::string > DatabaseConfigurationInterface::getAllConfigurationGroupNames(
const std::string &filterString)
const
218 throw(std::runtime_error)
try
220 auto ifc = db::ConfigurationInterface{default_dbprovider};
222 if(filterString ==
"")
223 return ifc.findGlobalConfigurations(
"*");
225 return ifc.findGlobalConfigurations(filterString +
"*");
227 catch (std::exception
const& e)
229 __SS__ <<
"DBI Exception:" << e.what() <<
"\n";
230 __COUT_ERR__ << ss.str();
231 throw std::runtime_error(ss.str());
235 __SS__ <<
"DBI Unknown exception.\n";
236 __COUT_ERR__ << ss.str();
237 throw std::runtime_error(ss.str());
243 std::set<
ConfigurationGroupKey > DatabaseConfigurationInterface::getKeys(
const std::string &groupName)
const
245 std::set<ConfigurationGroupKey> retSet;
246 std::set<std::string > names = getAllConfigurationGroupNames();
248 if(n.find(groupName) == 0)
255 config_version_map_t DatabaseConfigurationInterface::getConfigurationGroupMembers(
256 std::string
const& configurationGroup,
bool includeMetaDataTable)
const
257 throw(std::runtime_error)
261 auto ifc = db::ConfigurationInterface{default_dbprovider};
262 auto result = ifc.loadGlobalConfiguration(configurationGroup);
264 auto to_map = [](
auto const& inputList,
bool includeMetaDataTable) {
265 auto resultMap = config_version_map_t{};
267 std::for_each(inputList.begin(), inputList.end(),
268 [&resultMap](
auto const& info) { resultMap[info.configuration] = std::stol(info.version, 0, 10); });
270 if(!includeMetaDataTable)
274 resultMap.find(GROUP_METADATA_TABLE_NAME);
275 if(metaTable != resultMap.end())
276 resultMap.erase(metaTable);
281 return to_map(result,includeMetaDataTable);
283 catch (std::exception
const& e)
285 __SS__ <<
"DBI Exception:" << e.what() <<
"\n";
286 __COUT_ERR__ << ss.str();
287 throw std::runtime_error(ss.str());
291 __SS__ <<
"DBI Unknown exception.\n";
292 __COUT_ERR__ << ss.str();
293 throw std::runtime_error(ss.str());
298 void DatabaseConfigurationInterface::saveConfigurationGroup(config_version_map_t
const& configurationMap,
299 std::string
const& configurationGroup)
const
300 throw(std::runtime_error)
303 auto ifc = db::ConfigurationInterface{default_dbprovider};
305 auto to_list = [](
auto const& inputMap) {
306 auto resultList = VersionInfoList_t{};
307 std::transform(inputMap.begin(), inputMap.end(), std::back_inserter(resultList), [](
auto const& mapEntry) {
308 return VersionInfoList_t::value_type{mapEntry.first, mapEntry.second.toString(), default_entity};
314 auto result = ifc.storeGlobalConfiguration(to_list(configurationMap), configurationGroup);
316 if (result.first)
return;
318 throw std::runtime_error(result.second);
320 catch (std::exception
const& e)
322 __SS__ <<
"DBI Exception:" << e.what() <<
"\n";
323 __COUT_ERR__ << ss.str();
324 throw std::runtime_error(ss.str());
328 __SS__ <<
"DBI Unknown exception.\n";
329 __COUT_ERR__ << ss.str();
330 throw std::runtime_error(ss.str());