From 57881460764476528b4a3364c62fc9d2beabaf5a Mon Sep 17 00:00:00 2001 From: Lillie Dae <61380713+lillie-dae@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:50:37 +0100 Subject: [PATCH] AI-229 add output artifact and validation (#892) * changes to add output artifact and validation Signed-off-by: Lillie Dae --------- Signed-off-by: Lillie Dae --- .licenserc.yaml | 1 + doc/dependency_decisions.yml | 2 + ...orkflowManager.Common.Configuration.csproj | 2 +- src/Common/Configuration/packages.lock.json | 6 +- src/Common/Miscellaneous/ApiControllerBase.cs | 47 +- .../Miscellaneous/ValidationConstants.cs | 17 +- src/Common/Miscellaneous/packages.lock.json | 6 +- ...nai.Deploy.WorkflowManager.sln.DotSettings | 82 ++ ...loy.WorkflowManager.TaskManager.API.csproj | 2 +- src/TaskManager/API/packages.lock.json | 6 +- src/TaskManager/Database/packages.lock.json | 6 +- .../AideClinicalReview/packages.lock.json | 8 +- .../Plug-ins/Argo/packages.lock.json | 8 +- .../TaskManager/packages.lock.json | 8 +- .../Contracts/Models/Artifact.cs | 10 + .../Contracts/Models/ArtifactMap.cs | 2 +- .../Contracts/Models/ExportDestination.cs | 2 +- .../Contracts/Models/TaskExecution.cs | 2 + ...ai.Deploy.WorkflowManager.Contracts.csproj | 2 +- .../Database/packages.lock.json | 6 +- .../Logging/packages.lock.json | 6 +- .../packages.lock.json | 756 -------------- .../PayloadListener/packages.lock.json | 8 +- .../Services/packages.lock.json | 8 +- .../Storage/packages.lock.json | 6 +- .../Extensions/TaskExecutionExtension.cs | 67 ++ .../Services/IWorkflowExecuterService.cs | 7 - .../Services/WorkflowExecuterService.cs | 90 +- .../WorkflowExecuter/packages.lock.json | 8 +- .../Controllers/ArtifactsController.cs | 51 + .../AuthenticatedApiControllerBase.cs | 4 +- .../PaginationApiControllerBase.cs | 95 ++ .../Controllers/TaskStatsController.cs | 4 +- .../Controllers/WFMApiControllerBase.cs | 42 - .../Controllers/WorkflowsController.cs | 6 +- .../Validators/WorkflowValidator.cs | 116 ++- .../WorkflowManager/packages.lock.json | 8 +- ...anager.TaskManager.IntegrationTests.csproj | 4 +- .../Features/WorkflowApi.feature | 15 +- ...r.WorkflowExecutor.IntegrationTests.csproj | 4 +- .../CommonApiStepDefinitions.cs | 2 + .../TestData/WorkflowObjectTestData.cs | 311 +++++- .../TestData/WorkflowRevisionTestData.cs | 4 +- .../PayloadListener.Tests/packages.lock.json | 952 ------------------ .../Services/WorkflowExecuterServiceTests.cs | 11 +- .../Controllers/ArtifactsControllerTests.cs | 47 + .../Controllers/PayloadControllerTests.cs | 2 +- .../Controllers/WorkflowsControllerTests.cs | 20 +- .../Validators/WorkflowValidatorTests.cs | 115 ++- .../WorkflowManager.Tests/packages.lock.json | 8 +- 50 files changed, 916 insertions(+), 2086 deletions(-) create mode 100644 src/Monai.Deploy.WorkflowManager.sln.DotSettings delete mode 100644 src/WorkflowManager/Monai.Deploy.WorkflowManager.Services/packages.lock.json create mode 100644 src/WorkflowManager/WorkflowExecuter/Extensions/TaskExecutionExtension.cs create mode 100644 src/WorkflowManager/WorkflowManager/Controllers/ArtifactsController.cs create mode 100644 src/WorkflowManager/WorkflowManager/Controllers/PaginationApiControllerBase.cs delete mode 100644 src/WorkflowManager/WorkflowManager/Controllers/WFMApiControllerBase.cs delete mode 100644 tests/UnitTests/PayloadListener.Tests/packages.lock.json create mode 100644 tests/UnitTests/WorkflowManager.Tests/Controllers/ArtifactsControllerTests.cs diff --git a/.licenserc.yaml b/.licenserc.yaml index deb6740a3..a3a8f82d0 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -34,6 +34,7 @@ header: - 'src/.vs' - 'doc/dependency_decisions.yml' - 'docs/templates/**' + - 'src/Monai.Deploy.WorkflowManager.sln.DotSettings' comment: never diff --git a/doc/dependency_decisions.yml b/doc/dependency_decisions.yml index cabd3e5f3..c3e20f3bc 100644 --- a/doc/dependency_decisions.yml +++ b/doc/dependency_decisions.yml @@ -761,6 +761,7 @@ :why: Apache-2.0 (https://github.com/Project-MONAI/monai-deploy-messaging/raw/main/LICENSE) :versions: - 1.0.1 + - 1.0.3 :when: 2023-29-08 21:43:10.781625468 Z - - :approve - Monai.Deploy.Messaging.RabbitMQ @@ -768,6 +769,7 @@ :why: Apache-2.0 (https://github.com/Project-MONAI/monai-deploy-messaging/raw/main/LICENSE) :versions: - 1.0.1 + - 1.0.3 :when: 2023-29-08 21:43:20.975488411 Z - - :approve - Monai.Deploy.Security diff --git a/src/Common/Configuration/Monai.Deploy.WorkflowManager.Common.Configuration.csproj b/src/Common/Configuration/Monai.Deploy.WorkflowManager.Common.Configuration.csproj index c659b7fde..fc873f3f3 100644 --- a/src/Common/Configuration/Monai.Deploy.WorkflowManager.Common.Configuration.csproj +++ b/src/Common/Configuration/Monai.Deploy.WorkflowManager.Common.Configuration.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/Common/Configuration/packages.lock.json b/src/Common/Configuration/packages.lock.json index ca58581e4..dbb1fbf67 100644 --- a/src/Common/Configuration/packages.lock.json +++ b/src/Common/Configuration/packages.lock.json @@ -4,9 +4,9 @@ "net6.0": { "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[1.0.1, )", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", diff --git a/src/Common/Miscellaneous/ApiControllerBase.cs b/src/Common/Miscellaneous/ApiControllerBase.cs index 931495994..70979cbe7 100644 --- a/src/Common/Miscellaneous/ApiControllerBase.cs +++ b/src/Common/Miscellaneous/ApiControllerBase.cs @@ -15,11 +15,8 @@ */ using System.Net; -using Ardalis.GuardClauses; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Wrappers; -using Monai.Deploy.WorkflowManager.Common.Configuration; using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Filter; using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Services; @@ -31,62 +28,26 @@ namespace Monai.Deploy.WorkflowManager.Common.ControllersShared [ApiController] public class ApiControllerBase : ControllerBase { - public IOptions Options { get; set; } - /// /// Initializes a new instance of the class. /// - /// Workflow manager options. - public ApiControllerBase(IOptions options) + public ApiControllerBase() { - Options = options ?? throw new ArgumentNullException(nameof(options)); } /// /// Gets internal Server Error 500. /// - public static int InternalServerError => (int)HttpStatusCode.InternalServerError; + protected static int InternalServerError => (int)HttpStatusCode.InternalServerError; /// /// Gets bad Request 400. /// - public new static int BadRequest => (int)HttpStatusCode.BadRequest; + protected static new int BadRequest => (int)HttpStatusCode.BadRequest; /// /// Gets notFound 404. /// - public new static int NotFound => (int)HttpStatusCode.NotFound; - - /// - /// Creates a pagination paged response. - /// - /// Data set type. - /// Data set. - /// Filters. - /// Total records. - /// Uri service. - /// Route. - /// Returns . - public PagedResponse> CreatePagedResponse(IEnumerable pagedData, PaginationFilter validFilter, long totalRecords, IUriService uriService, string route) - { - Guard.Against.Null(pagedData, nameof(pagedData)); - Guard.Against.Null(validFilter, nameof(validFilter)); - Guard.Against.Null(route, nameof(route)); - Guard.Against.Null(uriService, nameof(uriService)); - - var pageSize = validFilter.PageSize ?? Options.Value.EndpointSettings.DefaultPageSize; - var response = new PagedResponse>(pagedData, validFilter.PageNumber, pageSize); - - response.SetUp(validFilter, totalRecords, uriService, route); - return response; - } - - - public StatsPagedResponse> CreateStatsPagedReponse(IEnumerable pagedData, PaginationFilter validFilter, long totalRecords, IUriService uriService, string route) - { - var response = new StatsPagedResponse>(pagedData, validFilter.PageNumber, validFilter.PageSize ?? 10); - response.SetUp(validFilter, totalRecords, uriService, route); - return response; - } + protected static new int NotFound => (int)HttpStatusCode.NotFound; } } diff --git a/src/Common/Miscellaneous/ValidationConstants.cs b/src/Common/Miscellaneous/ValidationConstants.cs index 727ab8b56..44e323d13 100644 --- a/src/Common/Miscellaneous/ValidationConstants.cs +++ b/src/Common/Miscellaneous/ValidationConstants.cs @@ -93,41 +93,42 @@ public enum NotificationValues }; - /// /// Key for the argo task type. /// - public static readonly string ArgoTaskType = "argo"; + public const string ArgoTaskType = "argo"; /// /// Key for the clinical review task type. /// - public static readonly string ClinicalReviewTaskType = "aide_clinical_review"; + public const string ClinicalReviewTaskType = "aide_clinical_review"; /// /// Key for the router task type. /// - public static readonly string RouterTaskType = "router"; + public const string RouterTaskType = "router"; /// /// Key for the export task type. /// - public static readonly string ExportTaskType = "export"; + public const string ExportTaskType = "export"; /// /// Key for the export task type. /// - public static readonly string ExternalAppTaskType = "remote_app_execution"; + public const string ExternalAppTaskType = "remote_app_execution"; /// /// Key for the export task type. /// - public static readonly string DockerTaskType = "docker"; + public const string DockerTaskType = "docker"; /// /// Key for the email task type. /// - public static readonly string Email = "email"; + public const string Email = "email"; + + public static readonly string[] AcceptableTasksToReview = { ArgoTaskType, ExternalAppTaskType }; /// /// Valid task types. diff --git a/src/Common/Miscellaneous/packages.lock.json b/src/Common/Miscellaneous/packages.lock.json index 6695daa2b..da4a0f6d4 100644 --- a/src/Common/Miscellaneous/packages.lock.json +++ b/src/Common/Miscellaneous/packages.lock.json @@ -146,8 +146,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -236,7 +236,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } } diff --git a/src/Monai.Deploy.WorkflowManager.sln.DotSettings b/src/Monai.Deploy.WorkflowManager.sln.DotSettings new file mode 100644 index 000000000..850fb5e55 --- /dev/null +++ b/src/Monai.Deploy.WorkflowManager.sln.DotSettings @@ -0,0 +1,82 @@ + + AR + AS + ASMT + AU + BDUS + BI + BMD + CD + CF + CP + CR + CS + CT + DD + DF + DG + DM + DOC + DS + DX + EC + ECG + EPS + ES + FA + FID + FS + GM + HC + HD + IO + IOL + IVOCT + IVUS + KER + KO + LEN + LP + LS + MA + MG + MR + MS + NM + OAM + OCT + OP + OPM + OPR + OPT + OPV + OSS + OT + PLAN + PR + PT + PX + REG + RESP + RF + RG + RTDOSE + RTIMAGE + RTPLAN + RTRECORD + RTSTRUCT + RWV + SEG + SM + SMR + SR + SRF + ST + STAIN + TG + US + VA + VF + XA + XC + diff --git a/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj b/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj index 009d2c07c..80f27b78f 100644 --- a/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj +++ b/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj @@ -39,7 +39,7 @@ - + diff --git a/src/TaskManager/API/packages.lock.json b/src/TaskManager/API/packages.lock.json index b12c6603a..84b3026f5 100755 --- a/src/TaskManager/API/packages.lock.json +++ b/src/TaskManager/API/packages.lock.json @@ -4,9 +4,9 @@ "net6.0": { "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[1.0.1, )", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", diff --git a/src/TaskManager/Database/packages.lock.json b/src/TaskManager/Database/packages.lock.json index b7b31c480..cb614df2e 100755 --- a/src/TaskManager/Database/packages.lock.json +++ b/src/TaskManager/Database/packages.lock.json @@ -247,8 +247,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -684,7 +684,7 @@ "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json b/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json index 3cc15455a..4ac7874b0 100644 --- a/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json +++ b/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json @@ -258,8 +258,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -733,7 +733,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -747,7 +747,7 @@ "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/TaskManager/Plug-ins/Argo/packages.lock.json b/src/TaskManager/Plug-ins/Argo/packages.lock.json index 5abc68421..fb671ea54 100644 --- a/src/TaskManager/Plug-ins/Argo/packages.lock.json +++ b/src/TaskManager/Plug-ins/Argo/packages.lock.json @@ -368,8 +368,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -871,7 +871,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -885,7 +885,7 @@ "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/TaskManager/TaskManager/packages.lock.json b/src/TaskManager/TaskManager/packages.lock.json index 5112a7570..6ed57946e 100644 --- a/src/TaskManager/TaskManager/packages.lock.json +++ b/src/TaskManager/TaskManager/packages.lock.json @@ -537,8 +537,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -1138,7 +1138,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -1160,7 +1160,7 @@ "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/Contracts/Models/Artifact.cs b/src/WorkflowManager/Contracts/Models/Artifact.cs index 13b784538..e948fb278 100644 --- a/src/WorkflowManager/Contracts/Models/Artifact.cs +++ b/src/WorkflowManager/Contracts/Models/Artifact.cs @@ -14,10 +14,20 @@ * limitations under the License. */ +using System; +using System.Collections.Generic; +using System.Linq; +using Monai.Deploy.Messaging.Common; using Newtonsoft.Json; namespace Monai.Deploy.WorkflowManager.Common.Contracts.Models { + public class OutputArtifact : Artifact + { + [JsonProperty(PropertyName = "type", DefaultValueHandling = DefaultValueHandling.Ignore)] + public ArtifactType Type { get; set; } = ArtifactType.Unset; + } + public class Artifact { [JsonProperty(PropertyName = "name")] diff --git a/src/WorkflowManager/Contracts/Models/ArtifactMap.cs b/src/WorkflowManager/Contracts/Models/ArtifactMap.cs index e58634594..ba78c7559 100644 --- a/src/WorkflowManager/Contracts/Models/ArtifactMap.cs +++ b/src/WorkflowManager/Contracts/Models/ArtifactMap.cs @@ -24,6 +24,6 @@ public class ArtifactMap public Artifact[] Input { get; set; } = System.Array.Empty(); [JsonProperty(PropertyName = "output")] - public Artifact[] Output { get; set; } = System.Array.Empty(); + public OutputArtifact[] Output { get; set; } = System.Array.Empty(); } } diff --git a/src/WorkflowManager/Contracts/Models/ExportDestination.cs b/src/WorkflowManager/Contracts/Models/ExportDestination.cs index 1b9bed245..7f2d5a76a 100644 --- a/src/WorkflowManager/Contracts/Models/ExportDestination.cs +++ b/src/WorkflowManager/Contracts/Models/ExportDestination.cs @@ -21,6 +21,6 @@ namespace Monai.Deploy.WorkflowManager.Common.Contracts.Models public class ExportDestination { [JsonProperty(PropertyName = "name")] - public string Name { get; set; } = ""; + public string Name { get; set; } = string.Empty; } } diff --git a/src/WorkflowManager/Contracts/Models/TaskExecution.cs b/src/WorkflowManager/Contracts/Models/TaskExecution.cs index a76865bca..8ae53d40a 100644 --- a/src/WorkflowManager/Contracts/Models/TaskExecution.cs +++ b/src/WorkflowManager/Contracts/Models/TaskExecution.cs @@ -16,7 +16,9 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Monai.Deploy.Messaging.Events; +using Monai.Deploy.WorkflowManager.Common.Contracts.Constants; using Newtonsoft.Json; namespace Monai.Deploy.WorkflowManager.Common.Contracts.Models diff --git a/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj b/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj index 13f9f6f22..3bafa6ceb 100644 --- a/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj +++ b/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj @@ -38,7 +38,7 @@ - + diff --git a/src/WorkflowManager/Database/packages.lock.json b/src/WorkflowManager/Database/packages.lock.json index 64d67d767..7be6e4fd3 100755 --- a/src/WorkflowManager/Database/packages.lock.json +++ b/src/WorkflowManager/Database/packages.lock.json @@ -269,8 +269,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -685,7 +685,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/Logging/packages.lock.json b/src/WorkflowManager/Logging/packages.lock.json index 344b27cc6..ccb0e5dd3 100755 --- a/src/WorkflowManager/Logging/packages.lock.json +++ b/src/WorkflowManager/Logging/packages.lock.json @@ -210,8 +210,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -641,7 +641,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/Monai.Deploy.WorkflowManager.Services/packages.lock.json b/src/WorkflowManager/Monai.Deploy.WorkflowManager.Services/packages.lock.json deleted file mode 100644 index bf40ee3d4..000000000 --- a/src/WorkflowManager/Monai.Deploy.WorkflowManager.Services/packages.lock.json +++ /dev/null @@ -1,756 +0,0 @@ -{ - "version": 1, - "dependencies": { - "net6.0": { - "Microsoft.Extensions.Http": { - "type": "Direct", - "requested": "[3.1.0, )", - "resolved": "3.1.0", - "contentHash": "DLigdcV0nYaT6/ly0rnfP80BnXq8NNd/h8/SkfY39uio7Bd9LauVntp6RcRh1Kj23N+uf80GgL7Win6P3BCtoQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.0", - "Microsoft.Extensions.Logging": "3.1.0", - "Microsoft.Extensions.Options": "3.1.0" - } - }, - "Ardalis.GuardClauses": { - "type": "Transitive", - "resolved": "4.1.1", - "contentHash": "+UcJ2s+gf2wMNrwadCaHZV2DMcGgBU1t22A+jm40P4MHQRLy9hcleGy5xdVWd4dXZPa5Vlp4TG5xU2rhoDYrBA==" - }, - "AWSSDK.Core": { - "type": "Transitive", - "resolved": "3.7.200.13", - "contentHash": "yiUuhTI8w183euRqhXym1DyhnD/1ccxceRoruCfkIoqY3PAaFgFL8pE4iDLDZa7SUW4M4qZnQ5PMlFr1rrl6zw==" - }, - "AWSSDK.SecurityToken": { - "type": "Transitive", - "resolved": "3.7.201.9", - "contentHash": "yKlTPrvNeDdzkOX82Ydf7MD09Gk3dK74JWZPRWJ3QIxskWVoNTAyLvfVBzbi+/fGnjf8/qKsSzxT7GHLqds37A==", - "dependencies": { - "AWSSDK.Core": "[3.7.200.13, 4.0.0)" - } - }, - "DnsClient": { - "type": "Transitive", - "resolved": "1.6.1", - "contentHash": "4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==", - "dependencies": { - "Microsoft.Win32.Registry": "5.0.0" - } - }, - "LightInject": { - "type": "Transitive", - "resolved": "5.4.0", - "contentHash": "w4EjEhNqtzFb0qlScmpjA84Nuv4+OITNGfYCjDhJoLYyw+uagkrrth+e9Hgidv4bMzuNSlJpHPGTHx6DtE4Ixg==", - "dependencies": { - "System.ValueTuple": "4.5.0" - } - }, - "Microsoft.AspNetCore.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ubycklv+ZY7Kutdwuy1W4upWcZ6VFR8WUXU7l7B2+mvbDBBPAcfpi+E+Y5GFe+Q157YfA3C49D2GCjAZc7Mobw==", - "dependencies": { - "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.Hosting.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Hosting.Server.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "1PMijw8RMtuQF60SsD/JlKtVfvh4NORAhF4wjysdABhlhTrYmtgssqyncR0Stq5vqtjplZcj6kbT4LRTglt9IQ==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Http.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Features": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "Lu41BWNmwhKr6LgyQvcYBOge0pPvmiaK8R5UHXX4//wBhonJyWcT2OK1mqYfEM5G7pTf31fPrpIHOT6sN7EGOA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "3.1.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "o9eELDBfNkR7sUtYysFZ1Q7BQ1mYt27DMkups/3vu7xgPyOpMD+iAfrBZFzUXT2iw0fmFb8s1gfNBZS+IgjKdQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "3.1.0" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "KVkv3aF2MQpmGFRh4xRx2CNbc2sjDFk+lH4ySrjWSOS+XoY1Xc+sJphw3N0iYOpoeCCq8976ceVYDH8sdx2qIQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" - }, - "Microsoft.Extensions.Diagnostics.HealthChecks": { - "type": "Transitive", - "resolved": "6.0.21", - "contentHash": "1Qf/tEg6IlzbvCxrc+pZE+ZGrajBdB/+V2+abeAu6lg8wXGHmO8JtnrNqwc5svSbcz3udxinUPyH3vw6ZujKbg==", - "dependencies": { - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.21", - "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.4", - "Microsoft.Extensions.Options": "6.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { - "type": "Transitive", - "resolved": "6.0.21", - "contentHash": "5FSA1euCRtbRqVgTn2ahgCG9Cy29UQXAZMCJLUlrQQaC5rko0+d/aq9SiFGIDP7cvoWUsatrlNdfc6UyOMV5aA==" - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", - "dependencies": { - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "P+8sKQ8L4ooL79sxxqwFPxGGC3aBrUDLB/dZqhs4J0XjTyrkeeyJQ4D4nzJB6OnAhy78HIIgQ/RbD6upOXLynw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "3.1.0", - "Microsoft.Extensions.DependencyInjection": "3.1.0", - "Microsoft.Extensions.Logging.Abstractions": "3.1.0", - "Microsoft.Extensions.Options": "3.1.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "6.0.4", - "contentHash": "K14wYgwOfKVELrUh5eBqlC8Wvo9vvhS3ZhIvcswV2uS/ubkTRPSQsN557EZiYUSSoZNxizG+alN4wjtdyLdcyw==" - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ukU1mQGX9+xBsEzpNd13yl4deFVYI+fxxnmKpOhvNZsF+/trCrAUQh+9QM5pPGHbfYkz3lLQ4BXfKCP0502dLw==", - "dependencies": { - "Microsoft.Extensions.Logging": "2.2.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "2.2.0" - } - }, - "Microsoft.Extensions.Logging.Console": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "1eGgcOJ++PMxW6sn++j6U7wsWvhEBm/5ScqBUUBGLRE8M7AHahi9tsxivDMqEXVM3F0/pshHl3kEpMXtw4BeFg==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging": "2.2.0", - "Microsoft.Extensions.Logging.Configuration": "2.2.0" - } - }, - "Microsoft.Extensions.Logging.Debug": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "JjqWtshxUujSnxslFccCRAaH8uFOciqXkYdRw+h5MwpC4sUc+ju9yZzvVi6PA5vW09ckv26EkasEvXrofGiaJg==", - "dependencies": { - "Microsoft.Extensions.Logging": "2.2.0" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "d4WS6yVXaw43ffiUnHj8oG1t2B6RbDDiQcgdA+Eq//NlPa3Wd+GTJFKj4OM4eDF3GjVumGr/CEVRS/jcYoF5LA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", - "Microsoft.Extensions.Configuration.Binder": "2.2.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "Microsoft.Win32.Registry": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, - "Monai.Deploy.Messaging": { - "type": "Transitive", - "resolved": "0.1.25", - "contentHash": "CllF1ANCwDV0ACbTU63SGxPPmgsivWP8dxgstAHvwo29w5TUs6PDCc8GcyVDTUO5Yl7/vsifdwcs3P/cYBe69w==", - "dependencies": { - "Ardalis.GuardClauses": "4.1.1", - "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", - "Newtonsoft.Json": "13.0.3", - "System.IO.Abstractions": "17.2.3" - } - }, - "Monai.Deploy.Storage": { - "type": "Transitive", - "resolved": "0.2.18", - "contentHash": "+1JX7QDgVEMqYA0/M1QMr1gtXRC6lEuhBtLfJXWi6cEgh9kOPE0KiHd1AWI7PxBgBbsEBZaNQSvWqShlwcu6bA==", - "dependencies": { - "AWSSDK.SecurityToken": "3.7.201.9", - "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", - "Monai.Deploy.Storage.S3Policy": "0.2.18", - "System.IO.Abstractions": "17.2.3" - } - }, - "Monai.Deploy.Storage.S3Policy": { - "type": "Transitive", - "resolved": "0.2.18", - "contentHash": "+b0nDnf4OoajdH2hB02elRC6G+GjlYnxJC+F3dGbUUXGMtPApzs8c8s/EG4fKzihxsVovJtqnJl7atcaPyl12Q==", - "dependencies": { - "Ardalis.GuardClauses": "4.1.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mongo.Migration": { - "type": "Transitive", - "resolved": "3.1.4", - "contentHash": "iA13H1tFH7x3eeKhBAYdgFxzK4gj78hY2pc5yiB08zX3kmhxGT/hp5k+iTDlSlCCyl+pMNpitTUiKiqOI6L6Gg==", - "dependencies": { - "LightInject": "5.4.0", - "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.DependencyInjection": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Console": "2.2.0", - "Microsoft.Extensions.Logging.Debug": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0", - "MongoDB.Driver": "2.13.1", - "NLog": "4.7.11", - "Serilog": "2.8.0", - "Serilog.Extensions.Logging": "2.0.4", - "Serilog.Extensions.Logging.File": "2.0.0", - "System.ValueTuple": "4.5.0" - } - }, - "MongoDB.Bson": { - "type": "Transitive", - "resolved": "2.19.0", - "contentHash": "pGp9F2PWU3Dj54PiXKibuaQ5rphWkfp8/Nsy5jLp2dWZGRGlr3r/Lfwnr0PvfihFfxieUcJZ2z3VeO8RctXcvA==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "5.0.0" - } - }, - "MongoDB.Driver": { - "type": "Transitive", - "resolved": "2.19.0", - "contentHash": "W/1YByn5gNGfHBe8AyDURXWKn1Z9xJ9IUjplFcvk8B/jlTlDOkmXgmwjlToIdqr0l8rX594kksjGx3a9if3dsg==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "2.0.0", - "MongoDB.Bson": "2.19.0", - "MongoDB.Driver.Core": "2.19.0", - "MongoDB.Libmongocrypt": "1.7.0" - } - }, - "MongoDB.Driver.Core": { - "type": "Transitive", - "resolved": "2.19.0", - "contentHash": "KbzJJJc4EsUZ+YQoe7zZL1OxHVC9RjgQMso2LjhZWnlP+IHSON63vKNt7jGarXrOVXK0DqIUrRwQyXMgmqTX5g==", - "dependencies": { - "AWSSDK.SecurityToken": "3.7.100.14", - "DnsClient": "1.6.1", - "Microsoft.Extensions.Logging.Abstractions": "2.0.0", - "MongoDB.Bson": "2.19.0", - "MongoDB.Libmongocrypt": "1.7.0", - "SharpCompress": "0.30.1", - "Snappier": "1.0.0", - "System.Buffers": "4.5.1", - "ZstdSharp.Port": "0.6.2" - } - }, - "MongoDB.Libmongocrypt": { - "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "p9+peTZX63nGHskOLhvhfBtrknxNg1RzXepE07rPozuCGz27bMjCcQyvn2YByg0L3YEcNWdTmI4BlnG/5RF+5Q==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "NLog": { - "type": "Transitive", - "resolved": "4.7.11", - "contentHash": "A7EpoOjWesV5BPx1cOiBndazZq1VGdagIs6oK8ttcRDl5adCMtHiTqnsD5yYaOrMxOQeCjHBf/w3nKzCmhGbgw==" - }, - "Serilog": { - "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "zjuKXW5IQws43IHX7VY9nURsaCiBYh2kyJCWLJRSWrTsx/syBKHV8MibWe2A+QH3Er0AiwA+OJmO3DhFJDY1+A==", - "dependencies": { - "System.Collections.NonGeneric": "4.3.0" - } - }, - "Serilog.Extensions.Logging": { - "type": "Transitive", - "resolved": "2.0.4", - "contentHash": "C8Vf9Wj1M+wGilChTV+OhE4v5ZCDzQfHjLKj2yNDMkXf/zgUKeAUZfbrVrt/c+flXP8M7/SHWBOXTkuPgubFsA==", - "dependencies": { - "Microsoft.Extensions.Logging": "2.0.0", - "Serilog": "2.3.0" - } - }, - "Serilog.Extensions.Logging.File": { - "type": "Transitive", - "resolved": "2.0.0", - "contentHash": "usO0qr4v9VCMBWiTJ1nQmAbPNCt40FrkDol6CpfCXbsxGZS/hH+YCueF7vvPQ32ATI0GWcMWiKRdjXEE7/HxTQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.0.0", - "Microsoft.Extensions.Configuration.Binder": "2.0.0", - "Serilog": "2.5.0", - "Serilog.Extensions.Logging": "2.0.2", - "Serilog.Formatting.Compact": "1.0.0", - "Serilog.Sinks.Async": "1.1.0", - "Serilog.Sinks.RollingFile": "3.3.0" - } - }, - "Serilog.Formatting.Compact": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "r3QYz02y7+B7Ng30hyJM929OJhem7SsJ4XDUE0Zfptj2MRiQfpPUb5f58juAFjp/TnNeSX2QNzZEnHwLeoJfHQ==", - "dependencies": { - "Serilog": "2.0.0" - } - }, - "Serilog.Sinks.Async": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "xll0Kanz2BkCxuv+F3p1WXr47jdsVM0GU1n1LZvK+18QiRZ/WGFNxSNw9EMKFV5ED5gr7MUpAe6PCMNL1HGUMA==", - "dependencies": { - "Serilog": "2.1.0", - "System.Collections.Concurrent": "4.0.12" - } - }, - "Serilog.Sinks.File": { - "type": "Transitive", - "resolved": "3.2.0", - "contentHash": "VHbo68pMg5hwSWrzLEdZv5b/rYmIgHIRhd4d5rl8GnC5/a8Fr+RShT5kWyeJOXax1el6mNJ+dmHDOVgnNUQxaw==", - "dependencies": { - "Serilog": "2.3.0", - "System.IO": "4.1.0", - "System.IO.FileSystem": "4.0.1", - "System.IO.FileSystem.Primitives": "4.0.1", - "System.Text.Encoding.Extensions": "4.0.11", - "System.Threading": "4.0.11", - "System.Threading.Timer": "4.0.1" - } - }, - "Serilog.Sinks.RollingFile": { - "type": "Transitive", - "resolved": "3.3.0", - "contentHash": "2lT5X1r3GH4P0bRWJfhA7etGl8Q2Ipw9AACvtAHWRUSpYZ42NGVyHoVs2ALBZ/cAkkS+tA4jl80Zie144eLQPg==", - "dependencies": { - "Serilog.Sinks.File": "3.2.0", - "System.IO": "4.1.0", - "System.IO.FileSystem.Primitives": "4.0.1", - "System.Runtime.InteropServices": "4.1.0", - "System.Text.Encoding.Extensions": "4.0.11" - } - }, - "SharpCompress": { - "type": "Transitive", - "resolved": "0.30.1", - "contentHash": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==" - }, - "Snappier": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==" - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" - }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Collections.Concurrent": { - "type": "Transitive", - "resolved": "4.0.12", - "contentHash": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Diagnostics.Tracing": "4.1.0", - "System.Globalization": "4.0.11", - "System.Reflection": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "System.Collections.NonGeneric": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Diagnostics.Debug": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.Tracing": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Abstractions": { - "type": "Transitive", - "resolved": "17.2.3", - "contentHash": "VcozGeE4SxIo0cnXrDHhbrh/Gb8KQnZ3BvMelvh+iw0PrIKtuuA46U2Xm4e4pgnaWFgT4RdZfTpWl/WPRdw0WQ==" - }, - "System.IO.FileSystem": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "IBErlVq5jOggAD69bg1t0pJcHaDbJbWNUZTPI96fkYWzwYbN6D9wRHMULLDd9dHsl7C2YsxXL31LMfPI1SWt8w==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.IO": "4.1.0", - "System.IO.FileSystem.Primitives": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Handles": "4.0.1", - "System.Text.Encoding": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "System.IO.FileSystem.Primitives": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "kWkKD203JJKxJeE74p8aF8y4Qc9r9WQx4C0cHzHPrY3fv/L/IhWnyCHaFJ3H1QPOH6A93whlQ2vG5nHlBDvzWQ==", - "dependencies": { - "System.Runtime": "4.1.0" - } - }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "System.Runtime.CompilerServices.Unsafe": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" - }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "nCJvEKguXEvk2ymk1gqj625vVnlK3/xdGzx0vOKicQkoquaTBJTP13AIYkocSUwHCLNBwUbXTqTWGDxBTWpt7g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Runtime.InteropServices": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Reflection": "4.1.0", - "System.Reflection.Primitives": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Handles": "4.0.1" - } - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.Extensions": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0", - "System.Text.Encoding": "4.0.11" - } - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==" - }, - "System.Threading": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Timer": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "saGfUV8uqVW6LeURiqxcGhZ24PzuRNaUBtbhVeuUAvky1naH395A/1nY0P2bWvrw/BreRtIB/EzTDkGBpqCwEw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.ValueTuple": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==" - }, - "ZstdSharp.Port": { - "type": "Transitive", - "resolved": "0.6.2", - "contentHash": "jPao/LdUNLUz8rn3H1D8W7wQbZsRZM0iayvWI4xGejJg3XJHT56gcmYdgmCGPdJF1UEBqUjucCRrFB+4HbJsbw==" - }, - "monai.deploy.workflowmanager.common": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Database": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Storage": "[1.0.0, )" - } - }, - "monai.deploy.workflowmanager.configuration": { - "type": "Project", - "dependencies": { - "Monai.Deploy.Messaging": "[0.1.23, )", - "Monai.Deploy.Storage": "[0.2.15, )" - } - }, - "monai.deploy.workflowmanager.contracts": { - "type": "Project", - "dependencies": { - "Monai.Deploy.Messaging": "[0.1.25, )", - "Mongo.Migration": "[3.1.4, )", - "MongoDB.Bson": "[2.19.0, )" - } - }, - "monai.deploy.workflowmanager.database": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", - "Mongo.Migration": "[3.1.4, )", - "MongoDB.Driver": "[2.19.0, )" - } - }, - "monai.deploy.workflowmanager.logging": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" - } - }, - "monai.deploy.workflowmanager.storage": { - "type": "Project", - "dependencies": { - "Monai.Deploy.Storage": "[0.2.18, )", - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )" - } - } - } - } -} \ No newline at end of file diff --git a/src/WorkflowManager/PayloadListener/packages.lock.json b/src/WorkflowManager/PayloadListener/packages.lock.json index 3c23c98f8..d7a0d44f8 100644 --- a/src/WorkflowManager/PayloadListener/packages.lock.json +++ b/src/WorkflowManager/PayloadListener/packages.lock.json @@ -270,8 +270,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -779,7 +779,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -802,7 +802,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/Services/packages.lock.json b/src/WorkflowManager/Services/packages.lock.json index d0b4599f1..5a6b2cf09 100644 --- a/src/WorkflowManager/Services/packages.lock.json +++ b/src/WorkflowManager/Services/packages.lock.json @@ -249,8 +249,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -733,14 +733,14 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/Storage/packages.lock.json b/src/WorkflowManager/Storage/packages.lock.json index 6d5c5f0ec..73027d62d 100755 --- a/src/WorkflowManager/Storage/packages.lock.json +++ b/src/WorkflowManager/Storage/packages.lock.json @@ -235,8 +235,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -675,7 +675,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/WorkflowExecuter/Extensions/TaskExecutionExtension.cs b/src/WorkflowManager/WorkflowExecuter/Extensions/TaskExecutionExtension.cs new file mode 100644 index 000000000..647178416 --- /dev/null +++ b/src/WorkflowManager/WorkflowExecuter/Extensions/TaskExecutionExtension.cs @@ -0,0 +1,67 @@ +/* + * Copyright 2022 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Globalization; +using Microsoft.Extensions.Logging; +using Monai.Deploy.WorkflowManager.Common.Contracts.Models; +using Monai.Deploy.WorkflowManager.Common.Miscellaneous; +using Newtonsoft.Json; + +namespace Monai.Deploy.WorkloadManager.WorkfowExecuter.Extensions +{ + public static class TaskExecutionExtension + { + /// + /// Attaches patient metadata to task execution plugin arguments. + /// + /// + /// + /// Logging Method to log details. + public static void AttachPatientMetaData(this TaskExecution task, PatientDetails patientDetails, Action? logger) + { + var attachedData = false; + if (string.IsNullOrWhiteSpace(patientDetails.PatientId) is false) + { + attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientId, patientDetails.PatientId); + } + if (string.IsNullOrWhiteSpace(patientDetails.PatientAge) is false) + { + attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientAge, patientDetails.PatientAge); + } + if (string.IsNullOrWhiteSpace(patientDetails.PatientSex) is false) + { + attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientSex, patientDetails.PatientSex); + } + var patientDob = patientDetails.PatientDob; + if (patientDob.HasValue) + { + attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientDob, patientDob.Value.ToString("o", CultureInfo.InvariantCulture)); + } + if (string.IsNullOrWhiteSpace(patientDetails.PatientHospitalId) is false) + { + attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientHospitalId, patientDetails.PatientHospitalId); + } + if (string.IsNullOrWhiteSpace(patientDetails.PatientName) is false) + { + attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientName, patientDetails.PatientName); + } + if (attachedData && logger is not null) + { + logger(JsonConvert.SerializeObject(task.TaskPluginArguments)); + } + } + } +} diff --git a/src/WorkflowManager/WorkflowExecuter/Services/IWorkflowExecuterService.cs b/src/WorkflowManager/WorkflowExecuter/Services/IWorkflowExecuterService.cs index ace4e0244..465979f1d 100644 --- a/src/WorkflowManager/WorkflowExecuter/Services/IWorkflowExecuterService.cs +++ b/src/WorkflowManager/WorkflowExecuter/Services/IWorkflowExecuterService.cs @@ -49,12 +49,5 @@ public interface IWorkflowExecuterService /// Previous Tasks Id. /// Task CreateTaskExecutionAsync(TaskObject task, WorkflowInstance workflowInstance, string? bucketName = null, string? payloadId = null, string? previousTaskId = null); - - /// - /// Attaches patient metadata to task execution plugin arguments. - /// - /// - /// - void AttachPatientMetaData(TaskExecution task, PatientDetails patientDetails); } } diff --git a/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs b/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs index 35531ab0c..7ef2adcfc 100644 --- a/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs +++ b/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs @@ -35,6 +35,7 @@ using Monai.Deploy.WorkflowManager.Common.Database.Interfaces; using Monai.Deploy.WorkflowManager.Common.Logging; using Monai.Deploy.WorkflowManager.Common.WorkfowExecuter.Common; +using Monai.Deploy.WorkloadManager.WorkfowExecuter.Extensions; using Newtonsoft.Json; namespace Monai.Deploy.WorkflowManager.Common.WorkfowExecuter.Services @@ -204,70 +205,33 @@ public async Task ProcessFirstWorkflowTask(WorkflowInstance workflowInstance, st ["executionId"] = task.ExecutionId }); - if (string.Equals(task.TaskType, TaskTypeConstants.RouterTask, StringComparison.InvariantCultureIgnoreCase)) - { - await HandleTaskDestinations(workflowInstance, workflow, task, correlationId); - - return; - } - - if (string.Equals(task.TaskType, TaskTypeConstants.ExportTask, StringComparison.InvariantCultureIgnoreCase)) - { - await HandleDicomExportAsync(workflow, workflowInstance, task, correlationId); - - return; - } - - if (string.Equals(task.TaskType, TaskTypeConstants.ExternalAppTask, StringComparison.InvariantCultureIgnoreCase)) - { - await HandleExternalAppAsync(workflow, workflowInstance, task, correlationId); - - return; - } - - if (task.Status != TaskExecutionStatus.Created) - { - _logger.TaskPreviouslyDispatched(workflowInstance.PayloadId, task.TaskId); - - return; - } - - await DispatchTask(workflowInstance, workflow, task, correlationId, payload); + await SwitchTasksAsync(task, + routerFunc: () => HandleTaskDestinations(workflowInstance, workflow, task, correlationId), + exportFunc: () => HandleDicomExportAsync(workflow, workflowInstance, task, correlationId), + externalFunc: () => HandleExternalAppAsync(workflow, workflowInstance, task, correlationId), + notCreatedStatusFunc: () => + { + _logger.TaskPreviouslyDispatched(workflowInstance.PayloadId, task.TaskId); + return Task.CompletedTask; + }, + defaultFunc: () => DispatchTask(workflowInstance, workflow, task, correlationId, payload) + ).ConfigureAwait(false); } - public void AttachPatientMetaData(TaskExecution task, PatientDetails patientDetails) - { - var attachedData = false; - if (string.IsNullOrWhiteSpace(patientDetails.PatientId) is false) - { - attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientId, patientDetails.PatientId); - } - if (string.IsNullOrWhiteSpace(patientDetails.PatientAge) is false) - { - attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientAge, patientDetails.PatientAge); - } - if (string.IsNullOrWhiteSpace(patientDetails.PatientSex) is false) - { - attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientSex, patientDetails.PatientSex); - } - var patientDob = patientDetails.PatientDob; - if (patientDob.HasValue) - { - attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientDob, patientDob.Value.ToString("o", CultureInfo.InvariantCulture)); - } - if (string.IsNullOrWhiteSpace(patientDetails.PatientHospitalId) is false) - { - attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientHospitalId, patientDetails.PatientHospitalId); - } - if (string.IsNullOrWhiteSpace(patientDetails.PatientName) is false) - { - attachedData = task.TaskPluginArguments.TryAdd(PatientKeys.PatientName, patientDetails.PatientName); - } - if (attachedData) - { - _logger.AttachedPatientMetadataToTaskExec(JsonConvert.SerializeObject(task.TaskPluginArguments)); - } - } + private static Task SwitchTasksAsync(TaskExecution task, + Func routerFunc, + Func exportFunc, + Func externalFunc, + Func notCreatedStatusFunc, + Func defaultFunc) => + task switch + { + { TaskType: TaskTypeConstants.RouterTask } => routerFunc(), + { TaskType: TaskTypeConstants.ExportTask } => exportFunc(), + { TaskType: TaskTypeConstants.ExternalAppTask } => externalFunc(), + { Status: var s } when s != TaskExecutionStatus.Created => notCreatedStatusFunc(), + _ => defaultFunc() + }; public async Task ProcessTaskUpdate(TaskUpdateEvent message) { @@ -781,7 +745,7 @@ private async Task DispatchTask(WorkflowInstance workflowInstance, Workflo payload ??= await _payloadService.GetByIdAsync(workflowInstance.PayloadId); if (payload is not null) { - AttachPatientMetaData(taskExec, payload.PatientDetails); + taskExec.AttachPatientMetaData(payload.PatientDetails, _logger.AttachedPatientMetadataToTaskExec); } taskExec.TaskPluginArguments["workflow_name"] = workflow!.Workflow!.Name; diff --git a/src/WorkflowManager/WorkflowExecuter/packages.lock.json b/src/WorkflowManager/WorkflowExecuter/packages.lock.json index 3b2510d1b..ce5c56316 100644 --- a/src/WorkflowManager/WorkflowExecuter/packages.lock.json +++ b/src/WorkflowManager/WorkflowExecuter/packages.lock.json @@ -270,8 +270,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -779,7 +779,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -802,7 +802,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/src/WorkflowManager/WorkflowManager/Controllers/ArtifactsController.cs b/src/WorkflowManager/WorkflowManager/Controllers/ArtifactsController.cs new file mode 100644 index 000000000..7b2b8efd5 --- /dev/null +++ b/src/WorkflowManager/WorkflowManager/Controllers/ArtifactsController.cs @@ -0,0 +1,51 @@ +/* + * Copyright 2022 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Collections.Generic; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Monai.Deploy.Messaging.Common; +using Monai.Deploy.WorkflowManager.Common.Contracts.Models; + +namespace Monai.Deploy.WorkflowManager.Common.ControllersShared +{ + /// + /// Artifacts Controller + /// + [ApiController] + [Route("artifacts/")] + public class ArtifactsController : ApiControllerBase + { + /// + /// Initializes a new instance of the class. + /// + public ArtifactsController() + { + } + + /// + /// Get Artifact Types + /// + /// List of supported artifact types. + [HttpGet] + [Route("types")] + [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] + public IActionResult GetArtifactTypes() + { + return Ok(ArtifactTypes.ListOfModularity); + } + } +} diff --git a/src/WorkflowManager/WorkflowManager/Controllers/AuthenticatedApiControllerBase.cs b/src/WorkflowManager/WorkflowManager/Controllers/AuthenticatedApiControllerBase.cs index 5cafe261b..01559a8be 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/AuthenticatedApiControllerBase.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/AuthenticatedApiControllerBase.cs @@ -24,12 +24,12 @@ namespace Monai.Deploy.WorkflowManager.Common.ControllersShared /// Base authenticated api controller base. /// [Authorize] - public class AuthenticatedApiControllerBase : WFMApiControllerBase + public class AuthenticatedApiControllerBase : PaginationApiControllerBase { /// /// Initializes a new instance of the class. /// - /// Options + /// Options. public AuthenticatedApiControllerBase(IOptions options) : base(options) { diff --git a/src/WorkflowManager/WorkflowManager/Controllers/PaginationApiControllerBase.cs b/src/WorkflowManager/WorkflowManager/Controllers/PaginationApiControllerBase.cs new file mode 100644 index 000000000..2ec99ec33 --- /dev/null +++ b/src/WorkflowManager/WorkflowManager/Controllers/PaginationApiControllerBase.cs @@ -0,0 +1,95 @@ +/* + * Copyright 2023 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using Ardalis.GuardClauses; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using Monai.Deploy.WorkflowManager.Common.Configuration; +using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Filter; +using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Services; +using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Wrappers; + +namespace Monai.Deploy.WorkflowManager.Common.ControllersShared +{ + /// + /// Base Api Controller. + /// + [ApiController] + public class PaginationApiControllerBase : ApiControllerBase + { + /// + /// Initializes a new instance of the class. + /// + /// Workflow manager options. + public PaginationApiControllerBase(IOptions options) + { + Options = options ?? throw new ArgumentNullException(nameof(options)); + } + + /// + /// Gets Workflow Manager Options + /// + protected IOptions Options { get; } + + /// + /// CreateStatsPagedResponse + /// + /// Generic. + /// IEnumerable of Generic Data. + /// Pagination Filter. + /// Total number of records for given validation filter in dataset. + /// UriService. + /// Route being called. + /// StatsPagedResponse with data type of T. + protected static StatsPagedResponse> CreateStatsPagedResponse( + IEnumerable pagedData, + PaginationFilter validFilter, + long totalRecords, + IUriService uriService, + string route) + { + var response = new StatsPagedResponse>(pagedData, validFilter.PageNumber, validFilter.PageSize ?? 10); + response.SetUp(validFilter, totalRecords, uriService, route); + return response; + } + + /// + /// Creates a pagination paged response. + /// + /// Data set type. + /// Data set. + /// Filters. + /// Total records. + /// Uri service. + /// Route. + /// Returns . + protected PagedResponse> CreatePagedResponse(IEnumerable pagedData, PaginationFilter validFilter, long totalRecords, IUriService uriService, string route) + { + Guard.Against.Null(pagedData, nameof(pagedData)); + Guard.Against.Null(validFilter, nameof(validFilter)); + Guard.Against.Null(route, nameof(route)); + Guard.Against.Null(uriService, nameof(uriService)); + + var pageSize = validFilter.PageSize ?? Options.Value.EndpointSettings.DefaultPageSize; + var response = new PagedResponse>(pagedData, validFilter.PageNumber, pageSize); + + response.SetUp(validFilter, totalRecords, uriService, route); + return response; + } + } +} diff --git a/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs b/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs index abf3a9116..7a4fa2bc4 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs @@ -38,7 +38,7 @@ namespace Monai.Deploy.WorkflowManager.Common.ControllersShared /// [ApiController] [Route("tasks")] - public class TaskStatsController : ApiControllerBase + public class TaskStatsController : PaginationApiControllerBase { private readonly ILogger _logger; private readonly IUriService _uriService; @@ -173,7 +173,7 @@ public async Task GetStatsAsync([FromQuery] TimeFilter filter, st .Select(s => new ExecutionStatDTO(s)) .ToArray(); - var res = CreateStatsPagedReponse(statsDto, validFilter, rangeCount.Result, _uriService, route); + var res = CreateStatsPagedResponse(statsDto, validFilter, rangeCount.Result, _uriService, route); res.PeriodStart = filter.StartTime; res.PeriodEnd = filter.EndTime; diff --git a/src/WorkflowManager/WorkflowManager/Controllers/WFMApiControllerBase.cs b/src/WorkflowManager/WorkflowManager/Controllers/WFMApiControllerBase.cs deleted file mode 100644 index b297a0294..000000000 --- a/src/WorkflowManager/WorkflowManager/Controllers/WFMApiControllerBase.cs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2023 MONAI Consortium - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; -using Monai.Deploy.WorkflowManager.Common.Configuration; - -namespace Monai.Deploy.WorkflowManager.Common.ControllersShared -{ - /// - /// Base Api Controller. - /// - [ApiController] - public class WFMApiControllerBase : ApiControllerBase - { - private readonly IOptions _options; - - /// - /// Initializes a new instance of the class. - /// - /// Workflow manager options. - public WFMApiControllerBase(IOptions options) - : base(options) - { - _options = options ?? throw new ArgumentNullException(nameof(options)); - } - } -} diff --git a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowsController.cs b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowsController.cs index 0f51bd3a5..4354006c4 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/WorkflowsController.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/WorkflowsController.cs @@ -156,7 +156,7 @@ public async Task ValidateAsync([FromBody] WorkflowUpdateRequest try { - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); if (errors.Count > 0) { @@ -188,7 +188,7 @@ public async Task CreateAsync([FromBody] Workflow workflow) { try { - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); if (errors.Count > 0) { @@ -243,7 +243,7 @@ public async Task UpdateAsync([FromBody] WorkflowUpdateRequest re try { - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); if (errors.Count > 0) { diff --git a/src/WorkflowManager/WorkflowManager/Validators/WorkflowValidator.cs b/src/WorkflowManager/WorkflowManager/Validators/WorkflowValidator.cs index 335828560..91db2b324 100644 --- a/src/WorkflowManager/WorkflowManager/Validators/WorkflowValidator.cs +++ b/src/WorkflowManager/WorkflowManager/Validators/WorkflowValidator.cs @@ -22,6 +22,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Monai.Deploy.Messaging.Common; using Monai.Deploy.WorkflowManager.Common.Configuration; using Monai.Deploy.WorkflowManager.Common.Contracts.Models; using Monai.Deploy.WorkflowManager.Common.Logging; @@ -29,7 +30,6 @@ using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces; using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Utilities; using Monai.Deploy.WorkflowManager.Common.Services.InformaticsGateway; -using MongoDB.Driver.Linq; using static Monai.Deploy.WorkflowManager.Common.Miscellaneous.ValidationConstants; namespace Monai.Deploy.WorkflowManager.Common.Validators @@ -119,12 +119,12 @@ public void Reset() /// /// Workflow to validate. /// if any validation errors are produced while validating workflow. - public async Task> ValidateWorkflow(Workflow workflow) + public async Task> ValidateWorkflowAsync(Workflow workflow) { var tasks = workflow.Tasks; var firstTask = tasks.FirstOrDefault(); - await ValidateWorkflowSpec(workflow); + await ValidateWorkflowSpecAsync(workflow).ConfigureAwait(false); if (tasks.Any()) { ValidateTasks(workflow, firstTask!.Id); @@ -233,7 +233,7 @@ private void DetectUnreferencedTasks(TaskObject[] tasks, TaskObject firstTask) } } - private async Task ValidateWorkflowSpec(Workflow workflow) + private async Task ValidateWorkflowSpecAsync(Workflow workflow) { if (string.IsNullOrWhiteSpace(workflow.Name) is true) { @@ -257,7 +257,7 @@ private async Task ValidateWorkflowSpec(Workflow workflow) Errors.Add("Missing Workflow Version."); } - await ValidateInformaticsGateaway(workflow.InformaticsGateway); + await ValidateInformaticsGateawayAsync(workflow.InformaticsGateway); if (workflow.Tasks is null || workflow.Tasks.Any() is false) { @@ -275,7 +275,7 @@ private async Task ValidateWorkflowSpec(Workflow workflow) } } - private async Task ValidateInformaticsGateaway(InformaticsGateway informaticsGateway) + private async Task ValidateInformaticsGateawayAsync(InformaticsGateway informaticsGateway) { if (informaticsGateway is null) { @@ -303,15 +303,18 @@ private async Task ValidateInformaticsGateaway(InformaticsGateway informaticsGat private void ValidateTaskOutputArtifacts(TaskObject currentTask) { - if (currentTask.Artifacts != null && currentTask.Artifacts.Output.IsNullOrEmpty() is false) + var taskArtifacts = currentTask.Artifacts; + if (taskArtifacts == null || taskArtifacts.Output.IsNullOrEmpty()) { - var uniqueOutputNames = new HashSet(); - var allOutputsUnique = currentTask.Artifacts.Output.All(x => uniqueOutputNames.Add(x.Name)); + return; + } - if (allOutputsUnique is false) - { - Errors.Add($"Task: '{currentTask.Id}' has multiple output names with the same value."); - } + var uniqueOutputNames = new HashSet(); + var allOutputsUnique = taskArtifacts.Output.All(x => uniqueOutputNames.Add(x.Name)); + + if (allOutputsUnique is false) + { + Errors.Add($"Task: '{currentTask.Id}' has multiple output names with the same value."); } } @@ -326,29 +329,23 @@ private void TaskTypeSpecificValidation(Workflow workflow, TaskObject currentTas ValidateInputs(currentTask); - if (currentTask.Type.Equals(ExportTaskType, StringComparison.OrdinalIgnoreCase) is true) - { - ValidateExportTask(workflow, currentTask); - } - - if (currentTask.Type.Equals(ExternalAppTaskType, StringComparison.OrdinalIgnoreCase) is true) - { - ValidateExternalAppTask(workflow, currentTask); - } - - if (currentTask.Type.Equals(ArgoTaskType, StringComparison.OrdinalIgnoreCase) is true) - { - ValidateArgoTask(currentTask); - } - - if (currentTask.Type.Equals(ClinicalReviewTaskType, StringComparison.OrdinalIgnoreCase) is true) - { - ValidateClinicalReviewTask(tasks, currentTask); - } - - if (currentTask.Type.Equals(Email, StringComparison.OrdinalIgnoreCase) is true) - { - ValidateEmailTask(currentTask); + switch (currentTask.Type.ToLowerInvariant()) + { + case ExportTaskType: + ValidateExportTask(workflow, currentTask); + break; + case ExternalAppTaskType: + ValidateExternalAppTask(workflow, currentTask); + break; + case ArgoTaskType: + ValidateArgoTask(currentTask); + break; + case ClinicalReviewTaskType: + ValidateClinicalReviewTask(tasks, currentTask); + break; + case Email: + ValidateEmailTask(currentTask); + break; } } @@ -541,7 +538,7 @@ private void ValidateEmailTask(TaskObject currentTask) } var disallowedTags = _options.Value.DicomTagsDisallowed.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); - var intersect = formattedMetadataValues.Intersect(disallowedTags); + var intersect = formattedMetadataValues.Intersect(disallowedTags).ToList(); if (intersect.Any()) { @@ -577,30 +574,29 @@ private void ValidateClinicalReviewRequiredFields(TaskObject[] tasks, TaskObject if (!currentTask.Args.ContainsKey(ReviewedTaskId)) { Errors.Add($"Task: '{currentTask.Id}' reviewed_task_id must be specified."); - return; } - else if (tasks.Any(t => t.Id.ToLower() == currentTask.Args[ReviewedTaskId].ToLower()) is false) + else { - Errors.Add($"Task: '{currentTask.Id}' reviewed_task_id: '{currentTask.Args[ReviewedTaskId]}' could not be found in the workflow."); - return; + if (tasks.Any(t => t.Id.ToLower() == currentTask.Args[ReviewedTaskId].ToLower()) is false) + { + Errors.Add($"Task: '{currentTask.Id}' reviewed_task_id: '{currentTask.Args[ReviewedTaskId]}' could not be found in the workflow."); + } + + var reviewedTask = tasks.FirstOrDefault(t => t.Id.ToLower() == currentTask.Args[ReviewedTaskId].ToLower()); + if (reviewedTask is null || AcceptableTasksToReview.Contains(reviewedTask.Type.ToLowerInvariant()) is false) + { + Errors.Add($"Task: '{currentTask.Id}' reviewed_task_id: '{currentTask.Args[ReviewedTaskId]}' does not reference an accepted reviewable task type. ({string.Join(Comma, AcceptableTasksToReview)})"); + } } if (!currentTask.Args.ContainsKey(Notifications)) { Errors.Add($"Task: '{currentTask.Id}' notifications must be specified."); - return; } else if (!Enum.TryParse(typeof(NotificationValues), currentTask.Args[Notifications], true, out var _)) { Errors.Add($"Task: '{currentTask.Id}' notifications is incorrectly specified{Comma}please specify 'true' or 'false'"); } - - var reviewedTask = tasks.First(t => t.Id.ToLower() == currentTask.Args[ReviewedTaskId].ToLower()); - - if (reviewedTask.Type.Equals(ArgoTaskType, StringComparison.OrdinalIgnoreCase) is false) - { - Errors.Add($"Task: '{currentTask.Id}' reviewed_task_id: '{currentTask.Args[ReviewedTaskId]}' does not reference an Argo task."); - } } private void ValidateExportTask(Workflow workflow, TaskObject currentTask) @@ -612,7 +608,7 @@ private void ValidateExportTask(Workflow workflow, TaskObject currentTask) CheckDestinationInMigDestinations(currentTask, workflow.InformaticsGateway); - if (currentTask.ExportDestinations.Count() != currentTask.ExportDestinations.Select(t => t.Name).Distinct().Count()) + if (currentTask.ExportDestinations.Length != currentTask.ExportDestinations.Select(t => t.Name).Distinct().Count()) { Errors.Add($"Task: '{currentTask.Id}' contains duplicate destinations."); } @@ -629,19 +625,31 @@ private void ValidateExternalAppTask(Workflow workflow, TaskObject currentTask) CheckDestinationInMigDestinations(currentTask, workflow.InformaticsGateway); - if (currentTask.ExportDestinations.Count() != currentTask.ExportDestinations.Select(t => t.Name).Distinct().Count()) + if (currentTask.ExportDestinations.Length != currentTask.ExportDestinations.Select(t => t.Name).Distinct().Count()) { Errors.Add($"Task: '{currentTask.Id}' contains duplicate destinations."); } ValidateTaskOutputArtifacts(currentTask); + var taskArtifacts = currentTask.Artifacts; - if (currentTask.Artifacts == null - || currentTask.Artifacts.Output.IsNullOrEmpty() - || (currentTask.Artifacts.Output.Select(a => a.Name).Any() is false)) + if (taskArtifacts == null + || taskArtifacts.Output.IsNullOrEmpty() + || (taskArtifacts.Output.Select(a => a.Name).Any() is false)) { Errors.Add($"Task: '{currentTask.Id}' must contain at lease a single output."); } + else + { + var invalidOutputTypes = taskArtifacts.Output.Where(x => + ArtifactTypes.Validate(x.Type.ToString()) is false || x.Type == ArtifactType.Unset).ToList(); + if (invalidOutputTypes.Any()) + { + var incorrectOutputs = string.Join(Comma, invalidOutputTypes.Select(x => x.Name)); + Errors.Add($"Task: '{currentTask.Id}' has incorrect artifact output types set on artifacts with following name. {incorrectOutputs}"); + } + } + } } } diff --git a/src/WorkflowManager/WorkflowManager/packages.lock.json b/src/WorkflowManager/WorkflowManager/packages.lock.json index 47527521e..4f9aa46de 100755 --- a/src/WorkflowManager/WorkflowManager/packages.lock.json +++ b/src/WorkflowManager/WorkflowManager/packages.lock.json @@ -485,8 +485,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -1059,7 +1059,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -1082,7 +1082,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" } diff --git a/tests/IntegrationTests/TaskManager.IntegrationTests/Monai.Deploy.WorkflowManager.TaskManager.IntegrationTests.csproj b/tests/IntegrationTests/TaskManager.IntegrationTests/Monai.Deploy.WorkflowManager.TaskManager.IntegrationTests.csproj index f00b8978f..d605f7556 100644 --- a/tests/IntegrationTests/TaskManager.IntegrationTests/Monai.Deploy.WorkflowManager.TaskManager.IntegrationTests.csproj +++ b/tests/IntegrationTests/TaskManager.IntegrationTests/Monai.Deploy.WorkflowManager.TaskManager.IntegrationTests.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowApi.feature b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowApi.feature index 03d41a0f1..4fc86306e 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowApi.feature +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/WorkflowApi.feature @@ -122,7 +122,7 @@ Scenario Outline: Update workflow with invalid details | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Workflow_Incorrect_Clinical_Review_Artifact | Invalid input artifact 'test' in task 'Clinical_Review_Task': No matching task for ID 'mean-pixel-calc' | | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Workflow_Dup_Task_Id | Found duplicate task id 'liver-seg' | | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Workflow_Coverging_Task_Dest | Converging Tasks Destinations in tasks | - | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Clinical_Review_Task_Id | 'clinical-review' reviewed_task_id: 'router' does not reference an Argo task. | + | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Clinical_Review_Task_Id | 'clinical-review' reviewed_task_id: 'router' does not reference an accepted reviewable task type. (argo, remote_app_execution) | | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Clinical_Review_Multiple_Argo_Inputs | Invalid input artifact 'Argo2' in task 'clinical-review': Task cannot reference a non-reviewed task artifacts 'argo-task-2' | | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Clinical_Review_Missing_Notifications | notifications must be specified | | /workflows/c86a437d-d026-4bdf-b1df-c7a6372b89e3 | Invalid_Clinical_Review_Invalid_Notifications | notifications is incorrectly specified | @@ -168,6 +168,13 @@ Scenario: Add workflow with valid details with clinical review task When I send a POST request Then I will get a 201 response +@AddWorkflows +Scenario: Add workflow with valid details with remote app task + Given I have an endpoint /workflows + And I have a workflow body Valid_remote_task + When I send a POST request + Then I will get a 201 response + @AddWorkflows Scenario: Add workflow with valid empty details Given I have an endpoint /workflows @@ -205,10 +212,12 @@ Scenario Outline: Add workflow with invalid details | Invalid_Workflow_Incorrect_Clinical_Review_Artifact | Invalid input artifact 'test' in task 'Clinical_Review_Task': No matching task for ID 'mean-pixel-calc' | | Invalid_Workflow_Dup_Task_Id | Found duplicate task id 'liver-seg' | | Invalid_Workflow_Coverging_Task_Dest | Converging Tasks Destinations in tasks | - | Invalid_Clinical_Review_Task_Id | 'clinical-review' reviewed_task_id: 'router' does not reference an Argo task. | + | Invalid_Clinical_Review_Task_Id | 'clinical-review' reviewed_task_id: 'router' does not reference an accepted reviewable task type. (argo, remote_app_execution) | | Invalid_Clinical_Review_Multiple_Argo_Inputs | Invalid input artifact 'Argo2' in task 'clinical-review': Task cannot reference a non-reviewed task artifacts 'argo-task-2' | | Invalid_Clinical_Review_Missing_Notifications | notifications must be specified | | Invalid_Clinical_Review_Invalid_Notifications | notifications is incorrectly specified | + | invalid_remote_task_without_outputs | Task: 'invalid_remote_task_step2_remote_app' must contain at lease a single output | + | Invalid_remote_task_without_outputs_type_set | Task: 'invalid_remote_task_step2_remote_app' has incorrect artifact output types set on artifacts with following name. | @AddWorkflows Scenario Outline: Add workflow with duplicate workflow name @@ -254,7 +263,7 @@ Scenario Outline: Validate workflow with invalid details | Invalid_Workflow_Incorrect_Clinical_Review_Artifact | Invalid input artifact 'test' in task 'Clinical_Review_Task': No matching task for ID 'mean-pixel-calc' | | Invalid_Workflow_Dup_Task_Id | Found duplicate task id 'liver-seg' | | Invalid_Workflow_Coverging_Task_Dest | Converging Tasks Destinations in tasks | - | Invalid_Clinical_Review_Task_Id | 'clinical-review' reviewed_task_id: 'router' does not reference an Argo task. | + | Invalid_Clinical_Review_Task_Id | 'clinical-review' reviewed_task_id: 'router' does not reference an accepted reviewable task type. (argo, remote_app_execution) | | Invalid_Clinical_Review_Multiple_Argo_Inputs | Invalid input artifact 'Argo2' in task 'clinical-review': Task cannot reference a non-reviewed task artifacts 'argo-task-2' | | Invalid_Clinical_Review_Missing_Notifications | notifications must be specified | | Invalid_Clinical_Review_Invalid_Notifications | notifications is incorrectly specified | diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.csproj b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.csproj index 34d69e1e6..28b700d71 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.csproj +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.csproj @@ -34,8 +34,8 @@ - - + + diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs index f39f8cb83..9bf5df4d6 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs @@ -62,6 +62,8 @@ public void WhenISendARequest(string verb) [Then(@"I will get a (.*) response")] public void ThenIWillGetAResponse(string expectedCode) { + var result = ApiHelper.Response.Content.ReadAsStringAsync().Result; + ApiHelper.Response.StatusCode.Should().Be((HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), expectedCode)); } diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowObjectTestData.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowObjectTestData.cs index ad16a6f69..9661003eb 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowObjectTestData.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowObjectTestData.cs @@ -14,7 +14,9 @@ * limitations under the License. */ +using Monai.Deploy.Messaging.Common; using Monai.Deploy.WorkflowManager.Common.Contracts.Models; +using Artifact = Monai.Deploy.WorkflowManager.Common.Contracts.Models.Artifact; namespace Monai.Deploy.WorkflowManager.Common.WorkflowExecutor.IntegrationTests.TestData { @@ -48,7 +50,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -106,7 +108,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -136,7 +138,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -166,7 +168,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -196,7 +198,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -226,7 +228,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -257,7 +259,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -287,7 +289,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Args = new Dictionary { { "test", "test" } } } @@ -316,7 +318,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Description = "Basic Workflow 1 Task 1", Args = new Dictionary { { "test", "test" } } @@ -347,7 +349,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, } }, @@ -375,7 +377,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Description = "Basic Workflow 1 Task 1", Args = new Dictionary { { "test", "test" } } @@ -405,7 +407,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, Description = "Basic Workflow 1 Task 1", Args = new Dictionary { { "test", "test" } } @@ -672,15 +674,15 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact + new OutputArtifact { Name = "non_unique_name", Value = "{{ context.executions.artifact_task_1.output_dir }}", Mandatory = true }, - new Artifact + new OutputArtifact { Name = "non_unique_name", Value = "{{ context.executions.artifact_task_1.output_dir }}", @@ -735,7 +737,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -769,7 +771,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -804,7 +806,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -835,7 +837,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -868,7 +870,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -901,7 +903,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -934,7 +936,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -969,7 +971,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { new TaskDestination @@ -987,7 +989,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] { new Artifact { Name = "test", Value = "{{ context.executions.mean-pixel-calc.artifacts.report }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -1018,7 +1020,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -1049,7 +1051,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { @@ -1079,7 +1081,7 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -1115,9 +1117,9 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo1" } + new OutputArtifact { Name = "Argo1" } } }, TaskDestinations = new TaskDestination[] @@ -1146,9 +1148,9 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -1179,7 +1181,7 @@ public static class WorkflowObjectsTestData new Artifact { Name = "Argo1", Value = "{{ context.executions.argo-task-1.artifacts.Argo1 }}" }, new Artifact { Name = "Argo2", Value = "{{ context.executions.argo-task-2.artifacts.Argo2 }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -1216,7 +1218,7 @@ public static class WorkflowObjectsTestData Name = "Dicom", Value = "{{ context.input.dicom }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} }, @@ -1235,7 +1237,7 @@ public static class WorkflowObjectsTestData Name = "Dicom", Value = "{{ context.input.dicom }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -1272,7 +1274,7 @@ public static class WorkflowObjectsTestData Name = "Dicom", Value = "{{ context.input.dicom }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { @@ -1295,7 +1297,7 @@ public static class WorkflowObjectsTestData Name = "Dicom", Value = "{{ context.input.dicom }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { @@ -1317,7 +1319,7 @@ public static class WorkflowObjectsTestData Name = "Dicom", Value = "{{ context.input.dicom }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { @@ -1339,7 +1341,7 @@ public static class WorkflowObjectsTestData Name = "Dicom", Value = "{{ context.input.dicom }}" } }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -1375,9 +1377,9 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -1406,7 +1408,7 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -1442,9 +1444,9 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -1474,7 +1476,7 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -1510,9 +1512,9 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -1542,7 +1544,7 @@ public static class WorkflowObjectsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -1573,7 +1575,7 @@ public static class WorkflowObjectsTestData Artifacts = new ArtifactMap() { Input = new Artifact[] {}, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] {} } @@ -1586,6 +1588,219 @@ public static class WorkflowObjectsTestData } } }, + new WorkflowObjectTestData() + { + Name = "Valid_remote_task", + Workflow = new Workflow() + { + Name = "Valid_remote_task", + Description = "Valid remote task", + Version = "1", + Tasks = new TaskObject[] + { + new TaskObject + { + Id = "Valid_remote_task_step1_router", + Type = "router", + Description = "Valid remote Workflow Basic Workflow update Task update", + Args = new Dictionary { { "test", "test" } }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] {}, + Output = new OutputArtifact[] {} + }, + TaskDestinations = new TaskDestination[] + { + new TaskDestination() + { + Name = "Valid_remote_task_step2_remote_app" + } + } + }, + new TaskObject + { + Id = "Valid_remote_task_step2_remote_app", + Type = "remote_app_execution", + Description = "Valid remote Workflow Basic remote app execution task", + Args = new Dictionary { { "test", "test" } }, + ExportDestinations = new ExportDestination[] { new ExportDestination { Name = "test" } }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] + { + new Artifact() + { + Name = "input.dcm", + Mandatory = true, + Value = "input.dcm" + } + }, + Output = new OutputArtifact[] + { + new OutputArtifact() + { + Type = ArtifactType.AU, + Mandatory = true, + Name = "output.pdf", + } + } + }, + TaskDestinations = new TaskDestination[] + { + new TaskDestination() + { + Name = "valid_clinical_review", + } + } + }, + new TaskObject + { + Id = "valid_clinical_review", + Type = "aide_clinical_review", + Description = "Valid remote Workflow Clinical Review", + Args = new Dictionary { + { "mode", "qa" }, + { "application_name", "Name" }, + { "application_version", "Version" }, + { "reviewed_task_id", "Valid_remote_task_step2_remote_app"}, + { "notifications", "false" } + }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] + { + new Artifact() + { + Name = "input.dcm", + Mandatory = true, + Value = "{{ context.executions.Valid_remote_task_step2_remote_app.artifacts.report }}" + } + }, + }, + TaskDestinations = new TaskDestination[] {} + } + }, + InformaticsGateway = new InformaticsGateway() + { + AeTitle = "Update", + ExportDestinations = new string[]{"test"} + } + } + }, + new WorkflowObjectTestData() + { + Name = "Invalid_remote_task_without_outputs_type_set", + Workflow = new Workflow() + { + Name = "Invalid_remote_task_without_outputs_type_set", + Description = "Invalid remote task without outputs type set", + Version = "1", + Tasks = new TaskObject[] + { + new TaskObject + { + Id = "remote_task_without_outputs_type_set_step1_router", + Type = "router", + Description = "Basic Workflow update Task update", + Args = new Dictionary { { "test", "test" } }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] {}, + Output = new OutputArtifact[] {} + }, + TaskDestinations = new TaskDestination[] {} + }, + new TaskObject + { + Id = "invalid_remote_task_step2_remote_app", + Type = "remote_app_execution", + Description = "Basic remote app execution task", + Args = new Dictionary { { "test", "test" } }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] {}, + Output = new OutputArtifact[] + { + new OutputArtifact() + } + }, + } + }, + InformaticsGateway = new InformaticsGateway() + { + AeTitle = "Update", + ExportDestinations = new string[]{"test"} + } + } + }, + new WorkflowObjectTestData() + { + Name = "invalid_remote_task_without_outputs", + Workflow = new Workflow() + { + Name = "invalid_remote_task_without_outputs", + Description = "invalid remote task without outputs", + Version = "1", + Tasks = new TaskObject[] + { + new TaskObject + { + Id = "step1_router", + Type = "router", + Description = "Basic Workflow update Task update", + Args = new Dictionary { { "test", "test" } }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] {}, + Output = new OutputArtifact[] {} + }, + TaskDestinations = new TaskDestination[] {} + }, + new TaskObject + { + Id = "invalid_remote_task_step2_remote_app", + Type = "remote_app_execution", + Description = "Basic remote app execution task", + Args = new Dictionary { { "test", "test" } }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] {}, + Output = new OutputArtifact[] {} + }, + TaskDestinations = new TaskDestination[] + { + new TaskDestination() + { + Name = "clinical_review", + } + } + }, + new TaskObject + { + Id = "clinical_review", + Type = "aide_clinical_review", + Description = "Clinical Review task missing ReviewedTaskId", + Args = new Dictionary { + { "mode", "qa" }, + { "application_name", "Name" }, + { "application_version", "Version" }, + { "reviewed_task_id", "Task ID" } + }, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] {}, + Output = new OutputArtifact[] {} + }, + TaskDestinations = new TaskDestination[] {} + } + }, + InformaticsGateway = new InformaticsGateway() + { + AeTitle = "Update", + ExportDestinations = new string[]{"test"} + } + } + }, }; } } diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowRevisionTestData.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowRevisionTestData.cs index 834bfd113..ca7279a09 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowRevisionTestData.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowRevisionTestData.cs @@ -2842,9 +2842,9 @@ public static class WorkflowRevisionsTestData { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { + new OutputArtifact { Name = "output", Mandatory = true }, diff --git a/tests/UnitTests/PayloadListener.Tests/packages.lock.json b/tests/UnitTests/PayloadListener.Tests/packages.lock.json deleted file mode 100644 index 09b937847..000000000 --- a/tests/UnitTests/PayloadListener.Tests/packages.lock.json +++ /dev/null @@ -1,952 +0,0 @@ -{ - "version": 1, - "dependencies": { - "net6.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "tW3lsNS+dAEII6YGUX/VMoJjBS1QvsxqJeqLaJXub08y1FSjasFPtQ4UBUsudE9PNrzLjooClMsPtY2cZLdXpQ==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[17.7.2, )", - "resolved": "17.7.2", - "contentHash": "WOSF/GUYcnrLGkdvCbXDRig2rShtBwfQc5l7IxQE6PZI3CeXAqF1SpyzwlGA5vw+MdEAXs3niy+ZkGBBWna6tw==", - "dependencies": { - "Microsoft.CodeCoverage": "17.7.2", - "Microsoft.TestPlatform.TestHost": "17.7.2" - } - }, - "Moq": { - "type": "Direct", - "requested": "[4.20.69, )", - "resolved": "4.20.69", - "contentHash": "8P/oAUOL8ZVyXnzBBcgdhTsOD1kQbAWfOcMI7KDQO3HqQtzB/0WYLdnMa4Jefv8nu/MQYiiG0IuoJdvG0v0Nig==", - "dependencies": { - "Castle.Core": "5.1.1" - } - }, - "NUnit": { - "type": "Direct", - "requested": "[3.13.3, )", - "resolved": "3.13.3", - "contentHash": "KNPDpls6EfHwC3+nnA67fh5wpxeLb3VLFAfLxrug6JMYDLHH6InaQIWR7Sc3y75d/9IKzMksH/gi08W7XWbmnQ==", - "dependencies": { - "NETStandard.Library": "2.0.0" - } - }, - "NUnit3TestAdapter": { - "type": "Direct", - "requested": "[4.5.0, )", - "resolved": "4.5.0", - "contentHash": "s8JpqTe9bI2f49Pfr3dFRfoVSuFQyraTj68c3XXjIS/MRGvvkLnrg6RLqnTjdShX+AdFUCCU/4Xex58AdUfs6A==" - }, - "Ardalis.GuardClauses": { - "type": "Transitive", - "resolved": "4.1.1", - "contentHash": "+UcJ2s+gf2wMNrwadCaHZV2DMcGgBU1t22A+jm40P4MHQRLy9hcleGy5xdVWd4dXZPa5Vlp4TG5xU2rhoDYrBA==" - }, - "AWSSDK.Core": { - "type": "Transitive", - "resolved": "3.7.200.13", - "contentHash": "yiUuhTI8w183euRqhXym1DyhnD/1ccxceRoruCfkIoqY3PAaFgFL8pE4iDLDZa7SUW4M4qZnQ5PMlFr1rrl6zw==" - }, - "AWSSDK.SecurityToken": { - "type": "Transitive", - "resolved": "3.7.201.9", - "contentHash": "yKlTPrvNeDdzkOX82Ydf7MD09Gk3dK74JWZPRWJ3QIxskWVoNTAyLvfVBzbi+/fGnjf8/qKsSzxT7GHLqds37A==", - "dependencies": { - "AWSSDK.Core": "[3.7.200.13, 4.0.0)" - } - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", - "dependencies": { - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "CommunityToolkit.HighPerformance": { - "type": "Transitive", - "resolved": "8.2.0", - "contentHash": "iKzsPiSnXoQUN5AoApYmdfnLn9osNb+YCLWRr5PFmrDEQVIu7OeOyf4DPvNBvbqbYLZCfvHozPkulyv6zBQsFw==" - }, - "DnsClient": { - "type": "Transitive", - "resolved": "1.6.1", - "contentHash": "4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==", - "dependencies": { - "Microsoft.Win32.Registry": "5.0.0" - } - }, - "fo-dicom": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "YraR81u9XuTN7l+pt6HzT0KvuhgWVZ9LCuHMH3zgFfAtv4peT1y+nYMSGwF9YqNP+oZnzh0s0PJ+vJMsTDpGIw==", - "dependencies": { - "CommunityToolkit.HighPerformance": "8.2.0", - "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "Microsoft.Bcl.HashCode": "1.1.1", - "Microsoft.Extensions.DependencyInjection": "6.0.1", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Buffers": "4.5.1", - "System.Text.Encoding.CodePages": "6.0.0", - "System.Text.Encodings.Web": "6.0.0", - "System.Text.Json": "6.0.7", - "System.Threading.Channels": "6.0.0" - } - }, - "LightInject": { - "type": "Transitive", - "resolved": "5.4.0", - "contentHash": "w4EjEhNqtzFb0qlScmpjA84Nuv4+OITNGfYCjDhJoLYyw+uagkrrth+e9Hgidv4bMzuNSlJpHPGTHx6DtE4Ixg==", - "dependencies": { - "System.ValueTuple": "4.5.0" - } - }, - "Microsoft.AspNetCore.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ubycklv+ZY7Kutdwuy1W4upWcZ6VFR8WUXU7l7B2+mvbDBBPAcfpi+E+Y5GFe+Q157YfA3C49D2GCjAZc7Mobw==", - "dependencies": { - "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.Hosting.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Hosting.Server.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "1PMijw8RMtuQF60SsD/JlKtVfvh4NORAhF4wjysdABhlhTrYmtgssqyncR0Stq5vqtjplZcj6kbT4LRTglt9IQ==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Http.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Features": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0" - } - }, - "Microsoft.Bcl.AsyncInterfaces": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==" - }, - "Microsoft.Bcl.HashCode": { - "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "MalY0Y/uM/LjXtHfX/26l2VtN4LDNZ2OE3aumNOHDLsT4fNYy2hiHXI4CXCqKpNUNm7iJ2brrc4J89UdaL56FA==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "17.7.2", - "contentHash": "ntbkwIqwszkfCRjxVZOyEQiHauiYsY9NtYjw9ASsoxDSiG8YtV6AGcOAwrAk3TZv2UOq4MrpX+3MYEeMHSb03w==" - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "2.2.0" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "vWXPg3HJQIpZkENn1KWq8SfbqVujVD7S7vIAyFXXqK5xkf1Vho+vG0bLBCHxU36lD1cLLtmGpfYf0B3MYFi9tQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" - }, - "Microsoft.Extensions.Diagnostics.HealthChecks": { - "type": "Transitive", - "resolved": "6.0.21", - "contentHash": "1Qf/tEg6IlzbvCxrc+pZE+ZGrajBdB/+V2+abeAu6lg8wXGHmO8JtnrNqwc5svSbcz3udxinUPyH3vw6ZujKbg==", - "dependencies": { - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.21", - "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.4", - "Microsoft.Extensions.Options": "6.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { - "type": "Transitive", - "resolved": "6.0.21", - "contentHash": "5FSA1euCRtbRqVgTn2ahgCG9Cy29UQXAZMCJLUlrQQaC5rko0+d/aq9SiFGIDP7cvoWUsatrlNdfc6UyOMV5aA==" - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", - "dependencies": { - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Diagnostics.DiagnosticSource": "6.0.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "6.0.4", - "contentHash": "K14wYgwOfKVELrUh5eBqlC8Wvo9vvhS3ZhIvcswV2uS/ubkTRPSQsN557EZiYUSSoZNxizG+alN4wjtdyLdcyw==" - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ukU1mQGX9+xBsEzpNd13yl4deFVYI+fxxnmKpOhvNZsF+/trCrAUQh+9QM5pPGHbfYkz3lLQ4BXfKCP0502dLw==", - "dependencies": { - "Microsoft.Extensions.Logging": "2.2.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "2.2.0" - } - }, - "Microsoft.Extensions.Logging.Console": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "1eGgcOJ++PMxW6sn++j6U7wsWvhEBm/5ScqBUUBGLRE8M7AHahi9tsxivDMqEXVM3F0/pshHl3kEpMXtw4BeFg==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging": "2.2.0", - "Microsoft.Extensions.Logging.Configuration": "2.2.0" - } - }, - "Microsoft.Extensions.Logging.Debug": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "JjqWtshxUujSnxslFccCRAaH8uFOciqXkYdRw+h5MwpC4sUc+ju9yZzvVi6PA5vW09ckv26EkasEvXrofGiaJg==", - "dependencies": { - "Microsoft.Extensions.Logging": "2.2.0" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "d4WS6yVXaw43ffiUnHj8oG1t2B6RbDDiQcgdA+Eq//NlPa3Wd+GTJFKj4OM4eDF3GjVumGr/CEVRS/jcYoF5LA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", - "Microsoft.Extensions.Configuration.Binder": "2.2.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "17.7.2", - "contentHash": "aHzQWgDMVBnk39HhQVmn06w+YxzF1h2V5/M4WgrNQAn7q97GR4Si3vLRTDlmJo9nK/Nknce+H4tXx4gqOKyLeg==", - "dependencies": { - "NuGet.Frameworks": "6.5.0", - "System.Reflection.Metadata": "1.6.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "17.7.2", - "contentHash": "pv9yVD7IKPLJV28zYjLsWFiM3j506I2ye+6NquG8vsbm/gR7lgyig8IgY6Vo57VMvGaAKwtUECzcj+C5tH271Q==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.7.2", - "Newtonsoft.Json": "13.0.1" - } - }, - "Microsoft.Win32.Registry": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, - "Monai.Deploy.Messaging": { - "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", - "dependencies": { - "Ardalis.GuardClauses": "4.1.1", - "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", - "Newtonsoft.Json": "13.0.3", - "System.IO.Abstractions": "17.2.3" - } - }, - "Monai.Deploy.Storage": { - "type": "Transitive", - "resolved": "0.2.18", - "contentHash": "+1JX7QDgVEMqYA0/M1QMr1gtXRC6lEuhBtLfJXWi6cEgh9kOPE0KiHd1AWI7PxBgBbsEBZaNQSvWqShlwcu6bA==", - "dependencies": { - "AWSSDK.SecurityToken": "3.7.201.9", - "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", - "Monai.Deploy.Storage.S3Policy": "0.2.18", - "System.IO.Abstractions": "17.2.3" - } - }, - "Monai.Deploy.Storage.S3Policy": { - "type": "Transitive", - "resolved": "0.2.18", - "contentHash": "+b0nDnf4OoajdH2hB02elRC6G+GjlYnxJC+F3dGbUUXGMtPApzs8c8s/EG4fKzihxsVovJtqnJl7atcaPyl12Q==", - "dependencies": { - "Ardalis.GuardClauses": "4.1.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mongo.Migration": { - "type": "Transitive", - "resolved": "3.1.4", - "contentHash": "iA13H1tFH7x3eeKhBAYdgFxzK4gj78hY2pc5yiB08zX3kmhxGT/hp5k+iTDlSlCCyl+pMNpitTUiKiqOI6L6Gg==", - "dependencies": { - "LightInject": "5.4.0", - "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.DependencyInjection": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Console": "2.2.0", - "Microsoft.Extensions.Logging.Debug": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0", - "MongoDB.Driver": "2.13.1", - "NLog": "4.7.11", - "Serilog": "2.8.0", - "Serilog.Extensions.Logging": "2.0.4", - "Serilog.Extensions.Logging.File": "2.0.0", - "System.ValueTuple": "4.5.0" - } - }, - "MongoDB.Bson": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "QT+D1I3Jz6r6S6kCgJD1L9dRCLVJCKlkGRkA+tJ7uLpHRmjDNcNKy4D1T+L9gQrjl95lDN9PHdwEytdvCW/jzA==", - "dependencies": { - "System.Memory": "4.5.5", - "System.Runtime.CompilerServices.Unsafe": "5.0.0" - } - }, - "MongoDB.Driver": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "VxKj1wuhadiXhaXkykCWRgsYOysdaOYJ202hJFz25UjkrqC/tHA8RS4hdS5HYfGWoI//fypBXnxZCkEjXLXdfw==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "2.0.0", - "MongoDB.Bson": "2.21.0", - "MongoDB.Driver.Core": "2.21.0", - "MongoDB.Libmongocrypt": "1.8.0" - } - }, - "MongoDB.Driver.Core": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "Ac44U3bQfinmdH5KNFjTidJe9LKW87SxkXJ3YuIUJQMITEc4083YF1yvjJxaSeYF9er0YgHSmwhHpsZv0Fwplg==", - "dependencies": { - "AWSSDK.SecurityToken": "3.7.100.14", - "DnsClient": "1.6.1", - "Microsoft.Extensions.Logging.Abstractions": "2.0.0", - "MongoDB.Bson": "2.21.0", - "MongoDB.Libmongocrypt": "1.8.0", - "SharpCompress": "0.30.1", - "Snappier": "1.0.0", - "System.Buffers": "4.5.1", - "ZstdSharp.Port": "0.6.2" - } - }, - "MongoDB.Libmongocrypt": { - "type": "Transitive", - "resolved": "1.8.0", - "contentHash": "fgNw8Dxpkq7mpoaAYes8cfnPRzvFIoB8oL9GPXwi3op/rONftl0WAeg4akRLcxfoVuUvuUO2wGoVBr3JzJ7Svw==" - }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.0", - "contentHash": "7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "NLog": { - "type": "Transitive", - "resolved": "4.7.11", - "contentHash": "A7EpoOjWesV5BPx1cOiBndazZq1VGdagIs6oK8ttcRDl5adCMtHiTqnsD5yYaOrMxOQeCjHBf/w3nKzCmhGbgw==" - }, - "NuGet.Frameworks": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "QWINE2x3MbTODsWT1Gh71GaGb5icBz4chS8VYvTgsBnsi8esgN6wtHhydd7fvToWECYGq7T4cgBBDiKD/363fg==" - }, - "Serilog": { - "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "zjuKXW5IQws43IHX7VY9nURsaCiBYh2kyJCWLJRSWrTsx/syBKHV8MibWe2A+QH3Er0AiwA+OJmO3DhFJDY1+A==", - "dependencies": { - "System.Collections.NonGeneric": "4.3.0" - } - }, - "Serilog.Extensions.Logging": { - "type": "Transitive", - "resolved": "2.0.4", - "contentHash": "C8Vf9Wj1M+wGilChTV+OhE4v5ZCDzQfHjLKj2yNDMkXf/zgUKeAUZfbrVrt/c+flXP8M7/SHWBOXTkuPgubFsA==", - "dependencies": { - "Microsoft.Extensions.Logging": "2.0.0", - "Serilog": "2.3.0" - } - }, - "Serilog.Extensions.Logging.File": { - "type": "Transitive", - "resolved": "2.0.0", - "contentHash": "usO0qr4v9VCMBWiTJ1nQmAbPNCt40FrkDol6CpfCXbsxGZS/hH+YCueF7vvPQ32ATI0GWcMWiKRdjXEE7/HxTQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.0.0", - "Microsoft.Extensions.Configuration.Binder": "2.0.0", - "Serilog": "2.5.0", - "Serilog.Extensions.Logging": "2.0.2", - "Serilog.Formatting.Compact": "1.0.0", - "Serilog.Sinks.Async": "1.1.0", - "Serilog.Sinks.RollingFile": "3.3.0" - } - }, - "Serilog.Formatting.Compact": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "r3QYz02y7+B7Ng30hyJM929OJhem7SsJ4XDUE0Zfptj2MRiQfpPUb5f58juAFjp/TnNeSX2QNzZEnHwLeoJfHQ==", - "dependencies": { - "Serilog": "2.0.0" - } - }, - "Serilog.Sinks.Async": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "xll0Kanz2BkCxuv+F3p1WXr47jdsVM0GU1n1LZvK+18QiRZ/WGFNxSNw9EMKFV5ED5gr7MUpAe6PCMNL1HGUMA==", - "dependencies": { - "Serilog": "2.1.0", - "System.Collections.Concurrent": "4.0.12" - } - }, - "Serilog.Sinks.File": { - "type": "Transitive", - "resolved": "3.2.0", - "contentHash": "VHbo68pMg5hwSWrzLEdZv5b/rYmIgHIRhd4d5rl8GnC5/a8Fr+RShT5kWyeJOXax1el6mNJ+dmHDOVgnNUQxaw==", - "dependencies": { - "Serilog": "2.3.0", - "System.IO": "4.1.0", - "System.IO.FileSystem": "4.0.1", - "System.IO.FileSystem.Primitives": "4.0.1", - "System.Text.Encoding.Extensions": "4.0.11", - "System.Threading": "4.0.11", - "System.Threading.Timer": "4.0.1" - } - }, - "Serilog.Sinks.RollingFile": { - "type": "Transitive", - "resolved": "3.3.0", - "contentHash": "2lT5X1r3GH4P0bRWJfhA7etGl8Q2Ipw9AACvtAHWRUSpYZ42NGVyHoVs2ALBZ/cAkkS+tA4jl80Zie144eLQPg==", - "dependencies": { - "Serilog.Sinks.File": "3.2.0", - "System.IO": "4.1.0", - "System.IO.FileSystem.Primitives": "4.0.1", - "System.Runtime.InteropServices": "4.1.0", - "System.Text.Encoding.Extensions": "4.0.11" - } - }, - "SharpCompress": { - "type": "Transitive", - "resolved": "0.30.1", - "contentHash": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==" - }, - "Snappier": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==" - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" - }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Collections.Concurrent": { - "type": "Transitive", - "resolved": "4.0.12", - "contentHash": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Diagnostics.Tracing": "4.1.0", - "System.Globalization": "4.0.11", - "System.Reflection": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "System.Collections.NonGeneric": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Diagnostics.Debug": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.Diagnostics.Tracing": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Abstractions": { - "type": "Transitive", - "resolved": "17.2.3", - "contentHash": "VcozGeE4SxIo0cnXrDHhbrh/Gb8KQnZ3BvMelvh+iw0PrIKtuuA46U2Xm4e4pgnaWFgT4RdZfTpWl/WPRdw0WQ==" - }, - "System.IO.FileSystem": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "IBErlVq5jOggAD69bg1t0pJcHaDbJbWNUZTPI96fkYWzwYbN6D9wRHMULLDd9dHsl7C2YsxXL31LMfPI1SWt8w==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.IO": "4.1.0", - "System.IO.FileSystem.Primitives": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Handles": "4.0.1", - "System.Text.Encoding": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "System.IO.FileSystem.Primitives": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "kWkKD203JJKxJeE74p8aF8y4Qc9r9WQx4C0cHzHPrY3fv/L/IhWnyCHaFJ3H1QPOH6A93whlQ2vG5nHlBDvzWQ==", - "dependencies": { - "System.Runtime": "4.1.0" - } - }, - "System.Memory": { - "type": "Transitive", - "resolved": "4.5.5", - "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==" - }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "1.6.0", - "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "System.Runtime.CompilerServices.Unsafe": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" - }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "nCJvEKguXEvk2ymk1gqj625vVnlK3/xdGzx0vOKicQkoquaTBJTP13AIYkocSUwHCLNBwUbXTqTWGDxBTWpt7g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Runtime.InteropServices": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Reflection": "4.1.0", - "System.Reflection.Primitives": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Handles": "4.0.1" - } - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.CodePages": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Text.Encoding.Extensions": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0", - "System.Text.Encoding": "4.0.11" - } - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "6.0.7", - "contentHash": "/Tf/9XjprpHolbcDOrxsKVYy/mUG/FS7aGd9YUgBVEiHeQH4kAE0T1sMbde7q6B5xcrNUsJ5iW7D1RvHudQNqA==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "6.0.0" - } - }, - "System.Threading": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Channels": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==" - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Timer": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "saGfUV8uqVW6LeURiqxcGhZ24PzuRNaUBtbhVeuUAvky1naH395A/1nY0P2bWvrw/BreRtIB/EzTDkGBpqCwEw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.ValueTuple": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==" - }, - "ZstdSharp.Port": { - "type": "Transitive", - "resolved": "0.6.2", - "contentHash": "jPao/LdUNLUz8rn3H1D8W7wQbZsRZM0iayvWI4xGejJg3XJHT56gcmYdgmCGPdJF1UEBqUjucCRrFB+4HbJsbw==" - }, - "monai.deploy.workflowmanager.common": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Database": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Storage": "[1.0.0, )" - } - }, - "monai.deploy.workflowmanager.common.configuration": { - "type": "Project", - "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", - "Monai.Deploy.Storage": "[0.2.18, )" - } - }, - "monai.deploy.workflowmanager.common.miscellaneous": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Common.Configuration": "[1.0.0, )", - "fo-dicom": "[5.1.1, )" - } - }, - "monai.deploy.workflowmanager.conditionsresolver": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Database": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Storage": "[1.0.0, )" - } - }, - "monai.deploy.workflowmanager.contracts": { - "type": "Project", - "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", - "Mongo.Migration": "[3.1.4, )", - "MongoDB.Bson": "[2.21.0, )" - } - }, - "monai.deploy.workflowmanager.database": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", - "Mongo.Migration": "[3.1.4, )", - "MongoDB.Driver": "[2.21.0, )" - } - }, - "monai.deploy.workflowmanager.logging": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" - } - }, - "monai.deploy.workflowmanager.payloadlistener": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Common.Configuration": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Common.Miscellaneous": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", - "Monai.Deploy.WorkloadManager.WorkfowExecuter": "[1.0.0, )" - } - }, - "monai.deploy.workflowmanager.storage": { - "type": "Project", - "dependencies": { - "Monai.Deploy.Storage": "[0.2.18, )", - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )" - } - }, - "monai.deploy.workloadmanager.workfowexecuter": { - "type": "Project", - "dependencies": { - "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Common.Configuration": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Common.Miscellaneous": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.ConditionsResolver": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Database": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", - "Monai.Deploy.WorkflowManager.Storage": "[1.0.0, )" - } - } - } - } -} \ No newline at end of file diff --git a/tests/UnitTests/WorkflowExecuter.Tests/Services/WorkflowExecuterServiceTests.cs b/tests/UnitTests/WorkflowExecuter.Tests/Services/WorkflowExecuterServiceTests.cs index 4e0551a39..b1426b85c 100644 --- a/tests/UnitTests/WorkflowExecuter.Tests/Services/WorkflowExecuterServiceTests.cs +++ b/tests/UnitTests/WorkflowExecuter.Tests/Services/WorkflowExecuterServiceTests.cs @@ -43,6 +43,7 @@ using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Extensions; using Monai.Deploy.WorkflowManager.Common.ConditionsResolver.Parser; using Monai.Deploy.WorkflowManager.Common.Contracts.Models; +using Monai.Deploy.WorkloadManager.WorkfowExecuter.Extensions; namespace Monai.Deploy.WorkflowManager.Common.WorkflowExecuter.Tests.Services { @@ -373,9 +374,9 @@ public async Task ProcessPayload_ValidWorkflowIdRequestWithArtifacts_ReturnesTru Description = "taskdesc", Artifacts = new ArtifactMap { - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact + new OutputArtifact { Name = "output.pdf" } @@ -1818,9 +1819,9 @@ public async Task ProcessTaskUpdate_ValidTaskUpdateEventWithOutputArtifactsMissi }, Artifacts = new ArtifactMap { - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact + new OutputArtifact { Name = "Artifact Name", Value = "Artifact Value", @@ -2388,7 +2389,7 @@ public void AttachPatientMetaData_AtachesDataToTaskExec_TaskExecShouldHavePatien PatientSex = "Unknown", }; - WorkflowExecuterService.AttachPatientMetaData(taskExec, patientDetails); + taskExec.AttachPatientMetaData(patientDetails, null); taskExec.TaskPluginArguments.Should().NotBeNull(); taskExec.TaskPluginArguments[PatientKeys.PatientId].Should().BeSameAs(patientDetails.PatientId); diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/ArtifactsControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/ArtifactsControllerTests.cs new file mode 100644 index 000000000..d71009b7a --- /dev/null +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/ArtifactsControllerTests.cs @@ -0,0 +1,47 @@ +/* + * Copyright 2022 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +using FluentAssertions; +using Microsoft.AspNetCore.Mvc; +using Monai.Deploy.Messaging.Common; +using Monai.Deploy.WorkflowManager.Common.ControllersShared; +using Newtonsoft.Json; +using Xunit; + +namespace Monai.Deploy.WorkflowManager.Common.Test.Controllers +{ + public class ArtifactsControllerTests + { + private ArtifactsController ArtifactsController { get; } + + public ArtifactsControllerTests() + { + ArtifactsController = new ArtifactsController(); + } + + [Fact] + public void GetArtifactTypesTest() + { + var result = ArtifactsController.GetArtifactTypes(); + Assert.NotNull(result); + var ok = Assert.IsType(result); + var json = JsonConvert.SerializeObject(ok.Value); + + ok.Value.Should().BeEquivalentTo(ArtifactTypes.ListOfModularity); + } + } +} diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs index fef8195b2..b907cc4e0 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/PayloadControllerTests.cs @@ -134,7 +134,7 @@ public async Task GetByIdAsync_PayloadDoesNotExist_ReturnsNotFound() var objectResult = Assert.IsType(result); var responseValue = (ProblemDetails)objectResult.Value; - string expectedErrorMessage = $"Failed to find payload with payload id: {payloadId}"; + var expectedErrorMessage = $"Failed to find payload with payload id: {payloadId}"; responseValue.Detail.Should().BeEquivalentTo(expectedErrorMessage); Assert.Equal((int)HttpStatusCode.NotFound, responseValue.Status); diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowsControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowsControllerTests.cs index 1b71b8075..486127160 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowsControllerTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/WorkflowsControllerTests.cs @@ -175,7 +175,7 @@ public async Task CreateAsync_ValidWorkflow_ReturnsWorkflowId() Name = "test", Value = "{{ context.input.dicom }}" } - } + }, }, ExportDestinations = new ExportDestination[] { new ExportDestination @@ -419,9 +419,9 @@ public async Task ValidateAsync_ValidWorkflowWithClinicalReview_Returns204() { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -451,7 +451,7 @@ public async Task ValidateAsync_ValidWorkflowWithClinicalReview_Returns204() { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -498,9 +498,9 @@ public async Task ValidateAsync_InvalidWorkflowWithClinicalReviewMissingNotifica { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -529,7 +529,7 @@ public async Task ValidateAsync_InvalidWorkflowWithClinicalReviewMissingNotifica { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } @@ -580,9 +580,9 @@ public async Task ValidateAsync_InvalidWorkflowWithClinicalReviewInvalidNotifica { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact { Name = "Argo2" } + new OutputArtifact { Name = "Argo2" } } }, TaskDestinations = new TaskDestination[] { @@ -612,7 +612,7 @@ public async Task ValidateAsync_InvalidWorkflowWithClinicalReviewInvalidNotifica { new Artifact { Name = "Dicom", Value = "{{ context.input.dicom }}" }, }, - Output = new Artifact[] {} + Output = new OutputArtifact[] {} }, TaskDestinations = new TaskDestination[] { } } diff --git a/tests/UnitTests/WorkflowManager.Tests/Validators/WorkflowValidatorTests.cs b/tests/UnitTests/WorkflowManager.Tests/Validators/WorkflowValidatorTests.cs index 422a52ce3..a32fc1937 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Validators/WorkflowValidatorTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Validators/WorkflowValidatorTests.cs @@ -18,6 +18,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using FluentAssertions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces; @@ -98,15 +99,15 @@ public async Task ValidateWorkflow_ValidatesAWorkflow_ReturnsErrorsAndHasCorrect }, Artifacts = new ArtifactMap { - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact + new OutputArtifact { Name = "non_unique_artifact", Mandatory = true, Value = "Example Value" }, - new Artifact + new OutputArtifact { Name = "non_unique_artifact", Mandatory = true, @@ -604,11 +605,11 @@ public async Task ValidateWorkflow_ValidatesAWorkflow_ReturnsErrorsAndHasCorrect _informaticsGatewayService.Setup(w => w.OriginExists(It.IsAny())) .ReturnsAsync(false); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.True(errors.Count > 0); - Assert.Equal(53, errors.Count); + Assert.Equal(56, errors.Count); var convergingTasksDestinations = "Converging Tasks Destinations in tasks: (test-clinical-review-2, example-task) on task: example-task"; Assert.Contains(convergingTasksDestinations, errors); @@ -707,7 +708,7 @@ public async Task ValidateWorkflow_ValidatesEmptyWorkflow_ReturnsErrorsAndHasCor .ReturnsAsync(new WorkflowRevision()); _workflowValidator.OrignalName = "pizza"; - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.True(errors.Count > 0); @@ -761,9 +762,9 @@ public async Task ValidateWorkflow_ValidateWorkflow_WithPluginArgs_ReturnsNoErro }, Artifacts = new ArtifactMap { - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact + new OutputArtifact { Name = "non_unique_artifact", Mandatory = true, @@ -815,7 +816,7 @@ public async Task ValidateWorkflow_ValidateWorkflow_WithPluginArgs_ReturnsNoErro _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.True(errors.Count == 0); @@ -859,9 +860,9 @@ public async Task ValidateWorkflow_ValidateWorkflow_ReturnsNoErrors() }, Artifacts = new ArtifactMap { - Output = new Artifact[] + Output = new OutputArtifact[] { - new Artifact + new OutputArtifact { Name = "non_unique_artifact", Mandatory = true, @@ -923,7 +924,7 @@ public async Task ValidateWorkflow_ValidateWorkflow_ReturnsNoErrors() for (var i = 0; i < 15; i++) { - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.True(errors.Count == 0); } @@ -970,7 +971,7 @@ public async Task ValidateWorkflow_Incorrect_podPriorityClassName_ReturnsErrors( _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.Single(errors); } @@ -1016,7 +1017,7 @@ public async Task ValidateWorkflow_correct_podPriorityClassName_ReturnsNoErrors( _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.Empty(errors); } @@ -1078,9 +1079,77 @@ public async Task ValidateWorkflow_ExportAppWithoutDestination_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); + + Assert.NotEmpty(errors); + } + + [Fact] + public async Task ValidateWorkflow_RemoteAppTaskWithoutTypeSet_ReturnsErrors() + { + var workflow = new Workflow + { + Name = "Workflowname1", + Description = "Workflowdesc1", + Version = "1", + InformaticsGateway = new InformaticsGateway + { + AeTitle = "aetitle", + ExportDestinations = new string[] { "oneDestination", "twoDestination", "threeDestination" } + }, + Tasks = new TaskObject[] + { + new TaskObject + { + Id = "rootTask", + Type = "router", + Description = "TestDesc", + Artifacts = new ArtifactMap + { + Input = new Artifact[] { + new Artifact + { + Name = "non_unique_artifact", + Value = "Example Value" + } + } + }, + TaskDestinations = new TaskDestination[] + { + new TaskDestination{ Name = "externalTask" } + } + }, + new TaskObject + { + Id = "externalTask", + Type = "remote_app_execution", + //ExportDestinations = new ExportDestination[] + //{ + // new ExportDestination { Name = "oneDestination" } + //}, + Artifacts = new ArtifactMap() + { + Input = new Artifact[] + { + new Artifact { Name = "output", Value = "{{ context.executions.artifact_task_1.artifacts.output }}" }, + }, + Output = new OutputArtifact[] + { + new OutputArtifact { Name = "report.pdf" }, + }, + } + } + } + }; + + _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) + .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); + + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors); + const string expectedError = "Task: 'externalTask' has incorrect artifact output types set on artifacts with following name. report.pdf"; + errors.Contains(expectedError).Should().BeTrue(); } [Fact] @@ -1141,7 +1210,7 @@ public async Task ValidateWorkflow_ExportAppWithSameDestinationTwice_ReturnsErro _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors); } @@ -1199,7 +1268,7 @@ public async Task ValidateWorkflow_ExportAppWithInputs_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors); } @@ -1260,7 +1329,7 @@ public async Task ValidateWorkflow_ExportAppWithOutputs_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.Single(errors); } @@ -1339,7 +1408,7 @@ public async Task ValidateWorkflow_Converging_Tasks_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors.Where(e => e.Contains("Converging Tasks"))); } @@ -1396,7 +1465,7 @@ public async Task ValidateWorkflow_Duplicate_TaskIds_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors.Where(e => e.Contains("Found duplicate task"))); } @@ -1440,7 +1509,7 @@ public async Task ValidateWorkflow_No_InformaticsGateway_On_export_Task_ReturnsE _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors.Where(e => e.Contains("InformaticsGateway ExportDestinations destinations can not be null"))); } @@ -1463,7 +1532,7 @@ public async Task ValidateWorkflow_InformaticsGateway_No_AETitle_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors.Where(e => e.Contains("AeTitle is required in the InformaticsGateaway section"))); } @@ -1507,7 +1576,7 @@ public async Task ValidateWorkflow_No_name_Or_Values_On_Inputs_ReturnsErrors() _workflowService.Setup(w => w.GetByNameAsync(It.IsAny())) .ReturnsAsync(null, TimeSpan.FromSeconds(.1)); - var errors = await _workflowValidator.ValidateWorkflow(workflow); + var errors = await _workflowValidator.ValidateWorkflowAsync(workflow); Assert.NotEmpty(errors.Where(e => e.Contains("Input Artifacts must have a Name"))); Assert.NotEmpty(errors.Where(e => e.Contains("Input Artifacts must have a Value"))); diff --git a/tests/UnitTests/WorkflowManager.Tests/packages.lock.json b/tests/UnitTests/WorkflowManager.Tests/packages.lock.json index 067ca159c..4221e8991 100755 --- a/tests/UnitTests/WorkflowManager.Tests/packages.lock.json +++ b/tests/UnitTests/WorkflowManager.Tests/packages.lock.json @@ -510,8 +510,8 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "w0+37sCMzhZg4vhYFG+9TKmDW+Dks5DOiTrJzdnT8xJCfH1MK6xkRnIf+dBfxes0wFwPiKueaUWDcUsg1RnadQ==", + "resolved": "1.0.3", + "contentHash": "DoQrTyztAGmOafiPNhxZ44D50Qcbqv4W94N9LxofyhW2NgSqMOKMbS+6FcomMsCKlLC1E3dyoYdZF8GFunwKUw==", "dependencies": { "Ardalis.GuardClauses": "4.1.1", "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.21", @@ -1892,7 +1892,7 @@ "monai.deploy.workflowmanager.common.configuration": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Monai.Deploy.Storage": "[0.2.18, )" } }, @@ -1915,7 +1915,7 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "[1.0.1, )", + "Monai.Deploy.Messaging": "[1.0.3, )", "Mongo.Migration": "[3.1.4, )", "MongoDB.Bson": "[2.21.0, )" }