My Conquest Setup :: Dicom Routing/Failover/Load Balance

  • (1) I'm still getting errors where half of a study won't transfer over to PACS, any thoughts?


    Thu Mar 6 10:55:19 2014 Importconverter0.1: nop DIMENSIONS_AWS MG 479541 1.2.840.113681.169936052.1392965017.4388.425
    Thu Mar 6 10:55:19 2014 Importconverter0.2: destroyed received image
    Thu Mar 6 10:55:19 2014 UPACS THREAD 2264: ENDED AT: Thu Mar 6 10:55:19 2014
    Thu Mar 6 10:55:19 2014 UPACS THREAD 2264: TOTAL RUNNING TIME: 4 SECONDS
    Thu Mar 6 10:55:22 2014 ImportConverter0.5: forwarded object to VMLTA02_ARCHIVE
    Thu Mar 6 10:55:24 2014 Importconverter0.1: nop DR2_CHC CR 1343659 1.3.46.670589.26.602358.4.20140306.105357.117736.0


    Thu Mar 6 10:56:11 2014 UPACS THREAD 2266: STARTED AT: Thu Mar 6 10:56:11 2014
    Thu Mar 6 10:56:11 2014 Calling Application Title : "DIMENSIONS_AWS "
    Thu Mar 6 10:56:11 2014 Called Application Title : "CONQUESTSRV1 "
    Thu Mar 6 10:56:11 2014 Application Context : "1.2.840.10008.3.1.1.1", PDU length: 16384
    Thu Mar 6 10:56:11 2014 Presentation Context 0 "1.2.840.10008.5.1.4.1.1.1.2" 1
    Thu Mar 6 10:56:12 2014 ImportConverter0.6: forwarded object to VMLTA02_ARCHIVE
    Thu Mar 6 10:56:12 2014 *** ImportConverter0.6: Forward failed to connect to host VMLTA02_ARCHIVE
    Thu Mar 6 10:56:12 2014 Importconverter0.1: nop DIMENSIONS_AWS MG 479541 1.2.840.113681.169936052.1392965017.4388.407
    Thu Mar 6 10:56:12 2014 Importconverter0.2: destroyed received image
    Thu Mar 6 10:56:12 2014 UPACS THREAD 2266: ENDED AT: Thu Mar 6 10:56:12 2014
    Thu Mar 6 10:56:12 2014 UPACS THREAD 2266: TOTAL RUNNING TIME: 1 SECONDS


    (2) If there's no clear solution to this problem, I would like to try setting up ExportConverter0 so that we can utilize RetryDelay and RetryForwardFailed


    What is the proper syntax for converting this statement from ImportConverter into ExportConverter?


    ImportConverter0 = forward to PACS_ARCHIVE org %u channel *; nop %u %m %i %o; destroy;


    perhaps?


    ExportConverter0 = forward to PACS_ARCHIVE org %u channel *; nop %u %m %i %o; destroy;


    Once the image has successfully stored, I want Conquest to destroy the image, will I need to use destroy; just as I did with ImportConverter0?


    (3) Just so I understand correctly, regardless of the fact that I already have RetryDelay and RetryForwardFailed configured, they aren't actually being triggered unless (a) I'm using a database and (b) I'm using Exportconverter0..... Is this correct? Thanks!


    --Tim

  • Hi,


    (1) Can you try to forward to another conquest? I think you will not see this error then. I guess the PACS refuses a connection when it is heavily loaded.


    2) ExportConverters can be used like so (immediate sending):


    ForwardAssociationLevel=SERIES
    ExportConverters = 1
    ExportConverter0 = forward to PACS


    or (delayed sending, default after 5 minutes)


    ExportConverters = 1
    ExportConverter0 = forward series to PACS


    Export converets use the disk images and database, so a delete is only possible after the all data has been sent. This may work:


    ForwardAssociationLevel=SERIES
    ExportConverters = 2
    ExportConverter0 = forward to PACS
    ExportConverter1= delete series after 3600


    This would delete all recieved data after one hour. There is no guarantee though that the data is recieved by then (a retry occurs every 100s)


    The channel * is only used for importconverters as stated in the the documentation.


    Marcel

  • I have a couple questions... Did you leave something out here?


    Quote

    or (delayed sending, default after 5 minutes)


    ExportConverters = 1
    ExportConverter0 = forward series to PACS


    With the below config, specifically for deleting studies after an hour, I don't see in the logs where studies are being deleted/destroyed and our space is filling up on our hard disk. Should the syntax be destroy instead of delete after 3600? If I search /conquest/serverstatus.log, what key word could I search by to see if conquest is deleting images after an allotted time? I also tried searching the documentation for this answer, but couldn't find it.


    ExportConverters = 2
    ExportConverter0 = forward to PACS_ARCHIVE org %u; nop %u %m %i %o;
    ExportConverter0 = delete series after 3600


    Thanks for your help Marcel.


    --Tim

  • Marcel, I think we figured it out. I've updated our ExportConverter to the following ::


    ExportConverters = 1
    ExportConverter0 = forward to PACS_ARCHIVE org %u; nop %u %m %i %o; delete series after 600;


    My goal is with delete series after 600, that images will be removed after 10 minutes.


    It seems to be working, according to our logs


    Fri Mar 7 11:48:31 2014 Removed file: [MAG0:354660/1.2.840.113619.2.5.23161817.1394191978.602.5_0602_000146_139421751201ec.v2]
    Fri Mar 7 11:48:31 2014 Removed file: [MAG0:354660/1.2.840.113619.2.5.23161817.1394191978.602.5_0602_000147_139421751201ed.v2]
    Fri Mar 7 11:48:31 2014 Removed file: [MAG0:354660/1.2.840.113619.2.5.23161817.1394191978.602.5_0602_000148_139421751301ee.v2]
    Fri Mar 7 11:48:31 2014 Removed file: [MAG0:354660/1.2.840.113619.2.5.23161817.1394191978.602.5_0602_000149_139421751301ef.v2]


    One other question, does the log below mean the image didn't store to PACS so it's being "rewritten" or resent?


    Fri Mar 7 11:52:48 2014 Rewritten file: ./data/2535695/1.2.840.113619.2.334.3.554316804.426.1386551381.289_0002_000014_13942134260039.v2



    Thanks again for your help.

  • I have a problem I'm not sure how to resolve. Thanks for your help in advance!


    I switched to using the database option, because for a reason I don't understand, Conquest would drop images and they'd forever be lost with no clue why. With the database, at least Conquest attempts to resend images that never transferred to our PACS server.


    So my problem is that several images aren't storing to our PACS server and Conquest is saving them on our hard disk making our hard disk run out of space.


    (a) First off, how do I delete studies? When I attempt to delete them, I get this error. I need to be able to delete images so we don't run out of disk space. I'm open to any suggestions.


    Fri May 9 17:20:36 2014 Server command sent using DGATE -- option
    Fri May 9 17:20:36 2014 ***[DeleteImageFile] 1.2.392.200036.9116.2.5.1.37.2427348772.1399422929.550923 -FAILED: Error on Load


    The command I'm using is /conquest/dgate --deleteimagefile:SOPID


    (b) Next, the error I'm getting for the images Conquest has decided not to send and is holding on to are below. Is there any way to get Conquest to ignore these types of errors and send them to our PACS destination regardless? Any other suggestions?


    Thu May 8 00:37:16 2014 Inconsistent SeriesTime in DICOMSeries: PatientID = '29153XXX' SeriesInst = '1.2.840.113619.2.5.24251717.1399508756.601.5' AND SeriesPat = '2915350', Old='003211', New='003212'
    Thu May 8 03:51:18 2014 Inconsistent StudyDescr in DICOMStudies: PatientID = '1560XXX' StudyInsta = '1.2.840.113696.305193.500.1018047.20140508010225', Old='CT ABD/PEL W IV CON', New='PAPERWORK'
    Thu May 8 03:51:18 2014 Inconsistent ReferPhysi in DICOMStudies: PatientID = '1560XXX' StudyInsta = '1.2.840.113696.305193.500.1018047.20140508010225', Old='DOCTOR^UNASSIGNED^^^', New='HAUKOOS^JASON^^^'
    Thu May 8 07:12:51 2014 Inconsistent PatientNam in DICOMPatients: PatientID = '36222XXX' PatientID = '36222XXX', Old='MCGEE^GARRICK^^^', New='MCGEE^GARRICK'


    --------------------------------------------
    Here's my latest dicom.ini config.
    --------------------------------------------


  • Hi,


    the commands are:


    /conquest/dgate --deleteimage:PatientID:SOPUID
    /conquest/dgate --deletesrtudy:PatientID:StudyUID
    etc


    The easiest way to cleanup is to set, (Quote from the manual): "NightlyCleanThreshhold. If at 01:00 at night the disk space is less than this amount of MB,one or more least recently used patients are automatically deleted until the free disk space is about 5 MB larger (Windows only). If set to 0, no deletion occurs (default). Uses dgate option –ff. Conquest addition. "


    The "windows only" statement is no longer correct. It should work in linux too.


    The warning is a mismatch between data in the database at study or series level and what is in the image (e.g., same study different study information). It is just a warning for conquest - but it may be an error for your PACS that rejects inconsistent data.


    I therefore do not think this is a conquest problem. Without a database it could not even detect it.


    Marcel

  • Hi Tim,


    try this:


    [lua]
    ImportConverter0 = Data.PatientID = string.gsub(Data.PatientID, '^0*', '')


    it replaces zeros at the start of the string with nothing. The new 'Modify' browser function in 1.4.19beta allows trying it out the Lua code from the GUI.


    Marcel

  • Hi Marcel, I updated the .ini file and don't see in the logs where conquest is actually triggering the importconverter.


    LOGS ::
    Tue Mar 22 17:11:45 2016 Importconverter0.0: nop CONQUESTSRV1 KPACS_TIM IO TEST^TEST 000123465 201507241458 1 1.2.840.114384.44214243.779384.20150724.145833.2 1.2.840.114384.44214243.20150724.145811.2 20150724 145811.0000
    Tue Mar 22 17:11:45 2016 Importconverter1.0 executes: setifempty 0002,0016 to "EmptyAE"


    Tue Mar 22 17:16:45 2016 ExportConverter0.0: forward ./data/000123465/1.2.840.114384.44214243.20150724.145811.2_0001_000001_14586883050003.v2 to VMLTA02_ARCHIVE
    Tue Mar 22 17:16:45 2016 Exportconverter0.1: nop KPACS_TIM IO 000123465 201507241458 1 1.2.840.114384.44214243.779384.20150724.145829.1
    Tue Mar 22 17:16:45 2016 Exportconverter0.2: queued delete seri - (single object of 000123465) to
    Tue Mar 22 17:16:45 2016 Queue: retrying processing of file ./data/000123465/1.2.840.114384.44214243.20150724.145811.2_0001_000002_14586883050004.v2
    Tue Mar 22 17:16:45 2016 ExportConverter0.0: forward ./data/000123465/1.2.840.114384.44214243.20150724.145811.2_0001_000002_14586883050004.v2 to VMLTA02_ARCHIVE
    Tue Mar 22 17:16:45 2016 Exportconverter0.1: nop KPACS_TIM IO 000123465 201507241458 1 1.2.840.114384.44214243.779384.20150724.145833.2


    CODE (lua) ::
    [lua]
    #Truncates (0032,1030)/ReasonForStudy down to 64 characters
    ImportConverter5 = if Data.ReasonForStudy then Data.ReasonForStudy = string.sub(Data.ReasonForStudy, 1, 64) end


    #Strips All Leading Zeros
    ImportConverter6 = Data.PatientID = string.gsub(Data.PatientID, '^0*', '')


    Any suggestions? Thanks. --Tim

  • Hi,


    To test, put a print statement in the line? The syntax is right I think:


    string.gsub('000123', '^0*', '') --> "123" 1


    Obviously, earlier importconverters see the unchanged data, and it won't like data being stored in the same server with and without leading zeros.


    You do not have a non-lua ImportConverter6, that would take precedence.


    Marcel

  • There's not a non-lua ImportConverter6 that would take precedence. So that's not it.


    I didn't quite follow your last suggestion about putting in a print statement. perhaps i'm missing what line/where is the line to put in that string "string.gsub('000123', '^0*', '') --> "123" 1"?


    From the logs, the lua ImportConverter6 never even fires. Any other suggestions?

  • Hi,


    Post the whole dicom.ini? The same line (copied from the forum and added the print(1)) fires for me.


    [lua]
    ImportConverter6 = print(1); Data.PatientID = string.gsub(Data.PatientID, '^0*', '')


    [CONQUESTSRV1] 1
    [CONQUESTSRV1] Refused to enter inconsistent link PatientID into DICOMStudies: PatientID = '9703828' StudyInsta = '1.3.46.670589.5.2.10.2156913941.892665384.993397', Old='0009703828', Refused='9703828'


    You expect the refusal because the image is already there with a different patientID.


    Marcel

  • Hi Marcel, here's our DICOM.INI file (bottom of this post). I believe I found the problem.


    The number of ImportConverters was set to 6, rather than 7.... So therefore the 7th ImportConverter was previously never firing off.


    I have one other question. Do actions that are triggered in the lua get logged? Because I'm not seeing that they are. Here's the log output after I fixed the number of ImportConverters and tested patient ID 000123465 . You can see that it comes in as 000123465 and gets forwarded as 123465 , however you never see the logs created by the lua ImportConverter that actually does the work and strips the leading zeros out.





  • Ok,


    You can add print statements to the Lua lines to log whatever you like.


    E.g (all one one line).


    ImportConverter6 = Data.PatientID, nchanges = string.gsub(Data.PatientID, '^0*', ''); if nchanges>0 then print ('Modified PatientID to ', Data.PatientID) end


    Marcel

  • Marcel, thanks for all of your help with this, btw!


    I made and tested the recommended change and then got an error (see below). Thanks. --Tim


    Code
    #Strip Leading Zeros
    ImportConverter6 = Data.PatientID = string.gsub(Data.PatientID, '^0*', ''); if nchanges>0 then print ('Modified PatientID to ', Data.PatientID) end


    Quote

    Tue Mar 29 09:30:05 2016 *** lua run error [string "Data.PatientID = string.gsub(Data.PatientID..."]:1: attempt to compare number with nil in 'Data.PatientID = string.gsub(Data.PatientID, '^0*', ''); if nchanges>0 then print ('Modified PatientID to ', Data.PatientID) end'

  • Actually, I'm noticing some strange behavior.


    After entering in this line of code into the dicom.ini file

    Code
    ImportConverter6 = Data.PatientID, nchanges = string.gsub(Data.PatientID, '^0*', ''); if nchanges>0 then print ('ImportConverter6.0 Modified PatientID to ', Data.PatientID) end


    I'm noticing that every single instance an image is sent to Conquest, this line gets printed whether ImportConverter6 actually did any work or not.

    Quote

    ImportConverter6.0 Modified PatientID to


    Any thoughts? Thanks! --Tim

  • Hi,


    '^0*' indeed always reports 1 changes even if there are none, as it substitutes zero 0's....


    '^0+' reports correctly 1 or 0.


    Code
    ImportConverter6 = Data.PatientID, nchanges = string.gsub(Data.PatientID, '^0+', ''); if nchanges>0 then print ('ImportConverter6.0 Modified PatientID to ', Data.PatientID) end


    Marcel

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!