4 var Emitter = require(
"events").EventEmitter;
5 var Connector =
new Emitter();
6 var fs = require(
"fs");
7 var path_module = require(
"path");
14 var ConftoolPath =
"";
15 console.log(
"Environment Variables: " +
16 process.env.ARTDAQ_DATABASE_LIB +
18 process.env.ARTDAQ_DATABASE_DIR +
20 process.env.MRB_BUILDDIR);
21 if (!process.env.ARTDAQ_DATABASE_LIB && process.env.ARTDAQ_DATABASE_DIR && process.env.MRB_BUILDDIR) {
22 ConftoolPath = path_module.join(process.env[
"MRB_BUILDDIR"],
"artdaq_database",
"lib",
"conftoolg");
24 ConftoolPath = path_module.join(process.env[
"ARTDAQ_DATABASE_LIB"],
"node_modules",
"conftoolg");
26 console.log(
"Looking for conftoolg module in " + ConftoolPath);
27 Conftool = require(ConftoolPath);
28 console.log(
"Module loaded.");
31 console.log(
"Error loading conftoolg module...have you setup the artdaq_database product?");
46 function SetupUri(dbConfig) {
47 console.log(
"Setting ARTDAQ_DATABASE_URI using configuration " + JSON.stringify(dbConfig, null, 4));
48 if (dbConfig.dbprovider ===
"filesystem") {
49 process.env[
"ARTDAQ_DATABASE_URI"] =
"filesystemdb://" + dbConfig.baseDir +
"/filesystemdb/" + dbConfig.instanceName;
50 }
else if (dbConfig.dbprovider ===
"mongo") {
52 if (fs.existsSync(
".dbpasswd")) {
53 passStr =
":" + fs.readFileSync(
".dbpasswd");
55 console.log(
"No Password file (\".dbpasswd\") found. If auth fails, please place this file in the same directory as serverbase.js");
58 if (dbConfig.mongoConfig.dbUser !==
"") {
61 process.env[
"ARTDAQ_DATABASE_URI"] =
"mongodb://" + dbConfig.mongoConfig.dbUser + passStr + userStr + dbConfig.mongoConfig.dbHost +
":" + dbConfig.mongoConfig.dbPort +
"/" + dbConfig.instanceName;
63 console.log(
"Connector.SetConfig: ERROR: Unrecognized database provider");
65 console.log(
"ARTDAQ_DATABASE_URI is " + process.env[
"ARTDAQ_DATABASE_URI"]);
73 Connector.RunGetConfigsQuery =
function (dbConfig) {
74 console.log(
"Running findconfigs query");
78 operation:
"findconfigs",
81 if (dbConfig.configNameFilter.length === 0) {
82 dbConfig.configNameFilter =
"*";
95 "configurations.name": dbConfig.configNameFilter
99 var output = Conftool.find_global_configurations_ui(JSON.stringify(query, null, 4));
100 console.log(
"findconfigs output: " + JSON.stringify(output, null, 4));
103 throw { name:
"DBOperationFailedException", message: output.second };
106 return JSON.parse(output.second);
114 Connector.RunGetEntitiesQuery =
function (dbConfig) {
115 console.log(
"Running findentities query");
118 operation:
"findentities",
122 var output = Conftool.find_configuration_entities_ui(JSON.stringify(query, null, 4));
123 console.log(
"Findentities output: " + JSON.stringify(JSON.parse(output.second), null, 4));
125 throw { name:
"DBOperationFailedException", message: output.second };
127 return JSON.parse(output.second);
136 Connector.RunGetVersionsQuery =
function (dbConfig, query) {
137 console.log(
"Running findversions query: " + JSON.stringify(query, null, 4));
140 var output = Conftool.find_configuration_versions_ui(JSON.stringify(query, null, 4));
141 console.log(
"findversions output: " + JSON.stringify(output, null, 4));
143 throw { name:
"DBOperationFailedException", message: output.second };
145 return JSON.parse(output.second);
155 Connector.RunBuildFilterQuery =
function (dbConfig, configName, queryIn) {
157 var query = { filter: {
"configurations.name":
"" } };
159 if (queryIn === undefined) {
160 console.log(
"Getting query for " + configName);
161 var configs = Connector.RunGetConfigsQuery(dbConfig).search;
162 for (var conf in configs) {
163 if (configs.hasOwnProperty(conf)) {
164 var config = configs[conf];
165 if (config.name === configName) {
166 query = config.query;
174 console.log(
"Running buildfilter query: " + JSON.stringify(query, null, 4));
175 var output = Conftool.build_global_configuration_search_filter_ui(JSON.stringify(query, null, 4));
177 for (var file in output.search) {
178 if (output.search.hasOwnProperty(file) && query !== null && query !== undefined) {
179 if (output.search[file].query.filter[
"configurations.name"] !== query.filter[
"configurations.name"]) {
180 output.search.splice(file, 1);
187 throw { name:
"DBOperationFailedException", message: output.second };
189 console.log(
"BuildfilterQuery return status " + output.first);
190 console.log(
"BuildFilterQuery data: " + JSON.stringify(JSON.parse(output.second), null, 4));
191 return JSON.parse(output.second);
200 Connector.RunNewConfigQuery =
function (dbConfig, query) {
201 console.log(
"Running newconfig query: " + JSON.stringify(query, null, 4));
204 var output = Conftool.create_new_global_configuration_ui(JSON.stringify(query, null, 4));
205 console.log(
"newconfig output: " + JSON.stringify(query, null, 4));
207 console.log(
"RunNewConfigQuery return status " + output.first);
209 throw { name:
"DBOperationFailedException", message: output.second };
222 Connector.RunAddConfigQuery =
function (dbConfig, configName, version, collectionName, entity) {
223 console.log(
"RunAddConfigQuery: configName: " + configName +
", version: " + version +
", collectionName: " + collectionName +
", entity: " + JSON.stringify(entity, null, 4));
227 "entities.name": entity.name,
230 collection: collectionName,
231 configuration: configName,
232 operation:
"addconfig",
236 var output = Conftool.add_configuration_to_global_configuration_ui(JSON.stringify(query, null, 4));
239 console.log(
"RunAddConfigQuery return status " + output.first);
241 throw { name:
"DBOperationFailedException", message: output.second };
255 Connector.RunStoreQuery =
function (dbConfig, data, collectionName, version, entity, dataType, configName) {
257 console.log(
"RunStoreConfigQuery: configName: " + configName +
", collectionName: " + collectionName +
", version: " + version +
", entity: " + entity +
", dataType: " + dataType);
260 version:
"" + version,
261 collection:
"" + collectionName,
264 dataformat:
"" + dataType
265 , configuration:
"" + configName
267 if (configName === undefined) {
268 query.configuration =
"unspecified";
271 console.log(
"RunStoreQuery: Query: " + JSON.stringify(query,null,4) +
", Data: " + data);
272 var output = Conftool.store_configuration_ui(JSON.stringify(query, null, 4), data);
274 console.log(
"RunStoreConfigQuery return status " + output.first);
276 throw { name:
"DBOperationFailedException", message: output.second };
278 console.log(
"RunStoreConfigQuery return value " + output.second);
288 Connector.RunLoadQuery =
function (dbConfig, query, noparse) {
289 console.log(
"Running load query");
292 var output = Conftool.load_configuration_ui(JSON.stringify(query, null, 4));
293 console.log(
"Conftool Load output: " + output.first);
295 throw { name:
"DBOperationFailedException", message: output.second };
298 if (noparse)
return output.second;
300 return JSON.parse(output.second);
303 Connector.RunListDatabasesQuery =
function (dbconfig, filterobj) {
304 console.log(
"Running ListDatabases query");
314 operation:
"listdatabases"
316 var output = Conftool.list_databases(JSON.stringify(query, null, 4));
317 console.log(
"Conftool ListDatabases output: " + JSON.stringify(output, null, 4));
319 throw { name:
"DBOperationFailedException", message: output.second };
322 return JSON.parse(output.second);
325 module.exports = Connector;