Posts by kakarr0t

    Hey Marcel, I'm using the default SQLite. Would this be the proper command to restart the database?


    Code
    dgate -v -r


    What do you suggest for restarting the database? I believe I tried restarting both of our conquest servers as well.... But I'll be sure to try that again if/when our modalities are unable to send to Conquest. Thanks for your help on this. Once we get this system running reliably, you have no idea how much time/manpower it will save us during failovers.


    --
    Tim

    There has been a problem with our setup which we've been unable to determine problem.


    Symptom :: I migrated all of our CT, dental, remote outside studies, and MRI modalities to send inages to Conquest, It works flawlessly for about 3-4 days. THEN.... we start getting calls that random images within a series aren't showing up in PACS, as the problem progresses, nothing at all will send to PACS.


    Attempted fix :: First, I tried restarting the Conquest dgate, which did not help. Then I rebooted our Conquest servers and updated our /conquest/dicom.ini and /etc/keepalived/keepalived.conf config files, making the following changes.


    /conquest/dicom.ini for both of our Conquest servers (Conquest01 & Conquest02
    RetryDelay = 30 <--- modified this line
    RetryForwardFailed = 1 <--- added this line


    /etc/keepalived/keepalived.conf
    persistence_timeout 10 <--- uncommented this line and modified it to 10
    nat_mask 255.255.255.0 <--- removed this line since we're not using NAT


    After these changes, we began sending all images back to our Conquest VIP 192.168.1.23, once again everything worked flawless for about 3-4 days.


    Symptom persists :: after about 3-4 days, our modalities are unable to send anything to Conquest, we get timeouts, unable to dicom ping, unable to send, no explanation why.


    I will continue to update this post until I find a solution. Stay tuned.

    Hey Conquest Users and Admins. I've been working on our setup for many many months and have finally got it to do everything we need it to do. So, I thought I'd share my configs in case anyone else is interested in doing the same type of thing.


    Prior to Conquest... We have two PACS servers, PACS01 192.168.1.11 and PACS02 192.168.1.12 for redundancy and failover purposes. Lets say ALL modalities are currently sending DICOM images to PACS01's IP/AE Title and then there's a problem with PACS01 or we need to do an update. To prevent downtime, we have to come in and physically touch every modality device and swap it over to PACS02 192.168.1.12 which can take a LOT of time. Then we can do our repairs or upgrades PACS01, THEN we can do it all over again. Swap all the modalities back over to PACS01, make the repairs or upgrades to PACS02 No bueno.


    With Conquest... Conquest is set up as our DICOM router and sits in front of our PACS servers. All Modalities send their DICOM images to Conquest instead of the two PACS server. Then in the senario above where we need to failover to PACS02 to resolve an issue on PACS01, we just edit the configs to point Conquest to PACS02 instead of having to touch every modality device in our facility. This is MUCH simpler and faster.


    My setup includes (2) two Ubuntu 12.04 LTS linux servers running Conquest 1.4.17c for DICOM routing, keepalived for network failover, and IPVS (via keepalived) for round robin network load balancing.


    The configs are almost exactly the same on both Conquest servers with minor differences for Conquest01/conquest02.


    Our Network Setup...
    Conquest01 192.168.1.21
    Conquest02 192.168.1.22
    Conquest VIP 192.168.1.23 <--- This is where all modalities will be sending DICOM images
    PACS01 192.168.1.11
    PACS02 192.168.1.12


    Our /conquest/dicom.ini is the same on both Conquest01 and Conquest02 servers. The only thing I believe we edited beyond the defaults is the last line ImportConverter0.


    Code
    # This file contains configuration information for the DICOM server# Example Linux version using SqLite# Copy this file to dicom.ini to use it[sscscp]MicroPACS = sscscpEdition = Personal# Network configuration: server name and TCP/IP port#MyACRNema = CONQUESTSRV1TCPPort = 5678# Reference to other files: known dicom servers; database layout; sopsACRNemaMap = acrnema.mapkFactorFile = dicom.sqlSOPClassList = dgatesop.lst# Host for postgres or mysql only, name, username and password for databaseSQLHost = localhostSQLServer = ./data/dbase/conquest.db3Username = dontcarePassword = dontcarePostGres = 0MySQL = 0SQLite = 1UseEscapeStringConstants = 0DoubleBackSlashToDB = 0#IndexDBF = 1#PackDBF = 0#LongQueryDBF = 1000# Configure databaseTruncateFieldNames = 10MaxFieldLength = 254MaxFileNameLength = 255FixPhilips = 0FixKodak = 0UIDPrefix = 99999.99999EnableReadAheadThread = 1PatientQuerySortOrder =StudyQuerySortOrder =SeriesQuerySortOrder =ImageQuerySortOrder =EnableComputedFields = 1TCPIPTimeOut = 300FailHoldOff = 60RetryDelay = 100QueueSize = 128WorkListMode = 0WorkListReturnsISO_IR_100 = 1DebugLevel = 5Prefetcher = 0LRUSort =AllowTruncate =DecompressNon16BitsJpeg = 1UseBuiltInJPEG = 1IgnoreOutOfMemoryErrors = 0PadAEWithZeros = 0FileNameSyntax = 3# Configuration of compression for incoming images and archivalDroppedFileCompression = unIncomingCompression = unArchiveCompression = as# Names of the database tablesPatientTableName = DICOMPatientsStudyTableName = DICOMStudiesSeriesTableName = DICOMSeriesImageTableName = DICOMImagesDMarkTableName = DICOMAccessUpdatesRegisteredMOPDeviceTable = RegisteredMOPIDsUIDToMOPIDTable = UIDToMOPIDUIDToCDRIDTable = UIDToCDRID# Banner and host for debug informationPACSName = CONQUESTSRV1OperatorConsole = 127.0.0.1# Configuration of disk(s) to store imagesMAGDeviceThreshhold = 0MAGDevices = 1MAGDevice0 = ./data/ImportConverter0 = forward to PACS01 org %u; destroy; # This forwards DICOM images to PACS01 with the AE Title of the originating sending modality, then destroys Conquest's copy of the files#ImportConverter0 = forward to PACS02 org %u; destroy; # Uncomment this line to make PACS02 the destination for DICOM images


    Our /conquest/acrnema.map is the same on both Conquest01 and Conquest02 servers.


    Code
    CONQUESTSRV1 127.0.0.1 5678 asPACS01 192.168.1.11 12000 UNPACS02 192.168.1.12 12000 UN


    For Failover with Keepalived and roud robin loadbalancing with IPVS you'll need to first install Keepalived and then update this script on both servers, there's a small difference between Conquest01's version and Conquest02's version of this config file.


    (for Ubuntu)

    Code
    sudo apt-get updatesudo apt-get install keepalived


    Conquest01's /etc/keepalived/keepalived.conf


    Code
    # Virtual IP for Image Destinationvrrp_instance VI_1 { # initial state state MASTER interface eth0 # arbitary unique number 0..255 # used to differentiate multiple instances of vrrpd virtual_router_id 1 # for electing MASTER, highest priority wins. # to be MASTER, make 50 more than other machines. priority 100 virtual_ipaddress { 192.168.1.23/24 } # Invoked to master transition notify_master "/etc/keepalived/bypass_ipvs.sh del 192.168.1.23" # Invoked to backup(slave) transition notify_backup "/etc/keepalived/bypass_ipvs.sh add 192.168.1.23" # Invoked to fault transition notify_fault "/etc/keepalived/bypass_ipvs.sh add 192.168.1.23"}# Virtual IP & Physical Conquest Serversvirtual_server 192.168.1.23 5678 { delay_loop 10 lb_algo wlc # Round Robin lb_kind DR # Direct Routing# persistence_timeout 50 nat_mask 255.255.255.0 protocol TCP# Physical MASTER (Conquest01) real_server 192.168.1.21 5678 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 5678 } }# Physical BACKUP (Conquest02) real_server 192.168.1.22 5678 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 5678 } }}



    Conquest02's /etc/keepalived/keepalived.conf
    The only difference here are these two lines.
    Instead of state MASTER, change it to state BACKUP
    Instead of priority 100, change it to priority 50


    Next, and Finally, add this script to both Conquest servers and don't forget to make it executable.


    Code
    chmod 755 /etc/keepalived/bypass_ipvs.sh



    BOOM! DONE! FINISHED!

    My Restart Script :: Updated


    Example usage ::

    Code
    /conquest/cqservice status/conquest/cqservice clstatus/conquest/cqservice stop/conquest/cqservice start/conquest/cqservice restart/conquest/cqservice clrestart


    (1) I've added a status option so that you can see whether the dgate service is running or not - status.


    **I have two Conquest servers running in a cluster for redundancy, so....


    (2) There's also an option to check the status of the dgate service on the cluster (both local and peer Conquest servers) - clstatus.
    (3) I may also want to restart the dgate service on the cluster (both local and peer Conquest servers), instead of just on the local system - clrestart.
    - Lets say I'm using 192.168.1.71 for Conquest01 and 192.168.1.72 for Conquest02
    - This will restart the dgate service on the cluster; otherwise, I can just use the restart option if I only want to restart the dgate service on whichever server I'm currently logged into


    To use this script


    (1) you'll need to first make sure you've created a shell script in /etc/rc5.d called Z99Conquest, that
    contains

    Code
    cd /conquest/conquest/dgate -^/conquest/serverstatus.log & >/dev/null


    (2) Then update your Conquest home CQHOME; and ONLY if you are running two servers in a cluster, update the remote aka peer CQPEER IP address, otherwise, comment out CQPEER and any other section relating to the cluster such as clstatus and clrestart.


    (3) IF you are running Conquest on an identical system as part of a cluster for redundancy purposes, THEN copy this script to the peer system and repeat the TWO steps above for that system. Example :: 192.168.1.71 for Conquest01 and 192.168.1.72 for Conquest02.


    Reference
    I'm running Ubuntu 12.04 LTS, with Conquest 1.4.17c
    My conquest home location is /conquest
    My restart script is called cqservice and is located at /conquest/cqservice


    Here's my latest Conquest Restart Script

    1.4.17c Restart Script :: Problems


    After installing the startup script, I've never gotten it to work consistently.

    Code
    conquest-pacs.sh



    It will stop dgate, but won't start it back up again consistently. Below, You'll see where it's running. I know this because I'm able to get the process ID. I'm able to stop dgate using the stop command, but then it takes several tries to get it to start. I've tested this several times and i consistently get this same result.

    Code
    root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'5477root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh stopStopping Conquest PACS Serverps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# /etc/init.d/conquest-pacs.sh startStarting Conquest PACS Server: conquest_pacs.sh.root@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'5627


    Here, I tried to run the command manually and got the same result where I'm having to try multiple times before dgate will actually start.

    Code
    root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --pidfile /var/run/conquest_pacs.sh.5678.pid --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --pidfile /var/run/conquest_pacs.sh.5678.pid --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'root@vlconquest01:/conquest# start-stop-daemon --start --chuid root --chdir /conquest --exec /conquest/dgate --startas /conquest/dgate --background -- -^/conquest/serverstatus.logroot@vlconquest01:/conquest# ps -elf | grep dgate | grep -v grep | awk '{ print $4}'5832


    I'm not sure, but the issue might have something to do with the PIDFILE variable within the script

    Code
    PIDFILE=/var/run/$NAME.$PORT.pid


    I don't see anywhere in the script where the PIDFILE is actually being created. To confirm this, I looked in the directory to be sure and the PIDFILE doesn't exist.

    Code
    ls -lhtr /var/run/


    Notice in the second example where i tried to run the start script manually several different ways, of the ways tried, i ran it BOTH omitting and with the PID section. Regardless of the variations, It still took multiple tries before dgate actually started.


    In the end, I created my own script.


    FIRST, I created a shell script (such as is suggested) in /etc/rc5.d called Z99Conquest, that contains

    Code
    /conquest/dgate -^/conquest/serverstatus.log & >/dev/null


    This script starts Conquest on server boot.


    THEN, I created this script for manually starting and stopping Conquest, named /conquest/cqservice

    Code
    CQHOME=/conquestif [ $1 = start ]; then CQPID=`ps -elf | grep dgate | grep -v grep | awk '{ print $4}'` if [ -z "$CQPID" ]; then echo "Starting Conquest" /etc/init.d/conquest >/dev/null CQPID=`ps -elf | grep dgate | grep -v grep | awk '{ print $4}'` echo "The Conquest PID is ::" $CQPID else echo "Conquest Already Running under ::" $CQPID fi echofiif [ $1 = stop ]; then echo "Stopping Conquest" CQPID=`ps -elf | grep dgate | grep -v grep | awk '{ print $4}'` if [ -z "$CQPID" ]; then echo "Conquest Not Running. Terminating Script." exit fi kill $CQPID echofiif [ $1 = restart ]; then echo "Stopping Conquest" CQPID=`ps -elf | grep dgate | grep -v grep | awk '{ print $4}'` if [ -z "$CQPID" ]; then echo "Starting Conquest" /etc/init.d/conquest >/dev/null CQPID=`ps -elf | grep dgate | grep -v grep | awk '{ print $4}'` echo "The Conquest PID is ::" $CQPID exit fi kill $CQPID echo echo "Starting Conquest" /etc/init.d/conquest >/dev/null CQPID=`ps -elf | grep dgate | grep -v grep | awk '{ print $4}'` echo "The Conquest PID is ::" $CQPID echofi


    I've tested this script successfully. I know it's much simpler, probably less eligant, and may not account for certain situations, but for a quick and dirty basic start/stop/restart script, it works.


    Example usage ::

    Code
    /conquest/cqservice stop
    /conquest/cqservice start
    /conquest/cqservice restart

    marcel


    I used the following forwarding syntax in my dicom.ini file and all works perfectly.


    Code
    ImportConverter0 = forward to PACS_ARCHIVE org %u; destroy;


    When I use :: org %u
    the originating AE Title is passed to our PACS_ARCHIVE server just as I needed. Thanks!!


    --
    Tim

    Thanks for your imput. I found the 'org' option in windowsmanual.pdf.


    I used this syntax for sending ::

    Code
    ImportConverter0 = forward to PACS_ARCHIVE org; destroy;


    Then sent some images and ran a DICOM dump on the images ::

    Code
    (0008, 0054) Retrieve AE Title(3) AE 1 12 CONQUESTSRV1


    So it looks like the 'org' option isn't working the way I have it configured since it still shows the image came from CONQUESTSRV1 instead of my modality device MRI-1. I noticed the syntax in windowsmanual.pdf looks like this ::

    Code
    ExportConverter2 = forward to RTSERVER; forward to RTSERVER2 org MYSERVER


    Does this mean I would have to specify using the 'org' as a switch then use MYSERVER to define the originating server/modality? If so, there's going to be an issue because this is a large hospital sending from many different modalities and there's no way I would ever be able to specially define each originating server/modality. And, if this is the case, is there any way for Conquest to automatically use the 'org' switch on any and all originating servers/modalities automatically? I hope I'm making sense.

    Conquest 1.4.17c
    OS Ubuntu 12.04 LTS


    I've thoroughly tested several versions of Conquest on both Windows and Linux. I'm very close to implementation. One of the last major issues I'm having is regarding the AE Title. When modality machines MRI-1, US-3, and CT-04 send images to our Conquest server, Conquest then forwards the images to our PACS system then deletes them from the Conquest server. Then our PACS server does special things with these images depending upon the AE Title the images came from... Currently, our PACS system sees all of the images as coming from Conquest and not the modality where they originated. Here's our current store/destroy config command in dicom.ini.


    Code
    ImportConverter0 = forward to PACS_ARCHIVE; destroy;


    Is there any way to have Conquest allow the originating AE Title be passed through to the end destination PACS system? Thanks!


    --
    Tim B

    I'm new to Conquest and have a few questions regard setting this up as a DICOM Router. In the instruction PDF there is a section for (a) DICOM Routing and another for (b) DICOM Gateway or virtual server. What I'd like to do is set this software to accept all incoming DICOM requests from any modality or device, and forward that to our actual PACS server and I'm not sure which option to use.


    (i) I'm also curious why the software only seems to need an AE Title and not the PACS server's IP address. (ii) When configured as a DICOM Router, does Conquest act as an intermediary between a Modality device and the server...? Meaning, when the server offers a response, for instance handing out the Modality Worklist to a machine, how does Conquest handle the information to and from the PACS server. Any advice, direction, insight, or some type of explaination is greatly appreciated.