Skip to content

Commit 4d143b7

Browse files
authored
Merge pull request #820 from Project-MONAI/AC-2255
fix for metadata extraction
2 parents 77fb6b8 + d8164ba commit 4d143b7

File tree

2 files changed

+40
-21
lines changed

2 files changed

+40
-21
lines changed

src/TaskManager/Plug-ins/Email/EmailPlugin.cs

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@ public override async Task<ExecutionStatus> ExecuteTask(CancellationToken cancel
126126
var metadata = new Dictionary<string, string>();
127127
if (Event.Inputs.Any())
128128
{
129-
// only process the first input for now
130-
metadata = await GetRawMetaFromFile($"{Event.Inputs.First().RelativeRootPath}/{Event.Inputs.First().Name}", Event.Inputs.First().Bucket);
129+
foreach (var input in Event.Inputs)
130+
{
131+
metadata = await AddRawMetaFromFile(metadata, $"{input.RelativeRootPath}", input.Bucket);
132+
}
131133
}
132134

133135
var emailRequest = GenerateEmailRequestEventMessage(metadata);
@@ -143,39 +145,53 @@ public override async Task<ExecutionStatus> ExecuteTask(CancellationToken cancel
143145
}
144146
}
145147

146-
private async Task<Dictionary<string, string>?> GetRawMetaFromFile(string path, string bucketName)
148+
private async Task<Dictionary<string, string>> AddRawMetaFromFile(Dictionary<string, string> metadata, string path, string bucketName)
147149
{
148150
if (_includeMetadata is null || _includeMetadata.Count() == 0)
149151
{
150152
_logger.NoMetaDataRequested();
151-
return null;
153+
return metadata;
152154
}
153-
// load file from Minio !
154-
Guard.Against.NullOrWhiteSpace(bucketName);
155-
Guard.Against.NullOrWhiteSpace(path);
156155

157-
var fileStream = await _storageService.GetObjectAsync(bucketName, path);
158-
var dcmFile = DicomFile.Open(fileStream);
159-
160-
var output = new Dictionary<string, string>();
161-
foreach (var item in _includeMetadata)
156+
var allFiles = await _storageService.ListObjectsAsync(bucketName, path, true);
157+
foreach (var file in allFiles)
162158
{
163-
DicomTag tag;
159+
if (file.FilePath.EndsWith(".json", StringComparison.InvariantCultureIgnoreCase)) continue;
160+
Guard.Against.NullOrWhiteSpace(bucketName);
161+
Guard.Against.NullOrWhiteSpace(path);
162+
163+
// load file from Minio !
164+
var fileStream = await _storageService.GetObjectAsync(bucketName, $"{file.FilePath}");
164165
try
165166
{
166-
tag = DicomDictionary.Default[item];
167-
}
168-
catch (Exception)
169-
{
170-
tag = DicomTag.Parse(item);
167+
var dcmFile = DicomFile.Open(fileStream);
168+
169+
foreach (var item in _includeMetadata)
170+
{
171+
if (metadata.ContainsKey(item)) continue;
172+
173+
DicomTag tag;
174+
try
175+
{
176+
tag = DicomDictionary.Default[item];
177+
}
178+
catch (Exception)
179+
{
180+
tag = DicomTag.Parse(item);
181+
}
182+
if (tag is not null)
183+
{
184+
metadata.Add(item, dcmFile.Dataset.GetString(tag));
185+
}
186+
}
171187
}
172-
if (tag is not null)
188+
catch (Exception ex)
173189
{
174-
output.Add(item, dcmFile.Dataset.GetString(tag));
190+
_logger?.ErrorGettingMetaData($"{file.FilePath}/{file.Filename}", ex.Message);
175191
}
176192
}
177193

178-
return output;
194+
return metadata;
179195
}
180196

181197
private JsonMessage<EmailRequestEvent> GenerateEmailRequestEventMessage(Dictionary<string, string>? metadata)

src/TaskManager/Plug-ins/Email/Log.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,8 @@ public static partial class Log
3939

4040
[LoggerMessage(EventId = 6, Level = LogLevel.Debug, Message = "No Metadata requested in event")]
4141
public static partial void NoMetaDataRequested(this ILogger logger);
42+
43+
[LoggerMessage(EventId = 7, Level = LogLevel.Debug, Message = "Error Getting Metadata requested for file: {fileName} message:{message} ")]
44+
public static partial void ErrorGettingMetaData(this ILogger logger, string fileName, string message);
4245
}
4346
}

0 commit comments

Comments
 (0)