Skip to content

Commit b66663d

Browse files
authored
Merge pull request #982 from Project-MONAI/nds-payload-add-workflownames
adding triggered workflow names to payload
2 parents ab67db7 + e57c58b commit b66663d

File tree

15 files changed

+138
-69
lines changed

15 files changed

+138
-69
lines changed

src/TaskManager/Plug-ins/Argo/ArgoClient.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
using System.Globalization;
1818
using System.Text;
1919
using Argo;
20-
using Ardalis.GuardClauses;
2120
using Microsoft.Extensions.Logging;
2221
using Monai.Deploy.WorkflowManager.TaskManager.Argo.Logging;
2322
using System.Net;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717

1818
using System.Net.Mail;
19-
using Ardalis.GuardClauses;
2019
using FellowOakDicom;
2120
using Microsoft.Extensions.Logging;
2221
using Microsoft.Extensions.Options;

src/WorkflowManager/Common/Interfaces/IPayloadService.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,20 @@ Task<IList<PayloadDto>> GetAllAsync(int? skip = null,
4848
/// <param name="payloadId">payload id to delete.</param>
4949
Task<bool> DeletePayloadFromStorageAsync(string payloadId);
5050

51-
/// <summary>
52-
/// Updates a payload
53-
/// </summary>
54-
/// <param name="payload"></param>
55-
/// <returns></returns>
56-
Task<bool> UpdateWorkflowInstanceIdsAsync(string payloadId, IEnumerable<string> workflowInstances);
57-
5851
/// <summary>
5952
/// Gets the expiry date for a payload.
6053
/// </summary>
6154
/// <param name="now"></param>
6255
/// <param name="workflowInstanceId"></param>
6356
/// <returns>date of expiry or null</returns>
6457
Task<DateTime?> GetExpiry(DateTime now, string? workflowInstanceId);
58+
59+
/// <summary>
60+
/// Updates a payload
61+
/// </summary>
62+
/// <param name="payloadId">payload id to update.</param>
63+
/// <param name="payload">updated payload.</param>
64+
/// <returns>true if the update is successful, false otherwise.</returns>
65+
Task<bool> UpdateAsyncWorkflowIds(Payload payload);
6566
}
6667
}

src/WorkflowManager/Common/Services/PayloadService.cs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ public async Task<bool> DeletePayloadFromStorageAsync(string payloadId)
213213

214214
// update the payload to in progress before we request deletion from storage
215215
payload.PayloadDeleted = PayloadDeleted.InProgress;
216-
await _payloadRepository.UpdateAsync(payload);
216+
await _payloadRepository.UpdateAsyncWorkflowIds(payload);
217217

218218
// run deletion in alternative thread so the user isn't held up
219219
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
@@ -238,26 +238,19 @@ public async Task<bool> DeletePayloadFromStorageAsync(string payloadId)
238238
}
239239
finally
240240
{
241-
await _payloadRepository.UpdateAsync(payload);
241+
await _payloadRepository.UpdateAsyncWorkflowIds(payload);
242242
}
243243
});
244244
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
245245

246246
return true;
247247
}
248248

249-
public async Task<bool> UpdateWorkflowInstanceIdsAsync(string payloadId, IEnumerable<string> workflowInstances)
249+
public Task<bool> UpdateAsyncWorkflowIds(Payload payload)
250250
{
251-
if (await _payloadRepository.UpdateAssociatedWorkflowInstancesAsync(payloadId, workflowInstances))
252-
{
253-
_logger.PayloadUpdated(payloadId);
254-
return true;
255-
}
256-
else
257-
{
258-
_logger.PayloadUpdateFailed(payloadId);
259-
return false;
260-
}
251+
ArgumentNullException.ThrowIfNull(payload, nameof(payload));
252+
253+
return _payloadRepository.UpdateAsyncWorkflowIds(payload);
261254
}
262255
}
263256
}

src/WorkflowManager/Common/Services/WorkflowService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
* limitations under the License.
1515
*/
1616

17-
using Ardalis.GuardClauses;
1817
using Microsoft.Extensions.Logging;
1918
using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces;
2019
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// Copyright 2023 Guy’s and St Thomas’ NHS Foundation Trust
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
16+
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
17+
using Mongo.Migration.Migrations.Document;
18+
using MongoDB.Bson;
19+
20+
namespace Monai.Deploy.WorkflowManager.Common.Contracts.Migrations
21+
{
22+
public class M006_Payload_triggeredWorkflows : DocumentMigration<Payload>
23+
{
24+
public M006_Payload_triggeredWorkflows() : base("1.0.6") { }
25+
26+
public override void Up(BsonDocument document)
27+
{
28+
document.Add("TriggeredWorkflowNames", BsonNull.Create(null).ToJson(), true);
29+
}
30+
31+
public override void Down(BsonDocument document)
32+
{
33+
try
34+
{
35+
document.Remove("TriggeredWorkflowNames");
36+
}
37+
catch
38+
{ // can ignore we dont want failures stopping startup !
39+
}
40+
}
41+
}
42+
}

src/WorkflowManager/Contracts/Models/Payload.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
namespace Monai.Deploy.WorkflowManager.Common.Contracts.Models
2929
{
30-
[CollectionLocation("Payloads"), RuntimeVersion("1.0.5")]
30+
[CollectionLocation("Payloads"), RuntimeVersion("1.0.6")]
3131
public class Payload : IDocument
3232
{
3333
[JsonConverter(typeof(DocumentVersionConvert)), BsonSerializer(typeof(DocumentVersionConverBson))]
@@ -40,10 +40,13 @@ public class Payload : IDocument
4040
public string PayloadId { get; set; } = string.Empty;
4141

4242
[JsonProperty(PropertyName = "workflows")]
43-
public IEnumerable<string> Workflows { get; set; } = new List<string>();
43+
public IEnumerable<string> Workflows { get; set; } = [];
44+
45+
[JsonProperty(PropertyName = "workflow_names")]
46+
public List<string> TriggeredWorkflowNames { get; set; } = [];
4447

4548
[JsonProperty(PropertyName = "workflow_instance_ids")]
46-
public IEnumerable<string> WorkflowInstanceIds { get; set; } = new List<string>();
49+
public IEnumerable<string> WorkflowInstanceIds { get; set; } = [];
4750

4851
[JsonProperty(PropertyName = "file_count")]
4952
public int FileCount { get; set; }
@@ -61,10 +64,10 @@ public class Payload : IDocument
6164
public PayloadDeleted PayloadDeleted { get; set; } = PayloadDeleted.No;
6265

6366
[JsonProperty(PropertyName = "files")]
64-
public IList<BlockStorageInfo> Files { get; set; } = new List<BlockStorageInfo>();
67+
public IList<BlockStorageInfo> Files { get; set; } = [];
6568

6669
[JsonProperty(PropertyName = "patient_details")]
67-
public PatientDetails PatientDetails { get; set; } = new PatientDetails();
70+
public PatientDetails PatientDetails { get; set; } = new();
6871

6972
public DataOrigin DataTrigger { get; set; } = new DataOrigin { DataService = DataService.DIMSE };
7073

src/WorkflowManager/Database/Interfaces/IPayloadRepository.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,7 @@ public interface IPayloadRepository
5151
/// </summary>
5252
/// <param name="payload">The payload to update.</param>
5353
/// <returns>The updated payload.</returns>
54-
Task<bool> UpdateAsync(Payload payload);
55-
56-
/// <summary>
57-
/// Updates a payload in the database.
58-
/// </summary>
59-
/// <param name="payloadId"></param>
60-
/// <param name="workflowInstances"></param>
61-
/// <returns></returns>
62-
Task<bool> UpdateAssociatedWorkflowInstancesAsync(string payloadId, IEnumerable<string> workflowInstances);
54+
Task<bool> UpdateAsyncWorkflowIds(Payload payload);
6355

6456
/// <summary>
6557
/// Gets all the payloads that might need deleted

src/WorkflowManager/Database/Repositories/PayloadRepository.cs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
using System.Collections.Generic;
1919
using System.Linq;
2020
using System.Threading.Tasks;
21-
using Ardalis.GuardClauses;
2221
using Microsoft.Extensions.Logging;
2322
using Microsoft.Extensions.Options;
2423
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
@@ -123,7 +122,7 @@ public async Task<Payload> GetByIdAsync(string payloadId)
123122
return payload;
124123
}
125124

126-
public async Task<bool> UpdateAsync(Payload payload)
125+
public async Task<bool> UpdateAsyncWorkflowIds(Payload payload)
127126
{
128127
ArgumentNullException.ThrowIfNull(payload, nameof(payload));
129128

@@ -132,31 +131,17 @@ public async Task<bool> UpdateAsync(Payload payload)
132131
var filter = Builders<Payload>.Filter.Eq(p => p.PayloadId, payload.PayloadId);
133132
await _payloadCollection.ReplaceOneAsync(filter, payload);
134133

135-
return true;
136-
}
137-
catch (Exception ex)
138-
{
139-
_logger.DbUpdatePayloadError(payload.PayloadId, ex);
140-
return false;
141-
}
142-
}
143-
144-
public async Task<bool> UpdateAssociatedWorkflowInstancesAsync(string payloadId, IEnumerable<string> workflowInstances)
145-
{
146-
Guard.Against.NullOrEmpty(workflowInstances, nameof(workflowInstances));
147-
ArgumentNullException.ThrowIfNullOrWhiteSpace(payloadId, nameof(payloadId));
148-
149-
try
150-
{
151134
await _payloadCollection.FindOneAndUpdateAsync(
152-
i => i.Id == payloadId,
153-
Builders<Payload>.Update.Set(p => p.WorkflowInstanceIds, workflowInstances));
135+
i => i.Id == payload.Id,
136+
Builders<Payload>.Update
137+
.Set(p => p.TriggeredWorkflowNames, payload.TriggeredWorkflowNames)
138+
.Set(p => p.WorkflowInstanceIds, payload.WorkflowInstanceIds));
154139

155140
return true;
156141
}
157142
catch (Exception ex)
158143
{
159-
_logger.DbUpdateWorkflowInstanceError(ex);
144+
_logger.DbUpdatePayloadError(payload.PayloadId, ex);
160145
return false;
161146
}
162147
}

src/WorkflowManager/PayloadListener/Services/EventPayloadRecieverService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ public async Task ReceiveWorkflowPayload(MessageReceivedEventArgs message)
9292

9393
return;
9494
}
95+
96+
if (string.IsNullOrWhiteSpace(string.Join("", payload.TriggeredWorkflowNames)) is false)
97+
{
98+
await PayloadService.UpdateAsyncWorkflowIds(payload);
99+
}
100+
95101
}
96102
else
97103
{

0 commit comments

Comments
 (0)