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));
102 throw { name:
"DBOperationFailedException", message: output.second };
105 return JSON.parse(output.second);
113 Connector.RunGetEntitiesQuery =
function (dbConfig) {
114 console.log(
"Running findentities query");
117 operation:
"findentities",
121 var output = Conftool.find_configuration_entities_ui(JSON.stringify(query, null, 4));
122 console.log(
"Findentities output: " + JSON.stringify(JSON.parse(output.second), null, 4));
124 throw { name:
"DBOperationFailedException", message: output.second };
126 return JSON.parse(output.second);
135 Connector.RunGetVersionsQuery =
function (dbConfig, query) {
136 console.log(
"Running findversions query: " + JSON.stringify(query, null, 4));
139 var output = Conftool.find_configuration_versions_ui(JSON.stringify(query, null, 4));
140 console.log(
"findversions output: " + JSON.stringify(output, null, 4));
142 throw { name:
"DBOperationFailedException", message: output.second };
144 return JSON.parse(output.second);
154 Connector.RunBuildFilterQuery =
function (dbConfig, configName, queryIn) {
156 var query = { filter: {
"configurations.name":
"" } };
158 if (queryIn === undefined) {
159 console.log(
"Getting query for " + configName);
160 var configs = Connector.RunGetConfigsQuery(dbConfig).search;
161 for (var conf in configs) {
162 if (configs.hasOwnProperty(conf)) {
163 var config = configs[conf];
164 if (config.name === configName) {
165 query = config.query;
173 console.log(
"Running buildfilter query: " + JSON.stringify(query, null, 4));
174 var output = Conftool.build_global_configuration_search_filter_ui(JSON.stringify(query, null, 4));
176 for (var file in output.search) {
177 if (output.search.hasOwnProperty(file) && query !== null && query !== undefined) {
178 if (output.search[file].query.filter[
"configurations.name"] !== query.filter[
"configurations.name"]) {
179 output.search.splice(file, 1);
186 throw { name:
"DBOperationFailedException", message: output.second };
188 console.log(
"BuildfilterQuery return status " + output.first);
189 console.log(
"BuildFilterQuery data: " + JSON.stringify(JSON.parse(output.second), null, 4));
190 return JSON.parse(output.second);
199 Connector.RunNewConfigQuery =
function (dbConfig, query) {
200 console.log(
"Running newconfig query: " + JSON.stringify(query, null, 4));
203 var output = Conftool.create_new_global_configuration_ui(JSON.stringify(query, null, 4));
204 console.log(
"newconfig output: " + JSON.stringify(query, null, 4));
206 console.log(
"RunNewConfigQuery return status " + output.first);
208 throw { name:
"DBOperationFailedException", message: output.second };
221 Connector.RunAddConfigQuery =
function (dbConfig, configName, version, collectionName, entity) {
222 console.log(
"RunAddConfigQuery: configName: " + configName +
", version: " + version +
", collectionName: " + collectionName +
", entity: " + JSON.stringify(entity, null, 4));
226 "entities.name": entity.name,
229 collection: collectionName,
230 configuration: configName,
231 operation:
"addconfig",
235 var output = Conftool.add_configuration_to_global_configuration_ui(JSON.stringify(query, null, 4));
238 console.log(
"RunAddConfigQuery return status " + output.first);
240 throw { name:
"DBOperationFailedException", message: output.second };
254 Connector.RunStoreQuery =
function (dbConfig, data, collectionName, version, entity, dataType, configName) {
256 console.log(
"RunStoreConfigQuery: configName: " + configName +
", collectionName: " + collectionName +
", version: " + version +
", entity: " + entity +
", dataType: " + dataType);
259 version:
"" + version,
260 collection:
"" + collectionName,
263 dataformat:
"" + dataType
264 , configuration:
"" + configName
266 if (configName === undefined) {
267 query.configuration =
"unspecified";
270 console.log(
"RunStoreQuery: Query: " + JSON.stringify(query,null,4) +
", Data: " + data);
271 var output = Conftool.store_configuration_ui(JSON.stringify(query, null, 4), data);
273 console.log(
"RunStoreConfigQuery return status " + output.first);
275 throw { name:
"DBOperationFailedException", message: output.second };
277 console.log(
"RunStoreConfigQuery return value " + output.second);
287 Connector.RunLoadQuery =
function (dbConfig, query, noparse) {
288 console.log(
"Running load query");
291 var output = Conftool.load_configuration_ui(JSON.stringify(query, null, 4));
292 console.log(
"Conftool Load output: " + output.first);
294 throw { name:
"DBOperationFailedException", message: output.second };
297 if (noparse)
return output.second;
299 return JSON.parse(output.second);
302 Connector.RunListDatabasesQuery =
function (dbconfig, filterobj) {
303 console.log(
"Running ListDatabases query");
313 operation:
"listdatabases"
315 var output = Conftool.list_databases(JSON.stringify(query, null, 4));
316 console.log(
"Conftool ListDatabases output: " + JSON.stringify(output, null, 4));
318 throw { name:
"DBOperationFailedException", message: output.second };
321 return JSON.parse(output.second);
324 module.exports = Connector;