diff --git a/LesionTracker/defaultSettings.js b/LesionTracker/defaultSettings.js index 5358d950c..b6d340449 100644 --- a/LesionTracker/defaultSettings.js +++ b/LesionTracker/defaultSettings.js @@ -8,8 +8,8 @@ Meteor.startup(function() { } Meteor.settings = { - dicomWeb: { - endpoints: [{ + servers: { + dicomWeb: [{ name: 'Orthanc', wadoUriRootNOTE: 'either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently', wadoUriRoot: 'http://localhost:8043/wado', @@ -23,14 +23,15 @@ Meteor.startup(function() { logResponses: false, logTiming: true } + }], + dimse: [{ + name: "ORTHANC_DIMSE", + host: 'localhost', + port: 4242, + aeTitle: 'ORTHANC', + default: true }] }, - dimse: [{ - host: 'localhost', - port: 4242, - aeTitle: 'ORTHANC', - default: true - }], "defaultServiceType": 'dicomWeb', "public": { "verifyEmail": false, @@ -49,4 +50,3 @@ Meteor.startup(function() { // return 'If you leave this page then any unsaved changes will be lost.'; }); }); - diff --git a/OHIFViewer/defaultSettings.js b/OHIFViewer/defaultSettings.js index 3f435f009..d97c40419 100644 --- a/OHIFViewer/defaultSettings.js +++ b/OHIFViewer/defaultSettings.js @@ -8,8 +8,8 @@ Meteor.startup(function() { } Meteor.settings = { - dicomWeb: { - endpoints: [{ + servers: { + dicomWeb: [{ name: 'Orthanc', wadoUriRootNOTE: 'either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently', wadoUriRoot: 'http://localhost:8043/wado', @@ -22,20 +22,21 @@ Meteor.startup(function() { logRequests: true, logResponses: false, logTiming: true - } + } + }], + dimse: [{ + name: "ORTHANC_DIMSE", + host: 'localhost', + port: 4242, + hostAE: 'ORTHANC' }] }, - dimse: { - host: 'localhost', - port: 4242, - hostAE: 'ORTHANC' - }, defaultServiceType: 'dicomWeb', + //defaultServiceType: 'dimse' public: { ui: { studyListFunctionsEnabled: true } } - //defaultServiceType: 'dimse' }; }); diff --git a/Packages/dimseservice/server/DIMSE.js b/Packages/dimseservice/server/DIMSE.js index da526177b..bbeeecbaa 100755 --- a/Packages/dimseservice/server/DIMSE.js +++ b/Packages/dimseservice/server/DIMSE.js @@ -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){ diff --git a/Packages/lesiontracker/both/collections.js b/Packages/lesiontracker/both/collections.js index d443a427d..d5725a589 100644 --- a/Packages/lesiontracker/both/collections.js +++ b/Packages/lesiontracker/both/collections.js @@ -1,3 +1,4 @@ +Servers = new Mongo.Collection('servers'); Timepoints = new Meteor.Collection('timepoints'); Studies = new Meteor.Collection('studies'); Measurements = new Meteor.Collection('measurements'); diff --git a/Packages/lesiontracker/client/collections/subscriptions.js b/Packages/lesiontracker/client/collections/subscriptions.js index bc19ceff2..c8a266593 100644 --- a/Packages/lesiontracker/client/collections/subscriptions.js +++ b/Packages/lesiontracker/client/collections/subscriptions.js @@ -1 +1,2 @@ Meteor.subscribe('reviewers'); +Meteor.subscribe('servers'); diff --git a/Packages/lesiontracker/client/components/serverInformationModal/serverInformationModal.js b/Packages/lesiontracker/client/components/serverInformationModal/serverInformationModal.js index 50c95b4af..d510b5d86 100644 --- a/Packages/lesiontracker/client/components/serverInformationModal/serverInformationModal.js +++ b/Packages/lesiontracker/client/components/serverInformationModal/serverInformationModal.js @@ -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, diff --git a/Packages/lesiontracker/package.js b/Packages/lesiontracker/package.js index 4fa57cd98..711f109d4 100644 --- a/Packages/lesiontracker/package.js +++ b/Packages/lesiontracker/package.js @@ -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' ]); diff --git a/Packages/lesiontracker/server/collections.js b/Packages/lesiontracker/server/collections.js index c1102e9b3..e4af3b509 100644 --- a/Packages/lesiontracker/server/collections.js +++ b/Packages/lesiontracker/server/collections.js @@ -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({}); } diff --git a/Packages/lesiontracker/server/servers.js b/Packages/lesiontracker/server/servers.js new file mode 100644 index 000000000..dc532e686 --- /dev/null +++ b/Packages/lesiontracker/server/servers.js @@ -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()); + } + ); + } + +}); diff --git a/Packages/viewerbase/server/methods/importStudies.js b/Packages/viewerbase/server/methods/importStudies.js index 997011088..65b7cfe28 100644 --- a/Packages/viewerbase/server/methods/importStudies.js +++ b/Packages/viewerbase/server/methods/importStudies.js @@ -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; } -} \ No newline at end of file +} diff --git a/Packages/worklist/server/methods/getStudyMetadata.js b/Packages/worklist/server/methods/getStudyMetadata.js index 4e8d2f8d8..a97f304e0 100644 --- a/Packages/worklist/server/methods/getStudyMetadata.js +++ b/Packages/worklist/server/methods/getStudyMetadata.js @@ -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); } } diff --git a/Packages/worklist/server/methods/worklistSearch.js b/Packages/worklist/server/methods/worklistSearch.js index c7f9cf554..d27d2d3e5 100644 --- a/Packages/worklist/server/methods/worklistSearch.js +++ b/Packages/worklist/server/methods/worklistSearch.js @@ -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.'; diff --git a/Packages/worklist/server/services/dimse/instances.js b/Packages/worklist/server/services/dimse/instances.js index 117fe3155..f460dfc5d 100755 --- a/Packages/worklist/server/services/dimse/instances.js +++ b/Packages/worklist/server/services/dimse/instances.js @@ -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; diff --git a/Packages/worklist/server/services/dimse/retrieveMetadata.js b/Packages/worklist/server/services/dimse/retrieveMetadata.js index a04455db4..bafbfc9d5 100755 --- a/Packages/worklist/server/services/dimse/retrieveMetadata.js +++ b/Packages/worklist/server/services/dimse/retrieveMetadata.js @@ -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); diff --git a/config/dockerDCM4CHE.json b/config/dockerDCM4CHE.json index 64c07f9b3..c77e91ced 100644 --- a/config/dockerDCM4CHE.json +++ b/config/dockerDCM4CHE.json @@ -1,26 +1,29 @@ { - "dicomWeb" : { - "endpoints": [ + "servers": { + "dicomWeb": [ { "name": "DCM4CHE", - "wadoUriRootNOTE" : "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", - "wadoUriRoot" : "http://192.168.99.100:8080/dcm4chee-arc/aets/DCM4CHEE/wado", + "wadoUriRootNOTE": "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", + "wadoUriRoot": "http://192.168.99.100:8080/dcm4chee-arc/aets/DCM4CHEE/wado", "qidoRoot": "http://192.168.99.100:8080/dcm4chee-arc/aets/DCM4CHEE/rs", "wadoRoot": "http://192.168.99.100:8080/dcm4chee-arc/aets/DCM4CHEE/rs/wado/DCM4CHEE", "qidoSupportsIncludeField": true, - "imageRendering" : "wadouri", - "requestOptions" : { - "logRequests" : true, - "logResponses" : false, - "logTiming" : true + "imageRendering": "wadouri", + "requestOptions": { + "logRequests": true, + "logResponses": false, + "logTiming": true } } + ], + "dimse": [ + { + "name": "DCM4CHE_DIMSE", + "host": "192.168.99.100", + "port": 11112, + "hostAE": "DCM4CHE" + } ] }, - "dimse" : { - "host" : "192.168.99.100", - "port" : 11112, - "hostAE" : "DCM4CHE" - }, "defaultServiceType": "dicomWeb" } diff --git a/config/localhostOrthanc.json b/config/localhostOrthanc.json index 6bf39df37..2c0527a2c 100644 --- a/config/localhostOrthanc.json +++ b/config/localhostOrthanc.json @@ -1,6 +1,6 @@ { - "dicomWeb" : { - "endpoints": [ + "servers": { + "dicomWeb": [ { "name": "Orthanc", "wadoUriRootNOTE" : "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", @@ -8,20 +8,23 @@ "qidoRoot": "http://localhost:8042/dicom-web", "wadoRoot": "http://localhost:8042/dicom-web", "qidoSupportsIncludeField": false, - "imageRendering" : "wadouri", - "requestOptions" : { + "imageRendering": "wadouri", + "requestOptions": { "auth": "orthanc:orthanc", - "logRequests" : true, - "logResponses" : false, - "logTiming" : true + "logRequests": true, + "logResponses": false, + "logTiming": true } } + ], + "dimse": [ + { + "name": "ORTHANC_DIMSE", + "host": "localhost", + "port": 4242, + "hostAE": "ORTHANC" + } ] }, - "dimse" : { - "host" : "localhost", - "port" : 4242, - "hostAE" : "ORTHANC" - }, "defaultServiceType": "dicomWeb" } diff --git a/config/medicalConnections.json b/config/medicalConnections.json index faf254197..189efd0e1 100644 --- a/config/medicalConnections.json +++ b/config/medicalConnections.json @@ -1,19 +1,19 @@ { - "dicomWeb" : { - "endpoints": [ + "servers": { + "dicomWeb": [ { "name": "Medical Connections", - "wadoUriRoot" : "http://www.dicomserver.co.uk/wadouri", + "wadoUriRoot": "http://www.dicomserver.co.uk/wadouri", "qidoRoot": "http://dicomserver.co.uk:81/qido", "wadoRoot": "http://dicomserver.co.uk:81/wado", "qidoSupportsIncludeField": false, - "imageRendering" : "wadouri", - "requestOptions" : { - "logRequests" : true, - "logResponses" : false, - "logTiming" : true + "imageRendering": "wadouri", + "requestOptions": { + "logRequests": true, + "logResponses": false, + "logTiming": true } } ] } -} \ No newline at end of file +} diff --git a/config/medkenOrthanc.json b/config/medkenOrthanc.json index dcc9b7714..6bb678173 100644 --- a/config/medkenOrthanc.json +++ b/config/medkenOrthanc.json @@ -1,18 +1,18 @@ { - "dicomWeb" : { - "endpoints": [ + "servers": { + "dicomWeb": [ { "name": "Medken Orthanc", - "wadoUriRootNOTE" : "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", - "wadoUriRoot" : "http://dicom-orthanc.medken.com/wado", + "wadoUriRootNOTE": "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", + "wadoUriRoot": "http://dicom-orthanc.medken.com/wado", "qidoRoot": "http://dicom-orthanc.medken.com/dicom-web", "wadoRoot": "http://dicom-orthanc.medken.com/dicom-web", "qidoSupportsIncludeField": false, - "imageRendering" : "wadouri", - "requestOptions" : { - "logRequests" : false, - "logResponses" : false, - "logTiming" : true + "imageRendering": "wadouri", + "requestOptions": { + "logRequests": false, + "logResponses": false, + "logTiming": true } } ] @@ -37,4 +37,4 @@ "host" : "localhost", "port" : 3937 } -} \ No newline at end of file +} diff --git a/config/orthancDIMSE.json b/config/orthancDIMSE.json index 323bd0126..fce99ad90 100644 --- a/config/orthancDIMSE.json +++ b/config/orthancDIMSE.json @@ -1,34 +1,36 @@ { - "dicomWeb" : { - "endpoints": [ + "servers": { + "dicomWeb": [ { "name": "Orthanc", - "wadoUriRootNOTE" : "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", - "wadoUriRoot" : "http://localhost:8043/wado", + "wadoUriRootNOTE": "either this uri is not correct for wado-uri or wado-uri is not configured on orthanc currently", + "wadoUriRoot": "http://localhost:8043/wado", "qidoRoot": "http://localhost:8042/dicom-web", "wadoRoot": "http://localhost:8042/dicom-web", "qidoSupportsIncludeField": false, - "imageRendering" : "wadouri", - "requestOptions" : { + "imageRendering": "wadouri", + "requestOptions": { "auth": "orthanc:orthanc", - "logRequests" : true, - "logResponses" : false, - "logTiming" : true + "logRequests": true, + "logResponses": false, + "logTiming": true } } - ] + ], + "dimse": [{ + "name": "ORTHANC_DIMSE", + "host": "localhost", + "port": 4242, + "aeTitle": "ORTHANC", + "default": true + },{ + "name": "OHIFDCM_DIMSE", + "host": "0.0.0.0", + "port": 11112, + "aeTitle": "OHIFDCM", + "default": true, + "server": true + }] }, - "dimse" : [{ - "host" : "localhost", - "port" : 4242, - "aeTitle" : "ORTHANC", - "default": true - },{ - "host" : "0.0.0.0", - "port" : 11112, - "aeTitle" : "OHIFDCM", - "default" : true, - "server" : true - }], "defaultServiceType": "dimse" } diff --git a/config/siimDCM4CHEE.json b/config/siimDCM4CHEE.json index 88da691bf..5e47f4642 100644 --- a/config/siimDCM4CHEE.json +++ b/config/siimDCM4CHEE.json @@ -1,17 +1,17 @@ { - "dicomWeb": { - "endpoints": [ + "servers": { + "dicomWeb": [ { "name": "SIIM DCM4CHEE", - "wadoUriRoot" : "http://vna.hackathon.siim.org/dcm4chee-arc/wado/DCM4CHEE", + "wadoUriRoot": "http://vna.hackathon.siim.org/dcm4chee-arc/wado/DCM4CHEE", "qidoRoot": "http://vna.hackathon.siim.org/dcm4chee-arc/qido/DCM4CHEE", "wadoRoot": "http://vna.hackathon.siim.org/dcm4chee-arc/wado/DCM4CHEE", "qidoSupportsIncludeField": true, - "imageRendering" : "wadouri", - "requestOptions" : { - "logRequests" : false, - "logResponses" : false, - "logTiming" : true + "imageRendering": "wadouri", + "requestOptions": { + "logRequests": false, + "logResponses": false, + "logTiming": true } } ] @@ -36,4 +36,4 @@ "url": "", "port": "" } -} \ No newline at end of file +}