Skip to content
This repository has been archived by the owner on Sep 10, 2021. It is now read-only.

Commit

Permalink
Migrate dicomserver module settings to database
Browse files Browse the repository at this point in the history
  • Loading branch information
Jamie Snape committed Dec 8, 2014
1 parent 40a1998 commit 64961b7
Show file tree
Hide file tree
Showing 18 changed files with 577 additions and 565 deletions.
22 changes: 1 addition & 21 deletions modules/dicomserver/configs/module.ini
Expand Up @@ -6,24 +6,4 @@ description = "Receive and upload DICOM files and provide DICOM query/retrieve s
category = "DICOM"
dependencies = api,dicomextractor
uuid = "f850b92d-3f22-4560-bca6-dfbade51a181"
version = "1.0.1"

; uploader DCMTK command
dcm2xml = "dcm2xml"
storescp = "storescp"
dcmqrscp = "dcmqrscp"
dcmqridx = "dcmqridx"
; uploader reception directory
receptiondir = ""
; storescp configuration
storescp_port = "55555"
; seconds
storescp_study_timeout = "15"
; pydas destnation folder
pydas_dest_folder = "Public"
; dcmqrscp configuration
dcmqrscp_port = "9885"
; server AE title
server_ae_title = "MIDAS_PACS"
; remote AEs
peer_aes = ""
version = "1.1.0"
39 changes: 31 additions & 8 deletions modules/dicomserver/constant/module.php
Expand Up @@ -18,14 +18,37 @@
limitations under the License.
=========================================================================*/

define('MIDAS_DICOMSERVER_DCM2XML_COMMAND_KEY', 'dcm2xml_command');
define('MIDAS_DICOMSERVER_DCM2XML_COMMAND_DEFAULT_VALUE', 'dcm2xml');
define('MIDAS_DICOMSERVER_STORESCP_COMMAND_KEY', 'storescp_command');
define('MIDAS_DICOMSERVER_STORESCP_COMMAND_DEFAULT_VALUE', 'storescp');
define('MIDAS_DICOMSERVER_STORESCP_PORT_KEY', 'storescp_port');
define('MIDAS_DICOMSERVER_STORESCP_PORT_DEFAULT_VALUE', 55555);
define('MIDAS_DICOMSERVER_STORESCP_STUDY_TIMEOUT_KEY', 'storescp_study_timeout');
define('MIDAS_DICOMSERVER_STORESCP_STUDY_TIMEOUT_DEFAULT_VALUE', 15);
define('MIDAS_DICOMSERVER_RECEPTION_DIRECTORY_KEY', 'reception_directory');
define('MIDAS_DICOMSERVER_RECEPTION_DIRECTORY_DEFAULT_VALUE', '');
define('MIDAS_DICOMSERVER_DESTINATION_FOLDER_KEY', 'destination_folder');
define('MIDAS_DICOMSERVER_DESTINATION_FOLDER_DEFAULT_VALUE', 'Public');
define('MIDAS_DICOMSERVER_DCMQRSCP_COMMAND_KEY', 'dcmqrscp_command');
define('MIDAS_DICOMSERVER_DCMQRSCP_COMMAND_DEFAULT_VALUE', 'dcmqrscp');
define('MIDAS_DICOMSERVER_DCMQRSCP_PORT_KEY', 'dcmqrscp_port');
define('MIDAS_DICOMSERVER_DCMQRSCP_PORT_DEFAULT_VALUE', 9885);
define('MIDAS_DICOMSERVER_DCMQRIDX_COMMAND_KEY', 'dcmqridx_command');
define('MIDAS_DICOMSERVER_DCMQRIDX_COMMAND_DEFAULT_VALUE', 'dcmqridx');
define('MIDAS_DICOMSERVER_SERVER_AE_TITLE_KEY', 'server_ae_title');
define('MIDAS_DICOMSERVER_SERVER_AE_TITLE_DEFAULT_VALUE', 'MIDAS_PACS');
define('MIDAS_DICOMSERVER_PEER_AES_KEY', 'peer_aes');
define('MIDAS_DICOMSERVER_PEER_AES_DEFAULT_VALUE', '');

// server status
define('MIDAS_DICOM_STORESCP_IS_RUNNING', 1);
define('MIDAS_DICOM_DCMQRSCP_IS_RUNNING', 2);
define('MIDAS_DICOM_SERVER_NOT_RUNNING', 0);
define('MIDAS_DICOM_SERVER_NOT_SUPPORTED', -1);
define('MIDAS_DICOMSERVER_STORESCP_IS_RUNNING', 1);
define('MIDAS_DICOMSERVER_DCMQRSCP_IS_RUNNING', 2);
define('MIDAS_DICOMSERVER_SERVER_NOT_RUNNING', 0);
define('MIDAS_DICOMSERVER_SERVER_NOT_SUPPORTED', -1);

// default subdirectories and files
define('LOG_DIR', '/logs');
define('PROCESSING_DIR', '/processing');
define('PACS_DIR', '/pacs');
define('DCMQRSCP_CFG_FILE', '/dcmqrscp_midas.cfg');
define('MIDAS_DICOMSERVER_LOGS_DIRECTORY', '/logs');
define('MIDAS_DICOMSERVER_PROCESSING_DIRECTORY', '/processing');
define('MIDAS_DICOMSERVER_PACS_DIRECTORY', '/pacs');
define('MIDAS_DICOMSERVER_DCMQRSCP_CFG_FILE', '/dcmqrscp_midas.cfg');
73 changes: 73 additions & 0 deletions modules/dicomserver/controllers/AdminController.php
@@ -0,0 +1,73 @@
<?php
/*=========================================================================
MIDAS Server
Copyright (c) Kitware SAS. 26 rue Louis Guérin. 69100 Villeurbanne, FRANCE
All rights reserved.
More information http://www.kitware.com
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.txt
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
=========================================================================*/

/** Admin controller for the dicomserver module. */
class Dicomserver_AdminController extends Dicomserver_AppController
{
/** @var array */
public $_models = array('Setting');

/** @var array */
public $_moduleComponents = array('Server');

/** Index action */
public function indexAction()
{
$this->requireAdminPrivileges();

$this->view->pageTitle = 'DICOM Server Module Configuration';
$form = new Dicomserver_Form_Admin();

if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost();

if ($form->isValid($data)) {
$values = $form->getValues();

foreach ($values as $key => $value) {
$this->Setting->setConfig($key, $value, $this->moduleName);
}
}

$form->populate($data);
} else {
$elements = $form->getElements();

foreach ($elements as $element) {
$name = $element->getName();

if ($name != 'csrf' && $name !== 'submit') {
$value = $this->Setting->getValueByName($name, $this->moduleName);

if (!is_null($value)) {
$form->setDefault($name, $value);
}
}
}
}

$this->view->form = $form;

$dashboard = $this->ModuleComponent->Server->isDICOMServerWorking();
unset($dashboard['Status']);
$this->view->dashboard = $dashboard;
session_start();
}
}
96 changes: 0 additions & 96 deletions modules/dicomserver/controllers/ConfigController.php

This file was deleted.

22 changes: 11 additions & 11 deletions modules/dicomserver/controllers/components/ApiserverComponent.php
Expand Up @@ -58,7 +58,7 @@ public function start($args)
$status_args['dcmqrscp_cmd'] = $args['dcmqrscp_cmd'];
}
$running_status = $this->status($status_args);
if ($running_status['status'] > MIDAS_DICOM_SERVER_NOT_RUNNING && !array_key_exists('get_command', $args)
if ($running_status['status'] > MIDAS_DICOMSERVER_SERVER_NOT_RUNNING && !array_key_exists('get_command', $args)
) {
throw new Exception(
'At least one DICOM service is already running. Please stop all services first before start them again!',
Expand Down Expand Up @@ -105,19 +105,19 @@ public function start($args)
$serverComponent = MidasLoader::loadComponent('Server', 'dicomserver');
$incoming_dir = $serverComponent->getDefaultReceptionDir();
}
$processing_dir = $incoming_dir.PROCESSING_DIR;
$processing_dir = $incoming_dir.MIDAS_DICOMSERVER_PROCESSING_DIRECTORY;
if (!file_exists($processing_dir)) {
KWUtils::mkDir($processing_dir, 0777);
}
$log_dir = $incoming_dir.LOG_DIR;
$log_dir = $incoming_dir.MIDAS_DICOMSERVER_LOGS_DIRECTORY;
if (!file_exists($log_dir)) {
KWUtils::mkDir($log_dir, 0777);
}
$dcmqrscp_cmd = 'dcmqrscp';
if (!empty($args['dcmqrscp_cmd'])) {
$dcmqrscp_cmd = $args['dcmqrscp_cmd'];
}
$dcmqrscp_pacs_dir = $incoming_dir.PACS_DIR;
$dcmqrscp_pacs_dir = $incoming_dir.MIDAS_DICOMSERVER_PACS_DIRECTORY;
if (!file_exists($dcmqrscp_pacs_dir)) {
KWUtils::mkDir($dcmqrscp_pacs_dir, 0777);
}
Expand All @@ -140,7 +140,7 @@ public function start($args)
$python_params[] = '-d '.$dest_folder;
// used by dcmqrscp
$python_params[] = '-q '.$dcmqrscp_cmd;
$python_params[] = '-f '.$dcmqrscp_pacs_dir.DCMQRSCP_CFG_FILE;
$python_params[] = '-f '.$dcmqrscp_pacs_dir.MIDAS_DICOMSERVER_DCMQRSCP_CFG_FILE;
$start_server_command = KWUtils::prepareExeccommand($python_cmd, $python_params);
if (array_key_exists('get_command', $args)) {
$start_server_command_string = str_replace("'", "", $start_server_command);
Expand Down Expand Up @@ -197,11 +197,11 @@ public function status($args)
$ret = array();
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// currently not supported in windows
$ret['status'] = MIDAS_DICOM_SERVER_NOT_SUPPORTED;
$ret['status'] = MIDAS_DICOMSERVER_SERVER_NOT_SUPPORTED;

return $ret;
} else {
$ret['status'] = MIDAS_DICOM_SERVER_NOT_RUNNING;
$ret['status'] = MIDAS_DICOMSERVER_SERVER_NOT_RUNNING;
}
$ps_cmd = 'ps';
$cmd_params = array();
Expand All @@ -214,15 +214,15 @@ public function status($args)
$fields = preg_split("/\s+/", trim($line));
$process = $fields[4];
if (!strcmp($process, $storescp_cmd)) {
$ret['status'] = MIDAS_DICOM_STORESCP_IS_RUNNING;
$ret['status'] = MIDAS_DICOMSERVER_STORESCP_IS_RUNNING;
// need to be updated if python script is changed
$ret['user_email'] = $fields[21];
$runningSCPs += 1;
if ($runningSCPs == $totalSCPs) {
break;
}
} elseif (!strcmp($process, $dcmqrscp_cmd)) {
$ret['status'] += MIDAS_DICOM_DCMQRSCP_IS_RUNNING;
$ret['status'] += MIDAS_DICOMSERVER_DCMQRSCP_IS_RUNNING;
$runningSCPs += 1;
if ($runningSCPs == $totalSCPs) {
break;
Expand Down Expand Up @@ -261,7 +261,7 @@ public function stop($args)
}

$running_status = $this->status($status_args);
if ($running_status['status'] == MIDAS_DICOM_SERVER_NOT_RUNNING && !array_key_exists('get_command', $args)
if ($running_status['status'] == MIDAS_DICOMSERVER_SERVER_NOT_RUNNING && !array_key_exists('get_command', $args)
) {
$ret['message'] = 'DICOM server is not running now!';

Expand All @@ -282,7 +282,7 @@ public function stop($args)
$serverComponent = MidasLoader::loadComponent('Server', 'dicomserver');
$incoming_dir = $serverComponent->getDefaultReceptionDir();
}
$log_dir = $incoming_dir.LOG_DIR;
$log_dir = $incoming_dir.MIDAS_DICOMSERVER_LOGS_DIRECTORY;
if (!file_exists($log_dir)) {
KWUtils::mkDir($log_dir, 0777);
}
Expand Down

0 comments on commit 64961b7

Please sign in to comment.