4.6 KiB
4.6 KiB
DICOM Migration REST API
A simple REST API that triggers DICOM study migration for a specific Accession Number.
How to Run
# Start the server on default port 8000
python run.py
# Custom port
python run.py --port 9000
# Custom token
python run.py --token your-secure-token
# Development mode with auto-reload
python run.py --reload
How to Use
Make a Request
# Using curl
curl -X POST "http://localhost:8000/migrate/R.20240401.0138" \
-H "Authorization: Bearer token-his2-untuk-hit-api-migrasi-clarity" \
-H "Content-Type: application/json"
Response Success Example
{
"success":true,
"message":"Berhasil migrasi file DICOM Accession Number: R.20240401.0138",
"details":
{
"accession_number":"R.20240401.0138",
"process_start_time":"2025-07-11 15:27:26",
"steps_completed":[
"study_found","study_retrieved","study_sent","log_created","his_api_success","cleanup_success"
],
"study_uid":"1.2.826.1.3680043.9.5282.150415.544835.202404010138",
"patient_id":"00544835",
"study_description":"A103 - Thorax PA",
"instances_retrieved":4,
"files_sent":2,
"total_files":2,
"c_store_success":true,
"series_count":4,
"his_api_status_code":200,
"his_integration_success":true,
"cleanup_success":true,
"process_end_time":"2025-07-11 15:27:46"
}
}
Response Failed Example
Kalau sudah ada di tabel HIS:
{
"success":true,
"message":"Berhasil migrasi file DICOM tetapi gagal update HIS: ERR: Accession No. R.20240401.0142 sudah ada ke table `pacs_order_mwl`!",
"details":{
"accession_number":"R.20240401.0142",
"process_start_time":"2025-07-11 16:05:10",
"steps_completed":[
"study_found","study_retrieved","study_sent","log_created","his_api_failed","cleanup_success"
],
"study_uid":"1.2.826.1.3680043.9.5282.150415.204342.202404010142",
"patient_id":"00204342",
"study_description":"A103 - Thorax PA",
"instances_retrieved":4,
"files_sent":2,
"total_files":2,
"c_store_success":true,
"series_count":4,
"his_api_status_code":406,
"his_integration_success":false,
"his_error":"ERR: Accession No. R.20240401.0142 sudah ada ke table `pacs_order_mwl`!","cleanup_success":true,
"process_end_time":"2025-07-11 16:05:12"
}
}
Logs
- Main API logs:
logs/api.log - Process details:
logs/api_process.log
Simple Workflow
- API receives request with accession number
- Finds study UID using C-FIND
- Downloads DICOM files using C-GET
- Uploads files to destination PACS using C-STORE
- Updates HIS system via API call
- Cleans up all temporary DICOM files
- Returns success/failure response
Troubleshooting Tips
- Check PACS connectivity in
config/settings.py - Verify the accession number exists in source PACS
- Ensure permissions for log directories
- Check both log files for detailed error messages
- Verify HIS API connectivity for end-to-end success
Quick Test
-
Start the server:
python run.py -
In another terminal, test the root endpoint:
curl http://localhost:8000/ -
Test migration with a valid accession number:
curl -X POST "http://localhost:8000/migrate/R.20240401.0138" \ -H "Authorization: Bearer token-his2-untuk-hit-api-migrasi-clarity"
Deploy Systemd Service
- Create a service file:
sudo nano /etc/systemd/system/api-pydicom-migrasi.service
- Add the following content:
[Unit]
Description=DICOM Migration API Service
After=network.target
[Service]
User=pacs
Group=pacs
WorkingDirectory=/home/pacs/pydicom-migrasi-clarity
Environment="PATH=/home/pacs/pydicom-migrasi-clarity/venv/bin"
Environment="API_TOKEN=$2y$05$o1Sfikmwynq76PmuBkJeROpS2WcD.Sh4lgrjohMicnlhBlGAt8UAq"
ExecStart=/home/pacs/pydicom-migrasi-clarity/venv/bin/python /home/pacs/pydicom-migrasi-clarity/api-app/run.py --host 0.0.0.0 --port 8000
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
- Reload systemd and enable the service:
# Reload the systemd configuration
sudo systemctl daemon-reload
# Enable the service to start on boot
sudo systemctl enable api-pydicom-migrasi.service
# Start the service
sudo systemctl start api-pydicom-migrasi.service
# Check the status
sudo systemctl status api-pydicom-migrasi.service
- Monitor logs:
# View all logs
sudo journalctl -u api-pydicom-migrasi.service
# Follow logs in real-time
sudo journalctl -u api-pydicom-migrasi.service -f