Skip to content

Commit 84b8f01

Browse files
authored
Merge patch/0.1.0 into main (#55)
Fix #56, #68 * update changelog, setup doc, css style & oss licenses * update docker image repo in appsettings.json * include files in the export request message * fix bug where workflow is empty in the workflow request message * fix export pipeline stuck after Transform block Signed-off-by: Victor Chang <[email protected]>
1 parent c28d3df commit 84b8f01

25 files changed

+577
-354
lines changed

docs/changelog.md

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
# Changelog
22

3-
## 0.1.0 Initial Release
3+
## 0.1.1
44

5-
The MONAI Deploy Informatics Gateway upgrades the existing NVIDIA Clara Deploy DICOM Adapter to provide additional features and integrate with the MONAI Deploy platform.
5+
[GitHub Milestone 0.1.1](https://github.com/Project-MONAI/monai-deploy-informatics-gateway/milestone/6)
6+
7+
- User guide updates & minor bug fixes.
8+
9+
10+
## 0.1.0
11+
12+
The MONAI Deploy Informatics Gateway upgrades the existing NVIDIA Clara Deploy DICOM Adapter to provide additional features and integrate with the MONAI Deploy platform.
613

714
- DICOM SCP (C-ECHO & C-STORE), SCU (C-STORE) support
815
- ACR API with ability to retrieve data via DICOMweb & FHIR
916
- Integrates with MinIO as the default storage service for storing received/retrieve data and for sharing among other subsystems in MONAI Deploy platform.
1017
- Integrates with RabbitMQ as the default messaging broker for exchanging requests among other subsystems.
1118

1219

13-
For a complete list of supported features, pleas refer to the [User Guide](./index.md).
20+
For a complete list of supported features, pleas refer to the [User Guide](./index.md).

docs/compliance/open-source-licenses.md

+119-113
Large diffs are not rendered by default.

docs/setup/setup.md

+84-71
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ the repository and install it.
1919

2020
```bash
2121
# Download the CLI
22-
curl -LO https://url-to-cli
22+
curl -LO https://github.com/Project-MONAI/monai-deploy-informatics-gateway/releases/download/0.1.0/mig-cli-0.1.0-linux-x64.zip
23+
# Calculate the SHA256 checksum and verify the output with the checksum on the Releases page.
24+
sha256sum mig-cli-0.1.0-linux-x64.zip
2325
# Unzip the CLI
24-
unzip mig-cli-linux-0.1.0-x64.zip
25-
# Calculate the SHA256 checksum and compare with the one listed on the Releases page.
26-
sha256sum mig-cli
26+
unzip mig-cli-0.1.0-linux-x64.zip
2727
# Install it in bin
2828
sudo mv mig-cli /usr/local/bin
2929
```
@@ -32,11 +32,11 @@ sudo mv mig-cli /usr/local/bin
3232

3333
```powershell
3434
# Download the CLI
35-
curl -LO https://url-to-cli
35+
curl -LO https://github.com/Project-MONAI/monai-deploy-informatics-gateway/releases/download/0.1.0/mig-cli-0.1.0-win-x64.zip
36+
# Calculate the SHA256 checksum and verify the output with the checksum on the Releases page.
37+
Get-FileHash mig-cli-0.1.0-win-x64.zip
3638
# Unzip the CLI
37-
Expand-Archive -Path mig-cli-win-0.1.0-x64.zip
38-
# Calculate the SHA256 checksum and compare with the one listed on the Releases page.
39-
Get-FileHash mig-cli.exe
39+
Expand-Archive -Path mig-cli-0.1.0-win-x64.zip
4040
```
4141

4242
### Informatics Gateway Docker Image
@@ -56,8 +56,8 @@ docker pull ghcr.io/project-monai/monai-deploy-informatics-gateway:0.1.0
5656
Use the following command to initialize Informatics Gateway & default configuration:
5757

5858
```bash
59-
./mig-cli config init
60-
./mig-cli config endpoint http://localhost:5000
59+
mig-cli config init
60+
mig-cli config endpoint http://localhost:5000
6161
```
6262

6363

@@ -77,61 +77,8 @@ For a complete reference of the `appsettings.jon`, please refer to [Configuratio
7777

7878
The second command tells `mig-cli` where the endpoint is for the Informatics Gateway RESTful API.
7979

80-
## Start/Stop Informatics Gateway
81-
82-
To start or stop Informatics Gateway, use one of the following commands:
83-
84-
```bash
85-
./mig-cli start
86-
./mig-cli stop
87-
```
88-
89-
9080
> [!Note]
91-
> To see available commands simply execute `./mig-cli` or `mig-cli.exe`.
92-
93-
## Enable Incoming Associations
94-
95-
The next step is to configure Informatics Gateway enable receiving of DICOM instances from external DICOM devices.
96-
97-
1. Configure a listening AE Title to receive instances:
98-
99-
```bash
100-
./mig-cli aet add -a BrainAET -grouping 0020,000E, -t 30
101-
```
102-
103-
The command creates a new listening AE Title with AE Title `BrainAET`. The listening AE Title
104-
will be grouping instances by the Series Instance UID (0020,000E) with a timeout value of 30 seconds.
105-
106-
> [!Note]
107-
> `-grouping` is optional with default of 0020,000D.
108-
> `-t` is optional with default of 5 seconds.
109-
> For complete reference, please refer to the [Config API](../api/rest/config.md).
110-
111-
2. Enable receiving DICOM instances from an external DICOM devices:
112-
113-
```bash
114-
./mig-cli src add -n PACS-LA -a PACSLA001 --h 20.10.30.55 -p 104
115-
```
116-
117-
This command above tells Informatics Gateway to accept instances from AE Title `PACSLA001` at IP `20.10.30.55` and port `104`.
118-
119-
120-
> [!Note]
121-
> By default, Informatics Gateway blocks all unknown sources.
122-
> To allow all unknown sources, set `dicom>scp>rejectUnknownSources` to `false` in `appsettings.json`.
123-
124-
## Export Processed Results
125-
126-
If exporting via DIMSE is required, add a DICOM destination:
127-
128-
```bash
129-
./mig-cli dst add -a WORKSTATION1 -h 100.200.10.20 -p 104
130-
```
131-
132-
The command adds a DICOM export destination with AE Title `WORKSTATION1` at IP `100.200.10.20` and port `104`.
133-
134-
81+
> To see available commands simply execute `mig-cli` or `mig-cli.exe`.
13582
13683
## Storage Consideration & Configuration
13784

@@ -144,8 +91,8 @@ The temporary storage location, by default, is set to `/payloads` in the `appset
14491
To change the temporary storage location, please locate `./InformaticsGateway/storage/temporary` property in the `appsettings.json` file.
14592

14693
> [!Note]
147-
> Calculate the required temporary storage based on the number of studies and the size of each study.
148-
> Please also consider the AE Title timeout if the AE Title needs to wait a long time before assembling & uploading
94+
> Calculate the required temporary storage based on the number of studies and the size of each study.
95+
> Please also consider the AE Title timeout if the AE Title needs to wait a long time before assembling & uploading
14996
> the payload for final storage.
15097
15198

@@ -171,10 +118,10 @@ Locate the storage section of the configuration in `appsettings.json`:
171118
"storage": {
172119
"storageServiceCredentials": {
173120
"endpoint": "192.168.1.1:9000", # IP & port to MinIO instance
174-
"accessKey": "admin", # Access key or username
175-
"accessToken": "password" # Access token or password
121+
"accessKey": "admin", # Access key or username
122+
"accessToken": "password" # Access token or password
176123
},
177-
"storageService": "Monai.Deploy.InformaticsGateway.Storage.MinIoStorageService, Monai.Deploy.InformaticsGateway.Storage.MinIo", # Fully qualified type name of the storage service
124+
"storageService": "Monai.Deploy.InformaticsGateway.Storage.MinIoStorageService, Monai.Deploy.InformaticsGateway.Storage.MinIo", # Fully qualified type name of the storage service
178125
"securedConnection": false, # Indicates if a secured connection is required to access MinIO
179126
"storageServiceBucketName": "igbucket" # The name of the bucket where data is uploaded to
180127
},
@@ -186,11 +133,11 @@ Locate the storage section of the configuration in `appsettings.json`:
186133
### Message broker
187134

188135
Informatics Gateway communicates with other MONAI Deploy components through a message broker. The default messaging service
189-
included is provided by [RabbitMQ](https://www.rabbitmq.com/). To integrate with another storage service provider, please refer
136+
included is provided by [RabbitMQ](https://www.rabbitmq.com/). To integrate with another storage service provider, please refer
190137
to the [Data Storage](https://github.com/Project-MONAI/monai-deploy-informatics-gateway/blob/main/guidelines/srs.md#message-broker) section of the SRS.
191138

192139
To use the default messaging service, please download and install RabbitMQ by following the
193-
[Get Started](https://www.rabbitmq.com/#getstarted) page.
140+
[Get Started](https://www.rabbitmq.com/#getstarted) page.
194141

195142
Before launching Informatics Gateway, update `appsettings.json` to configure the publisher and subscriber settings.
196143
IG publishes all messages to an *exchange* under the specified *virtual host*. Therefore, please confirm the values before starting
@@ -219,3 +166,69 @@ Informatics Gateway.
219166
}
220167
}
221168
```
169+
170+
## Start/Stop Informatics Gateway
171+
172+
To start or stop Informatics Gateway, update the value of `DockerImagePrefix` in `appsettings.json` with the repository name of the Docker image:
173+
174+
```json
175+
{
176+
...,
177+
"Cli": {
178+
"DockerImagePrefix": "ghcr.io/project-monai/monai-deploy-informatics-gateway"
179+
}
180+
}
181+
```
182+
183+
184+
Lastly, use one of the following commands start or stop Informatics Gateway:
185+
186+
```bash
187+
mig-cli start
188+
mig-cli stop
189+
```
190+
191+
192+
## Enable Incoming Associations
193+
194+
The next step is to configure Informatics Gateway enable receiving of DICOM instances from external DICOM devices.
195+
196+
1. Configure a listening AE Title to receive instances:
197+
198+
```bash
199+
mig-cli aet add -a BrainAET -grouping 0020,000E, -t 30
200+
```
201+
202+
The command creates a new listening AE Title with AE Title `BrainAET`. The listening AE Title
203+
will be grouping instances by the Series Instance UID (0020,000E) with a timeout value of 30 seconds.
204+
205+
> [!Note]
206+
> `-grouping` is optional with default of 0020,000D.
207+
> `-t` is optional with default of 5 seconds.
208+
> For complete reference, please refer to the [Config API](../api/rest/config.md).
209+
210+
2. Enable receiving DICOM instances from an external DICOM devices:
211+
212+
```bash
213+
mig-cli src add -n PACS-LA -a PACSLA001 --h 20.10.30.55
214+
```
215+
216+
This command above tells Informatics Gateway to accept instances from AE Title `PACSLA001` at IP `20.10.30.55` and port `104`.
217+
218+
> [!Note]
219+
> By default, Informatics Gateway blocks all unknown sources.
220+
> To allow all unknown sources, set `dicom>scp>rejectUnknownSources` to `false` in `appsettings.json`.
221+
222+
> [!WARNING]
223+
> Informatics Gateway validates both the source IP address and AE Title when `rejectUnknownSources` is set to `true`.
224+
> When running Informatics Gateway in a container and data is coming from the localhost, the IP address may not be the host's IP address. In such a case, open the log file and locate the association that failed; the log should indicate the correct IP address under `Remote host`.
225+
226+
## Export Processed Results
227+
228+
If exporting via DIMSE is required, add a DICOM destination:
229+
230+
```bash
231+
mig-cli dst add -a WORKSTATION1 -h 100.200.10.20 -p 104
232+
```
233+
234+
The command adds a DICOM export destination with AE Title `WORKSTATION1` at IP `100.200.10.20` and port `104`.

docs/templates/material/styles/main.css

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/* COLOR VARIABLES*/
22

33
:root {
4-
--header-bg-color: #76b900;
4+
--header-bg-color: #03a3a3;
55
--header-ft-color: #fff;
6-
--highlight-light: #76b900;
7-
--highlight-dark: #76b900;
6+
--highlight-light: #03a3a3;
7+
--highlight-dark: #03a3a3;
88
--accent-dim: #e0e0e0;
99
--accent-super-dim: #f3f3f3;
1010
--font-color: #34393e;
@@ -39,7 +39,7 @@ a:hover,
3939
a:focus {
4040
color: var(--highlight-light);
4141
text-decoration: none;
42-
color: #569700;
42+
color: #03a3a3;
4343
background-color: #eff7e0;
4444
}
4545

@@ -298,7 +298,7 @@ pre {
298298
font-size: 13px;
299299
word-break: break-all;
300300
word-wrap: break-word;
301-
background-color: #fffaef;
301+
background-color: #eef9f9;
302302
border-radius: 4px;
303303
border: none;
304304
box-shadow: var(--card-box-shadow);
@@ -333,4 +333,4 @@ pre {
333333
margin-top: 2em;
334334
border-bottom: 8px solid var(--highlight-dark);
335335
padding: 0 10px;
336-
}
336+
}

src/Api/Storage/Payload.cs

+12-7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
// limitations under the License.
1111

1212
using Ardalis.GuardClauses;
13+
using Monai.Deploy.InformaticsGateway.Common;
1314
using System;
1415
using System.Collections.Generic;
1516
using System.Diagnostics;
@@ -61,13 +62,7 @@ public enum PayloadState
6162

6263
public int Count { get => _fileCount; }
6364

64-
public IEnumerable<string> Workflows
65-
{
66-
get
67-
{
68-
return Files.SelectMany(x => x.Workflows).Distinct();
69-
}
70-
}
65+
public ISet<string> Workflows { get; private set; }
7166

7267
public string CorrelationId { get; init; }
7368

@@ -87,6 +82,7 @@ public Payload(string key, string correlationId, uint timeout)
8782
State = PayloadState.Created;
8883
Files = new List<FileStorageInfo>();
8984
UploadedFiles = new List<BlockStorageInfo>();
85+
Workflows = new HashSet<string>();
9086
}
9187

9288
public void Add(FileStorageInfo value)
@@ -98,6 +94,15 @@ public void Add(FileStorageInfo value)
9894
_lastReceived.Start();
9995
_fileCount = Files.Count;
10096

97+
if (!value.Workflows.IsNullOrEmpty())
98+
{
99+
foreach (var workflow in value.Workflows)
100+
{
101+
102+
Workflows.Add(workflow);
103+
}
104+
}
105+
101106
if (Files.Count == 1)
102107
{
103108
DateTimeCreated = value.Received;

src/Configuration/MessageBrokerConfigurationKeys.cs

-7
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,5 @@ public class MessageBrokerConfigurationKeys
3535
/// </summary>
3636
[JsonProperty(PropertyName = "exportRequestPrefix")]
3737
public string ExportRequestPrefix { get; set; } = "md.export.request";
38-
39-
/// <summary>
40-
/// Gets or sets the name of the request queue.
41-
/// Defaults to `export_tasks`
42-
/// </summary>
43-
[JsonProperty(PropertyName = "exportRequestQueue")]
44-
public string ExportRequestQueue { get; set; } = "export_tasks";
4538
}
4639
}

src/Configuration/MessageBrokerRoutingKeysConfiguration.cs

-39
This file was deleted.

0 commit comments

Comments
 (0)