Refactoring servers configuration structure

This commit is contained in:
Bruno Alves de Faria authored and Erik Ziegler committed 2016-08-04 16:47:10 +02:00
1 parent 624d2aeaf5
commit b33ce54188
20 files changed
+173 -118

No files matched your search

+3 -2
View File
@@ -54,7 +54,8 @@ var getInstanceRetrievalParams = function(studyInstanceUID, seriesInstanceUID) {
};
Meteor.startup(function() {
var peers = Meteor.settings.dimse;
if (!Meteor.settings.servers.dimse) return;
var peers = Meteor.settings.servers.dimse[0].peers;
console.log('Adding DIMSE peers');
if (peers && peers.length) {
peers.forEach(function(peer) {
@@ -202,7 +203,7 @@ DIMSE.retrieveInstancesByStudyOnly = function(studyInstanceUID, params, options)
result.on('result', function(msg) {
series.push(msg);
});
});
result.on('end', function(){
if (series.length > 0) {
DIMSE._retrieveInstancesBySeries(conn, series, studyInstanceUID, function(relatedInstances, isEnd){
@@ -1,3 +1,4 @@
Servers = new Mongo.Collection('servers');
Timepoints = new Meteor.Collection('timepoints');
Studies = new Meteor.Collection('studies');
Measurements = new Meteor.Collection('measurements');
@@ -1 +1,2 @@
Meteor.subscribe('reviewers');
Meteor.subscribe('servers');
@@ -6,12 +6,12 @@ function parseUrl(url) {
Template.serverInformationModal.helpers({
serverInformation: function() {
// TODO: change for Collections
var defaultServiceType = Meteor.settings && Meteor.settings.defaultServiceType || 'dicomWeb';
var serviceInfo = Meteor.settings[defaultServiceType];
var serviceInfo = Meteor.settings.servers[defaultServiceType];
if (defaultServiceType === 'dicomWeb') {
var serverInformationDicom = [];
var endpoints = serviceInfo['endpoints'];
endpoints.forEach(function(endpoint) {
serviceInfo.forEach(function(endpoint) {
var parsedUrl = parseUrl(endpoint.qidoRoot);
serverInformationDicom.push({
host: parsedUrl.hostname,
+5
View File
@@ -200,6 +200,7 @@ Package.onUse(function(api) {
api.addFiles('server/collections.js', 'server');
api.addFiles('server/removeCollections.js', [ 'server' ]);
api.addFiles('server/reviewers.js', [ 'server' ]);
api.addFiles('server/servers.js', 'server');
// Both client and server functions
api.addFiles('both/collections.js', [ 'client', 'server' ]);
@@ -274,7 +275,11 @@ Package.onUse(function(api) {
api.export('TrialCriteriaTypes', 'client');
// Export collections spanning both client and server
<<<<<<< 624d2aeaf5db4d1ac2b6ade6411fa55f4788ceac
api.export('AdditionalFindings', [ 'client', 'server' ]);
=======
api.export('Servers', [ 'client', 'server' ]);
>>>>>>> Refactoring servers configuration structure
api.export('ImageMeasurements', [ 'client', 'server' ]);
api.export('Measurements', [ 'client', 'server' ]);
api.export('Studies', [ 'client', 'server' ]);
+6 -3
View File
@@ -46,12 +46,15 @@ Meteor.publish('reviewers', function() {
return Reviewers.find();
});
Meteor.publish('servers', function() {
return Servers.find();
});
// Temporary fix to drop all Collections on server restart
// http://stackoverflow.com/questions/23891631/meteor-how-can-i-drop-all-mongo-collections-and-clear-all-data-on-startup
Meteor.startup(function() {
var globalObject = Meteor.isClient ? window : global;
for (var property in globalObject) {
var object = globalObject[property];
for (var property in global) {
var object = global[property];
if (object instanceof Meteor.Collection) {
object.remove({});
}
+34
View File
@@ -0,0 +1,34 @@
Meteor.startup(function() {
_.each(Meteor.settings.servers, function(endpoints, serverType) {
_.each(endpoints, function(endpoint) {
var server = _.clone(endpoint);
server.origin = "json";
server.type = serverType;
Servers.insert(server);
});
});
});
Meteor.methods({
addServer: function(serverSettings) {
console.log("CHECKING PERMISSIONS");
if (!Meteor.userId()) {
throw new Meteor.Error('not-authorized');
}
console.log("WRITTING ON COLLECTION");
Servers.update(
{ type: serverSettings.type, name: serverSettings.name },
serverSettings,
{ upsert: true },
function(error, affected) {
console.log("CHECKING FOR ERRORS");
if(error) throw new Meteor.Error('data-write', error);
console.log("NO ERRORS, " + affected + " DOCUMENTS AFFECTED");
console.log(Servers.findOne());
}
);
}
});
@@ -37,8 +37,9 @@ Meteor.methods({
* @returns {boolean}
*/
importSupported: function() {
//TODO: Support importing studies into dicomWeb
return (Meteor.settings.dimse && Meteor.settings.defaultServiceType === 'dimse');
if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
return true;
}
},
/**
* Imports studies from local into worklist
@@ -50,10 +51,10 @@ Meteor.methods({
return;
}
if (Meteor.settings.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
if (Meteor.settings.servers.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
//TODO: Support importing studies into dicomWeb
console.log('Importing studies into dicomWeb is currently not supported.');
} else if (Meteor.settings.dimse && Meteor.settings.defaultServiceType === 'dimse') {
} else if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
importStudiesDIMSE(studiesToImport, studyImportStatusId);
} else {
throw 'No properly configured server was available over DICOMWeb or DIMSE.';
@@ -140,4 +141,4 @@ function folderExists(folder) {
} catch (err) {
return false;
}
}
}
@@ -6,16 +6,16 @@ Meteor.methods({
GetStudyMetadata: function(studyInstanceUid) {
log.info('GetStudyMetadata(%s)', studyInstanceUid);
if (!Meteor.settings.dicomWeb) {
if (!Meteor.settings.servers.dicomWeb) {
throw 'No properly configured server was available over DICOMWeb';
}
if (Meteor.settings.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
if (Meteor.settings.servers.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
// Get the server data. This is user-defined in the
// config.json files used to run the Meteor server
var server = Meteor.settings.dicomWeb.endpoints[0];
var server = Meteor.settings.servers.dicomWeb[0];
return Services.WADO.RetrieveMetadata(server, studyInstanceUid);
} else if (Meteor.settings.dimse && Meteor.settings.defaultServiceType === 'dimse') {
} else if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
return Services.DIMSE.RetrieveMetadata(studyInstanceUid);
}
}
@@ -4,13 +4,13 @@ Meteor.methods({
* @param filter
*/
WorklistSearch: function(filter) {
if (Meteor.settings.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
if (Meteor.settings.servers.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
// Get the server data. This is user-defined in the
// config.json files used to run the Meteor server
var server = Meteor.settings.dicomWeb.endpoints[0];
var server = Meteor.settings.servers.dicomWeb[0];
return Services.QIDO.Studies(server, filter);
} else if (Meteor.settings.dimse && Meteor.settings.defaultServiceType === 'dimse') {
} else if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
return Services.DIMSE.Studies(filter);
} else {
throw 'No properly configured server was available over DICOMWeb or DIMSE.';
@@ -31,8 +31,8 @@ function resultDataToStudyMetadata(resultData) {
seriesList.push(series);
}
var host = Meteor.settings.dimse.host,
port = Meteor.settings.dimse.port;
var host = Meteor.settings.servers.dimse.host,
port = Meteor.settings.servers.dimse.port;
var serverRoot = host + ':' + port;
@@ -67,7 +67,7 @@ function resultDataToStudyMetadata(studyInstanceUid, resultData) {
}
var sopInstanceUid = instance[0x00080018];
var instanceSummary = {
imageType: instance[0x00080008],
sopClassUid: instance[0x00080016],
@@ -98,7 +98,7 @@ function resultDataToStudyMetadata(studyInstanceUid, resultData) {
};
// Retrieve the actual data over WADO-URI
var server = Meteor.settings.dicomWeb.endpoints[0];
var server = Meteor.settings.servers.dicomWeb[0];
instanceSummary.wadouri = server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + "&contentType=application%2Fdicom";
series.instances.push(instanceSummary);