Using the CTP AuditLog Plugin
UNDER CONSTRUCTION
This article describes how to configure the CTP AuditLog plugin to capture information from objects processed by pipeline stages. The intended audience for this article is administrators configuring CTP for clinical trials.
The AuditLog is a persistent database of entries made by other CTP components. It provides a servlet allowing the database to be searched through a browser. The servlet also supports downloading the entire database.
Entries in the AuditLog are text. Each entry has a Content-Type. All standard CTP stages create log entries with the Content-Type "xml", but the AuditLog accepts all Content-Type identifiers.
An AuditLog plugin must have an id attribute uniquely identifying the plugin. A single configuration can have multiple AuditLog plugins. An AuditLog's servlet is accessed using the identifier as the resource context.
The DicomAuditLogger pipeline stage can be used to make AuditLog entries containing the values of specified elements in DicomObjects processed by the stage. The entries can be made on three levels:
- patient: one entry for each unique PatientID processed by the stage
- study: one entry for each unique StudyInstanceUID processed by the stage
- instance: one entry for each unique SOPInstanceUID processed by the stage
The DicomAuditLogger
This is an example configuration that logs both the PHI and anonymized values of the PatientID and PatientName elements for each patient:
<Configuration> <Server maxThreads="20" port="1999"/> <Plugin class="org.rsna.ctp.stdplugins.AuditLog" id="AuditLog" name="AuditLog" root="roots/AuditLog"/> <Pipeline name="Pipeline" root="test"> <DicomImportService class="org.rsna.ctp.stdstages.DicomImportService" logConnections="no" name="DicomImportService" port="104" quarantine="quarantines/DicomImportService" root="roots/DicomImportService"/> <ObjectCache class="org.rsna.ctp.stdstages.ObjectCache" id="ObjectCache" name="ObjectCache" root="roots/ObjectCache"/> <DicomAnonymizer class="org.rsna.ctp.stdstages.DicomAnonymizer" lookupTable="scripts/LookupTable.properties" name="DicomAnonymizer" quarantine="quarantines/DicomAnonymizer" root="roots/DicomAnonymizer" script="scripts/DicomAnonymizer.script"/> <DicomAuditLogger auditLogID="AuditLog" auditLogTags="PatientID;PatientName" cacheID="ObjectCache" class="org.rsna.ctp.stdstages.DicomAuditLogger" id="DicomAuditLogger" level="patient" name="DicomAuditLogger" root="roots/DicomAuditLogger"/> <FileStorageService class="org.rsna.ctp.stdstages.FileStorageService" name="FileStorageService" port="9999" quarantine="quarantines/FileStorageService" returnStoredFile="yes" root="roots/FileStorageService"/> </Pipeline> </Configuration>