diff --git a/TaskManager.Dockerfile b/TaskManager.Dockerfile index 770efdba3..ab8b7369e 100644 --- a/TaskManager.Dockerfile +++ b/TaskManager.Dockerfile @@ -39,7 +39,6 @@ RUN apt-get clean \ && apt-get install -y --no-install-recommends \ libssl1.1 \ openssl \ - sqlite3 \ && rm -rf /var/lib/apt/lists WORKDIR /opt/monai/wm diff --git a/WorkflowManager.Dockerfile b/WorkflowManager.Dockerfile index 3e1383831..10a630441 100644 --- a/WorkflowManager.Dockerfile +++ b/WorkflowManager.Dockerfile @@ -39,7 +39,6 @@ RUN apt-get clean \ && apt-get install -y --no-install-recommends \ libssl1.1 \ openssl \ - sqlite3 \ && rm -rf /var/lib/apt/lists WORKDIR /opt/monai/wm diff --git a/doc/dependency_decisions.yml b/doc/dependency_decisions.yml index 0ff6286f9..4026f5233 100644 --- a/doc/dependency_decisions.yml +++ b/doc/dependency_decisions.yml @@ -1395,38 +1395,62 @@ :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 - - :approve - - Microsoft.AspNetCore.Routing + - Microsoft.AspNetCore.Routing - :who: Jack Schofield (JackSchofield23) :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 - - :approve - - Microsoft.AspNetCore.Routing.Abstractions + - Microsoft.AspNetCore.Routing.Abstractions - :who: Jack Schofield (JackSchofield23) :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 - - :approve - - Microsoft.Net.Http.Headers + - Microsoft.Net.Http.Headers - :who: Jack Schofield (JackSchofield23) :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 - - :approve - - Microsoft.DotNet.PlatformAbstractions + - Microsoft.DotNet.PlatformAbstractions - :who: Jack Schofield (JackSchofield23) :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 - - :approve - - Microsoft.Extensions.ObjectPool + - Microsoft.Extensions.ObjectPool - :who: Jack Schofield (JackSchofield23) :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 - - :approve - - Microsoft.AspNetCore.WebUtilities + - Microsoft.AspNetCore.WebUtilities - :who: Jack Schofield (JackSchofield23) :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt :versions: [] :when: 2022-08-16 14:46:00.000000000 +01:00 +- - :approve + - Docker.DotNet + - :who: Victor Chang (mocsharp) + :why: MIT - https://github.com/dotnet/Docker.DotNet/blob/master/LICENSE + :versions: [] + :when: 2022-09-12 16:27:00.000000000 +01:00 +- - :approve + - AspNetCore.HealthChecks.MongoDb + - :who: Victor Chang (mocsharp) + :why: Apache 2.0 - https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/LICENSE + :versions: [] + :when: 2022-09-12 15:39:28.416111911 Z +- - :approve + - AspNetCore.HealthChecks.Rabbitmq + - :who: Victor Chang (mocsharp) + :why: Apache 2.0 - https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/LICENSE + :versions: [] + :when: 2022-09-12 15:39:46.593579624 Z +- - :approve + - Microsoft.AspNetCore.Diagnostics.HealthChecks + - :who: Victor Chang (mocsharp) + :why: Apache 2.0 - https://raw.githubusercontent.com/aspnet/AspNetCore/2.0.0/LICENSE.txt + :versions: [] + :when: 2022-09-12 15:40:42.030017822 Z diff --git a/src/Monai.Deploy.WorkflowManager.sln b/src/Monai.Deploy.WorkflowManager.sln index e9071e1d7..cd346d046 100644 --- a/src/Monai.Deploy.WorkflowManager.sln +++ b/src/Monai.Deploy.WorkflowManager.sln @@ -76,6 +76,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Monai.Deploy.WorkflowManage EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Monai.Deploy.WorkflowManager.Authentication", "WorkflowManager\Authentication\Monai.Deploy.WorkflowManager.Authentication.csproj", "{7D64A0B1-6FDD-4393-9101-2321EE4C2270}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Monai.Deploy.WorkflowManager.TaskManager.Docker", "TaskManager\Plug-ins\Docker\Monai.Deploy.WorkflowManager.TaskManager.Docker.csproj", "{47C31FB9-C862-4770-83B6-E2DDF260CC67}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monai.Deploy.WorkflowManager.TaskManager.Docker.Tests", "..\tests\UnitTests\TaskManager.Docker.Tests\Monai.Deploy.WorkflowManager.TaskManager.Docker.Tests.csproj", "{BF6569A1-1A5A-4358-9C02-1A6A5F0FBFD9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -210,6 +214,14 @@ Global {7D64A0B1-6FDD-4393-9101-2321EE4C2270}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D64A0B1-6FDD-4393-9101-2321EE4C2270}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D64A0B1-6FDD-4393-9101-2321EE4C2270}.Release|Any CPU.Build.0 = Release|Any CPU + {47C31FB9-C862-4770-83B6-E2DDF260CC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47C31FB9-C862-4770-83B6-E2DDF260CC67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47C31FB9-C862-4770-83B6-E2DDF260CC67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47C31FB9-C862-4770-83B6-E2DDF260CC67}.Release|Any CPU.Build.0 = Release|Any CPU + {BF6569A1-1A5A-4358-9C02-1A6A5F0FBFD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF6569A1-1A5A-4358-9C02-1A6A5F0FBFD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF6569A1-1A5A-4358-9C02-1A6A5F0FBFD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF6569A1-1A5A-4358-9C02-1A6A5F0FBFD9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -248,6 +260,8 @@ Global {93F4FE97-120C-44DC-9B21-69FB7EAB5846} = {AC5B198A-C3F2-4AD2-B532-E71B4630BDD5} {EFECF826-B036-4689-B223-D791CD2C0F10} = {71DDEE7B-E213-4E39-A7F4-4646783A27F7} {7D64A0B1-6FDD-4393-9101-2321EE4C2270} = {AC5B198A-C3F2-4AD2-B532-E71B4630BDD5} + {47C31FB9-C862-4770-83B6-E2DDF260CC67} = {541C5347-5D7D-44B7-95D3-B6FB3D9EB955} + {BF6569A1-1A5A-4358-9C02-1A6A5F0FBFD9} = {71DDEE7B-E213-4E39-A7F4-4646783A27F7} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DC0D56C8-D8CB-45CE-B528-F3DCF86D63ED} diff --git a/src/Shared/Configuration/Monai.Deploy.WorkflowManager.Configuration.csproj b/src/Shared/Configuration/Monai.Deploy.WorkflowManager.Configuration.csproj index 7971b7a9f..8f4039f7d 100644 --- a/src/Shared/Configuration/Monai.Deploy.WorkflowManager.Configuration.csproj +++ b/src/Shared/Configuration/Monai.Deploy.WorkflowManager.Configuration.csproj @@ -28,7 +28,7 @@ - + @@ -42,8 +42,8 @@ - - + + diff --git a/src/Shared/Configuration/packages.lock.json b/src/Shared/Configuration/packages.lock.json index a430661b4..349690c31 100644 --- a/src/Shared/Configuration/packages.lock.json +++ b/src/Shared/Configuration/packages.lock.json @@ -49,17 +49,18 @@ }, "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { diff --git a/src/TaskManager/API/Extensions/TypeExtensions.cs b/src/TaskManager/API/Extensions/TypeExtensions.cs index 60af78ca1..623f5cc60 100644 --- a/src/TaskManager/API/Extensions/TypeExtensions.cs +++ b/src/TaskManager/API/Extensions/TypeExtensions.cs @@ -56,7 +56,7 @@ public static Type GetType(this Type interfaceType, string typeString) if (assembly is null) { - assembly = Assembly.Load($"{AppDomain.CurrentDomain.BaseDirectory}{name.FullName}.dll"); + assembly = Assembly.LoadFile($"{AppDomain.CurrentDomain.BaseDirectory}{name.FullName}.dll"); } return assembly; diff --git a/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj b/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj index 28e2f0bcc..729cf52a8 100644 --- a/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj +++ b/src/TaskManager/API/Monai.Deploy.WorkflowManager.TaskManager.API.csproj @@ -28,12 +28,12 @@ ..\..\.sonarlint\project-monai_monai-deploy-workflow-managercsharp.ruleset - - + + - + diff --git a/src/TaskManager/API/packages.lock.json b/src/TaskManager/API/packages.lock.json index ba41a921d..5ce12f832 100644 --- a/src/TaskManager/API/packages.lock.json +++ b/src/TaskManager/API/packages.lock.json @@ -4,17 +4,18 @@ "net6.0": { "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { diff --git a/src/TaskManager/Database/packages.lock.json b/src/TaskManager/Database/packages.lock.json index 4093d3619..e9ab2f19f 100644 --- a/src/TaskManager/Database/packages.lock.json +++ b/src/TaskManager/Database/packages.lock.json @@ -174,16 +174,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { @@ -300,9 +301,9 @@ "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "MongoDB.Bson": "2.17.1" + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "MongoDB.Bson": "[2.17.1, )" } } } diff --git a/src/TaskManager/Plug-ins/AideClinicalReview/AideClinicalReviewPlugin.cs b/src/TaskManager/Plug-ins/AideClinicalReview/AideClinicalReviewPlugin.cs index 0d0f0ae7d..2414132eb 100644 --- a/src/TaskManager/Plug-ins/AideClinicalReview/AideClinicalReviewPlugin.cs +++ b/src/TaskManager/Plug-ins/AideClinicalReview/AideClinicalReviewPlugin.cs @@ -199,6 +199,7 @@ protected override void Dispose(bool disposing) } #pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously + public async ValueTask DisposeAsync() #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously { @@ -206,6 +207,7 @@ public async ValueTask DisposeAsync() GC.SuppressFinalize(this); } - public override Task HandleTimeout(string identity) { return Task.CompletedTask; } // not implemented + public override Task HandleTimeout(string identity) + { return Task.CompletedTask; } // not implemented } } diff --git a/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json b/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json index 04a3a9ec9..a530729f1 100644 --- a/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json +++ b/src/TaskManager/Plug-ins/AideClinicalReview/packages.lock.json @@ -129,16 +129,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { @@ -222,9 +223,9 @@ "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "MongoDB.Bson": "2.17.1" + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "MongoDB.Bson": "[2.17.1, )" } } } diff --git a/src/TaskManager/Plug-ins/Argo/ArgoPlugin.cs b/src/TaskManager/Plug-ins/Argo/ArgoPlugin.cs index 297e08ad7..78413cf73 100644 --- a/src/TaskManager/Plug-ins/Argo/ArgoPlugin.cs +++ b/src/TaskManager/Plug-ins/Argo/ArgoPlugin.cs @@ -19,15 +19,15 @@ using Argo; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Monai.Deploy.Messaging.Configuration; using Monai.Deploy.Messaging.Events; +using Monai.Deploy.WorkflowManager.Configuration; using Monai.Deploy.WorkflowManager.TaskManager.API; +using Monai.Deploy.WorkflowManager.TaskManager.API.Extensions; using Monai.Deploy.WorkflowManager.TaskManager.Argo.Logging; using Monai.Deploy.WorkflowManager.TaskManager.Argo.StaticValues; -using Monai.Deploy.WorkflowManager.TaskManager.API.Extensions; using Newtonsoft.Json; -using Microsoft.Extensions.Options; -using Monai.Deploy.WorkflowManager.Configuration; -using Monai.Deploy.Messaging.Configuration; namespace Monai.Deploy.WorkflowManager.TaskManager.Argo { diff --git a/src/TaskManager/Plug-ins/Argo/ArgoProvider.cs b/src/TaskManager/Plug-ins/Argo/ArgoProvider.cs index 502518c2e..b91f7df8b 100644 --- a/src/TaskManager/Plug-ins/Argo/ArgoProvider.cs +++ b/src/TaskManager/Plug-ins/Argo/ArgoProvider.cs @@ -53,8 +53,6 @@ public IArgoClient CreateClient(string baseUrl, string? apiToken, bool allowInse } return new ArgoClient(httpClient) { BaseUrl = baseUrl }; } - - } #pragma warning restore CA1054 // URI-like parameters should not be strings diff --git a/src/TaskManager/Plug-ins/Argo/AssemblyInfo.cs b/src/TaskManager/Plug-ins/Argo/AssemblyInfo.cs index 2937cbf1d..67e23cb8e 100644 --- a/src/TaskManager/Plug-ins/Argo/AssemblyInfo.cs +++ b/src/TaskManager/Plug-ins/Argo/AssemblyInfo.cs @@ -16,5 +16,4 @@ using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("Monai.Deploy.WorkflowManager.TaskManager.Runner")] [assembly: InternalsVisibleTo("Monai.Deploy.WorkflowManager.TaskManager.Argo.Tests")] diff --git a/src/TaskManager/Plug-ins/Argo/KubernetesProvider.cs b/src/TaskManager/Plug-ins/Argo/KubernetesProvider.cs index ed9dc838a..4c711b908 100644 --- a/src/TaskManager/Plug-ins/Argo/KubernetesProvider.cs +++ b/src/TaskManager/Plug-ins/Argo/KubernetesProvider.cs @@ -31,10 +31,9 @@ public KubernetesProvider(ILogger logger) public IKubernetes CreateClient() { - var configuration = KubernetesClientConfiguration.BuildDefaultConfig(); _logger.CreatingKubernetesClient(configuration.Host, configuration.Namespace); - + return new Kubernetes(configuration); } } diff --git a/src/TaskManager/Plug-ins/Argo/Monai.Deploy.WorkflowManager.TaskManager.Argo.csproj b/src/TaskManager/Plug-ins/Argo/Monai.Deploy.WorkflowManager.TaskManager.Argo.csproj index 579779051..52d3d327a 100644 --- a/src/TaskManager/Plug-ins/Argo/Monai.Deploy.WorkflowManager.TaskManager.Argo.csproj +++ b/src/TaskManager/Plug-ins/Argo/Monai.Deploy.WorkflowManager.TaskManager.Argo.csproj @@ -22,8 +22,8 @@ enable - - + + @@ -33,7 +33,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/TaskManager/Plug-ins/Argo/packages.lock.json b/src/TaskManager/Plug-ins/Argo/packages.lock.json index dc62f32dd..2dc65f55e 100644 --- a/src/TaskManager/Plug-ins/Argo/packages.lock.json +++ b/src/TaskManager/Plug-ins/Argo/packages.lock.json @@ -34,17 +34,18 @@ }, "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { @@ -552,22 +553,22 @@ "monai.deploy.workflowmanager.configuration": { "type": "Project", "dependencies": { - "Karambolo.Extensions.Logging.File": "3.3.1", - "Microsoft.Extensions.Configuration": "6.0.1", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Newtonsoft.Json": "13.0.1", - "System.IO.Abstractions": "17.1.1" + "Karambolo.Extensions.Logging.File": "[3.3.1, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Newtonsoft.Json": "[13.0.1, )", + "System.IO.Abstractions": "[17.1.1, )" } }, "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "MongoDB.Bson": "2.17.1" + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "MongoDB.Bson": "[2.17.1, )" } } } diff --git a/src/TaskManager/Plug-ins/Docker/AssemblyInfo.cs b/src/TaskManager/Plug-ins/Docker/AssemblyInfo.cs new file mode 100644 index 000000000..d87829114 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/AssemblyInfo.cs @@ -0,0 +1,19 @@ +/* + * Copyright 2021-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.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Monai.Deploy.WorkflowManager.TaskManager.Docker.Tests")] diff --git a/src/TaskManager/Plug-ins/Docker/ContainerMonitorException.cs b/src/TaskManager/Plug-ins/Docker/ContainerMonitorException.cs new file mode 100644 index 000000000..d6646f531 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/ContainerMonitorException.cs @@ -0,0 +1,40 @@ +/* + * 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.Runtime.Serialization; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + [Serializable] + internal class ContainerMonitorException : Exception + { + public ContainerMonitorException() + { + } + + public ContainerMonitorException(string? message) : base(message) + { + } + + public ContainerMonitorException(string? message, Exception? innerException) : base(message, innerException) + { + } + + protected ContainerMonitorException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } +} \ No newline at end of file diff --git a/src/TaskManager/Plug-ins/Docker/ContainerStatusMonitor.cs b/src/TaskManager/Plug-ins/Docker/ContainerStatusMonitor.cs new file mode 100644 index 000000000..61fa920bb --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/ContainerStatusMonitor.cs @@ -0,0 +1,236 @@ +/* + * 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.IO.Abstractions; +using Ardalis.GuardClauses; +using Docker.DotNet.Models; +using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Monai.Deploy.Messaging.API; +using Monai.Deploy.Messaging.Events; +using Monai.Deploy.Messaging.Messages; +using Monai.Deploy.Storage.API; +using Monai.Deploy.WorkflowManager.Configuration; +using Monai.Deploy.WorkflowManager.TaskManager.API; +using Monai.Deploy.WorkflowManager.TaskManager.Docker.Logging; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + public interface IContainerStatusMonitor + { + Task Start(TaskDispatchEvent taskDispatchEvent, + TimeSpan containerTimeout, + string containerId, + ContainerVolumeMount intermediateVolumeMount, + IReadOnlyList outputVolumeMounts, + CancellationToken cancellationToken = default); + } + + public class ContainerStatusMonitor : IContainerStatusMonitor, IDisposable + { + private readonly IOptions _options; + private readonly IServiceScope _scope; + private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; + private bool _disposedValue; + + public ContainerStatusMonitor( + IServiceScopeFactory serviceScopeFactory, + ILogger logger, + IFileSystem fileSystem, + IOptions options) + { + if (serviceScopeFactory is null) + { + throw new ArgumentNullException(nameof(serviceScopeFactory)); + } + + _scope = serviceScopeFactory.CreateScope(); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); + _options = options ?? throw new ArgumentNullException(nameof(options)); + } + + public async Task Start( + TaskDispatchEvent taskDispatchEvent, + TimeSpan containerTimeout, + string containerId, + ContainerVolumeMount intermediateVolumeMount, + IReadOnlyList outputVolumeMounts, + CancellationToken cancellationToken = default) + { + Guard.Against.Null(taskDispatchEvent, nameof(taskDispatchEvent)); + Guard.Against.Null(containerTimeout, nameof(containerTimeout)); + Guard.Against.NullOrWhiteSpace(containerId, nameof(containerId)); + + var dockerClientFactory = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IDockerClientFactory)); + var dockerClient = dockerClientFactory.CreateClient(new Uri(taskDispatchEvent.TaskPluginArguments[Keys.BaseUrl])); + + var pollingPeriod = TimeSpan.FromSeconds(1); + + var timeToRetry = (int)containerTimeout.TotalSeconds; + while (timeToRetry-- > 0) + { + try + { + var response = await dockerClient.Containers.InspectContainerAsync(containerId, cancellationToken).ConfigureAwait(false); + + if (IsContainerCompleted(response.State)) + { + await UploadOutputArtifacts(intermediateVolumeMount, outputVolumeMounts, cancellationToken).ConfigureAwait(false); + await SendCallbackMessage(taskDispatchEvent, containerId).ConfigureAwait(false); + return; + } + } + catch (Exception ex) + { + _logger.ErrorMonitoringContainerStatus(containerId, ex); + } + finally + { + await Task.Delay(pollingPeriod, cancellationToken).ConfigureAwait(false); + } + } + + _logger.TimedOutMonitoringContainerStatus(containerId); + } + + internal static bool IsContainerCompleted(ContainerState state) + { + if (Strings.DockerEndStates.Contains(state.Status, StringComparer.InvariantCultureIgnoreCase) && + !string.IsNullOrWhiteSpace(state.FinishedAt)) + { + return true; + } + return false; + } + + private async Task UploadOutputArtifacts(ContainerVolumeMount intermediateVolumeMount, IReadOnlyList outputVolumeMounts, CancellationToken cancellationToken) + { + Guard.Against.Null(outputVolumeMounts, nameof(outputVolumeMounts)); + + var storageService = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IStorageService)); + var contentTypeProvider = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IContentTypeProvider)); + + if (intermediateVolumeMount is not null) + { + await UploadOutputArtifacts(storageService, contentTypeProvider, intermediateVolumeMount.Source, intermediateVolumeMount.TaskManagerPath, cancellationToken).ConfigureAwait(false); + } + + foreach (var output in outputVolumeMounts) + { + await UploadOutputArtifacts(storageService, contentTypeProvider, output.Source, output.TaskManagerPath, cancellationToken).ConfigureAwait(false); + } + } + + private async Task UploadOutputArtifacts(IStorageService storageService, IContentTypeProvider contentTypeProvider, Messaging.Common.Storage destination, string artifactsPath, CancellationToken cancellationToken) + { + Guard.Against.Null(destination, nameof(destination)); + Guard.Against.NullOrWhiteSpace(artifactsPath, nameof(artifactsPath)); + + IEnumerable files; + try + { + files = _fileSystem.Directory.EnumerateFiles(artifactsPath, "*", SearchOption.AllDirectories); + } + catch (Exception ex) + { + throw new ContainerMonitorException("Directory doesn't exist or no permission to access the directory.", ex); + } + + if (!files.Any()) + { + _logger.NoFilesFoundForUpload(artifactsPath); + } + foreach (var file in files) + { + try + { + var objectName = file.Replace(artifactsPath, string.Empty).TrimStart('/'); + objectName = _fileSystem.Path.Combine(destination.RelativeRootPath, objectName); + _logger.UploadingFile(file, destination.Bucket, objectName); + if (!contentTypeProvider.TryGetContentType(file, out var contentType)) + { + contentType = GetContentType(_fileSystem.Path.GetExtension(file)); + } + _logger.ContentTypeForFile(objectName, contentType); + using var stream = _fileSystem.File.OpenRead(file); + await storageService.PutObjectAsync(destination.Bucket, objectName, stream, stream.Length, contentType, null, cancellationToken).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorUploadingFile(file, ex); + } + } + } + + private static string GetContentType(string? ext) + { + if (string.IsNullOrWhiteSpace(ext)) + { + return Strings.MimeTypeUnknown; + } + + return ext.ToLowerInvariant() switch + { + Strings.FileExtensionDicom => Strings.MimeTypeDicom, + _ => Strings.MimeTypeUnknown + }; + } + + private async Task SendCallbackMessage(TaskDispatchEvent taskDispatchEvent, string containerId) + { + Guard.Against.Null(taskDispatchEvent, nameof(taskDispatchEvent)); + Guard.Against.NullOrWhiteSpace(containerId, nameof(containerId)); + + _logger.SendingCallbackMessage(containerId); + var message = new JsonMessage(new TaskCallbackEvent + { + CorrelationId = taskDispatchEvent.CorrelationId, + ExecutionId = taskDispatchEvent.ExecutionId, + Identity = containerId, + Outputs = taskDispatchEvent.Outputs ?? new List(), + TaskId = taskDispatchEvent.TaskId, + WorkflowInstanceId = taskDispatchEvent.WorkflowInstanceId, + }, applicationId: Strings.ApplicationId, correlationId: taskDispatchEvent.CorrelationId); + + var messageBrokerPublisherService = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IMessageBrokerPublisherService)); + await messageBrokerPublisherService.Publish(_options.Value.Messaging.Topics.TaskCallbackRequest, message.ToMessage()).ConfigureAwait(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!_disposedValue) + { + if (disposing) + { + _scope.Dispose(); + } + + _disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/TaskManager/Plug-ins/Docker/ContainerVolumeMount.cs b/src/TaskManager/Plug-ins/Docker/ContainerVolumeMount.cs new file mode 100644 index 000000000..5faae1407 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/ContainerVolumeMount.cs @@ -0,0 +1,41 @@ +/* + * 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 Ardalis.GuardClauses; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + public class ContainerVolumeMount + { + public ContainerVolumeMount(Messaging.Common.Storage source, string containerPath, string hostPath, string taskManagerPath) + { + Guard.Against.Null(source, nameof(source)); + Guard.Against.NullOrWhiteSpace(containerPath, nameof(containerPath)); + Guard.Against.NullOrWhiteSpace(hostPath, nameof(hostPath)); + Guard.Against.NullOrWhiteSpace(taskManagerPath, nameof(taskManagerPath)); + + Source = source; + ContainerPath = containerPath; + HostPath = hostPath; + TaskManagerPath = taskManagerPath; + } + + public Messaging.Common.Storage Source { get; } + public string ContainerPath { get; } + public string HostPath { get; } + public string TaskManagerPath { get; } + } +} diff --git a/src/TaskManager/Plug-ins/Docker/DockerPlugin.cs b/src/TaskManager/Plug-ins/Docker/DockerPlugin.cs new file mode 100644 index 000000000..2c3b5c476 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/DockerPlugin.cs @@ -0,0 +1,450 @@ +/* + * 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 Ardalis.GuardClauses; +using Docker.DotNet; +using Docker.DotNet.Models; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Monai.Deploy.Messaging.Events; +using Monai.Deploy.Storage.API; +using Monai.Deploy.WorkflowManager.TaskManager.API; +using Monai.Deploy.WorkflowManager.TaskManager.Docker.Logging; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + public class DockerPlugin : TaskPluginBase + { + private TimeSpan _containerTimeout; + private readonly IDockerClient _dockerClient; + private readonly ILogger _logger; + private readonly IServiceScope _scope; + private readonly string _hostTemporaryStoragePath; + + public DockerPlugin( + IServiceScopeFactory serviceScopeFactory, + ILogger logger, + TaskDispatchEvent taskDispatchEvent) + : base(taskDispatchEvent) + { + Guard.Against.Null(serviceScopeFactory, nameof(serviceScopeFactory)); + + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _scope = serviceScopeFactory.CreateScope() ?? throw new ArgumentNullException(nameof(serviceScopeFactory)); + + ValidateEvent(); + Initialize(); + + _hostTemporaryStoragePath = Environment.GetEnvironmentVariable(Strings.HostTemporaryStorageEnvironmentVariableName) ?? throw new ApplicationException($"Environment variable {Strings.HostTemporaryStorageEnvironmentVariableName} is not set."); + var dockerClientFactory = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IDockerClientFactory)); + _dockerClient = dockerClientFactory.CreateClient(new Uri(Event.TaskPluginArguments[Keys.BaseUrl])); + } + + private void Initialize() + { + if (Event.TaskPluginArguments.ContainsKey(Keys.TaskTimeoutMinutes) && + int.TryParse(Event.TaskPluginArguments[Keys.TaskTimeoutMinutes], out var timeoutMinutes)) + { + _containerTimeout = TimeSpan.FromMinutes(timeoutMinutes); + } + else + { + _containerTimeout = TimeSpan.FromMinutes(5); + } + + _logger.Initialized(Event.TaskPluginArguments[Keys.BaseUrl], _containerTimeout.TotalMinutes); + } + + private void ValidateEvent() + { + if (Event.TaskPluginArguments is null || Event.TaskPluginArguments.Count == 0) + { + throw new InvalidTaskException($"Required parameters to execute Argo workflow are missing: {string.Join(',', Keys.RequiredParameters)}"); + } + + foreach (var key in Keys.RequiredParameters) + { + if (!Event.TaskPluginArguments.ContainsKey(key)) + { + throw new InvalidTaskException($"Required parameter to execute Argo workflow is missing: {key}"); + } + } + + if (!Uri.IsWellFormedUriString(Event.TaskPluginArguments[Keys.BaseUrl], UriKind.Absolute)) + { + throw new InvalidTaskException($"The value '{Event.TaskPluginArguments[Keys.BaseUrl]}' provided for '{Keys.BaseUrl}' is not a valid URI."); + } + + Event.Inputs.ForEach(p => ValidateStorageMappings(p)); + Event.Outputs.ForEach(p => ValidateStorageMappings(p)); + } + + private void ValidateStorageMappings(Messaging.Common.Storage storage) + { + Guard.Against.Null(storage, nameof(storage)); + + if (!Event.TaskPluginArguments.ContainsKey(storage.Name)) + { + throw new InvalidTaskException($"The mapping for storage '{storage.Name}' is not defined as an envrionment variable."); + } + } + + public override async Task ExecuteTask(CancellationToken cancellationToken = default) + { + List inputVolumeMounts; + ContainerVolumeMount intermediateVolumeMount; + List outputVolumeMounts; + + try + { + inputVolumeMounts = await SetupInputs(cancellationToken).ConfigureAwait(false); + intermediateVolumeMount = SetupIntermediateVolume(); + outputVolumeMounts = SetupOutputs(); + } + catch (Exception exception) + { + _logger.ErrorGeneratingVolumeMounts(exception); + return new ExecutionStatus { Status = TaskExecutionStatus.Failed, FailureReason = FailureReason.PluginError, Errors = exception.Message }; + } + + try + { + var imageCreateParameters = new ImagesCreateParameters() + { + FromImage = Event.TaskPluginArguments[Keys.ContainerImage], + }; + + // Pull image. + await _dockerClient.Images.CreateImageAsync(imageCreateParameters, new AuthConfig(), new Progress(), cancellationToken).ConfigureAwait(false); + } + catch (Exception exception) + { + _logger.ErrorPullingContainerImage(Event.TaskPluginArguments[Keys.ContainerImage], exception); + return new ExecutionStatus { Status = TaskExecutionStatus.Failed, FailureReason = FailureReason.PluginError, Errors = exception.Message }; + } + + CreateContainerParameters parameters; + try + { + parameters = BuildContainerSpecification(inputVolumeMounts, intermediateVolumeMount, outputVolumeMounts); + } + catch (Exception exception) + { + _logger.ErrorGeneratingContainerSpecification(exception); + return new ExecutionStatus { Status = TaskExecutionStatus.Failed, FailureReason = FailureReason.PluginError, Errors = exception.Message }; + } + + string containerId; + try + { + var response = await _dockerClient.Containers.CreateContainerAsync(parameters, cancellationToken).ConfigureAwait(false); + containerId = response.ID; + + if (response.Warnings.Any()) + { + _logger.ContainerCreatedWithWarnings(containerId, string.Join(".", response.Warnings)); + } + + _logger.CreatedContainer(containerId); + + _ = await _dockerClient.Containers.StartContainerAsync(containerId, new ContainerStartParameters(), cancellationToken).ConfigureAwait(false); + _logger.StartedContainer(containerId); + } + catch (Exception exception) + { + _logger.ErrorDeployingContainer(exception); + return new ExecutionStatus { Status = TaskExecutionStatus.Failed, FailureReason = FailureReason.PluginError, Errors = exception.Message }; + } + + try + { + var monitor = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IContainerStatusMonitor)); + _ = Task.Run(async () => + { + await monitor.Start(Event, _containerTimeout, containerId, intermediateVolumeMount, outputVolumeMounts, cancellationToken); + }); + } + catch (Exception exception) + { + _logger.ErrorLaunchingContainerMonitor(containerId, exception); + } + return new ExecutionStatus() { Status = TaskExecutionStatus.Accepted }; + } + + public override async Task GetStatus(string identity, CancellationToken cancellationToken = default) + { + Guard.Against.NullOrWhiteSpace(identity, nameof(identity)); + + try + { + var response = await _dockerClient.Containers.InspectContainerAsync(identity, cancellationToken).ConfigureAwait(false); + var retryCount = 12; + while ((response == null || !ContainerStatusMonitor.IsContainerCompleted(response.State)) && retryCount-- > 0) + { + await Task.Delay(250, cancellationToken).ConfigureAwait(false); + response = await _dockerClient.Containers.InspectContainerAsync(identity, cancellationToken).ConfigureAwait(false); + } + + if (response == null) + { + throw new InvalidOperationException($"Unable to obtain status for container {identity}"); + } + + var stats = GetExecutuionStats(response); + if (ContainerStatusMonitor.IsContainerCompleted(response.State)) + { + return new ExecutionStatus + { + Status = TaskExecutionStatus.Succeeded, + FailureReason = FailureReason.None, + Stats = stats + }; + } + else if (response.State.OOMKilled || response.State.Dead) + { + return new ExecutionStatus + { + Status = TaskExecutionStatus.Failed, + FailureReason = FailureReason.ExternalServiceError, + Errors = $"Exit code={response.State.ExitCode}", + Stats = stats + }; + } + else + { + return new ExecutionStatus + { + Status = TaskExecutionStatus.Failed, + FailureReason = FailureReason.Unknown, + Errors = $"Exit code={response.State.ExitCode}. Status={response.State.Status}.", + Stats = stats + }; + } + } + catch (Exception ex) + { + _logger.ErrorGettingStatusFromDocker(identity, ex); + return new ExecutionStatus + { + Status = TaskExecutionStatus.Failed, + FailureReason = FailureReason.ExternalServiceError, + Errors = ex.Message + }; + } + } + + private Dictionary GetExecutuionStats(ContainerInspectResponse response) + { + Guard.Against.Null(response, nameof(response)); + + TimeSpan? duration = null; + + if (DateTime.TryParse(response.State.FinishedAt, out var completedTime)) + { + duration = completedTime.Subtract(response.Created); + } + + return new Dictionary + { + { "workflowId", Event.WorkflowInstanceId }, + { "duration", duration.HasValue ? duration.Value.TotalMilliseconds.ToString(CultureInfo.InvariantCulture) : string.Empty }, + { "startedAt", response.Created.ToString("s") }, + { "finishedAt", completedTime.ToString("s") } + }; + } + + public override async Task HandleTimeout(string identity) + { + try + { + await _dockerClient.Containers.KillContainerAsync(identity, new ContainerKillParameters()).ConfigureAwait(false); + _logger.TerminatedContainer(identity); + } + catch (Exception ex) + { + _logger.ErrorTerminatingContainer(identity, ex); + throw; + } + } + + private CreateContainerParameters BuildContainerSpecification(IList inputs, ContainerVolumeMount intermediateVolumeMount, IList outputs) + { + var entrypoint = Event.TaskPluginArguments[Keys.EntryPoint].Split(','); + var command = Event.TaskPluginArguments[Keys.Command].Split(','); + + var volumeMounts = new List(); + + foreach (var input in inputs) + { + var mount = new Mount { Type = "bind", ReadOnly = true, Source = input.HostPath, Target = input.ContainerPath }; + volumeMounts.Add(mount); + _logger.DockerInputMapped(input.HostPath, input.ContainerPath); + } + + foreach (var output in outputs) + { + var mount = new Mount { Type = "bind", ReadOnly = false, Source = output.HostPath, Target = output.ContainerPath }; + volumeMounts.Add(mount); + _logger.DockerOutputMapped(output.HostPath, output.ContainerPath); + } + + if (intermediateVolumeMount is not null) + { + volumeMounts.Add(new Mount { Type = "bind", ReadOnly = false, Source = intermediateVolumeMount.HostPath, Target = intermediateVolumeMount.ContainerPath }); + _logger.DockerIntermediateVolumeMapped(intermediateVolumeMount.HostPath, intermediateVolumeMount.ContainerPath); + } + + var envvars = new List(); + + foreach (var key in Event.TaskPluginArguments.Keys) + { + if (key.StartsWith(Keys.EnvironmentVariableKeyPrefix, false, CultureInfo.InvariantCulture)) + { + var envVarKey = key.Replace(Keys.EnvironmentVariableKeyPrefix, string.Empty); + envvars.Add($"{envVarKey}={Event.TaskPluginArguments[key]}"); + _logger.DockerEnvironmentVariableAdded(envVarKey, Event.TaskPluginArguments[key]); + } + } + + var parameters = new CreateContainerParameters() + { + Name = Event.ExecutionId, + Env = envvars, + Entrypoint = entrypoint, + Cmd = command, + Image = Event.TaskPluginArguments[Keys.ContainerImage], + HostConfig = new HostConfig() + { + Runtime = Strings.RuntimeNvidia, + Mounts = volumeMounts, + } + }; + + return parameters; + } + + private async Task> SetupInputs(CancellationToken cancellationToken = default) + { + var volumeMounts = new List(); + + if (Event.Inputs.Count == 0) + { + _logger.NoInputVolumesConfigured(); + return volumeMounts; + } + + var storageService = _scope.ServiceProvider.GetService() ?? throw new ServiceNotFoundException(nameof(IStorageService)); + + // Container Path of the Input Directory. + var containerPath = Path.Combine(Event.TaskPluginArguments[Keys.TemporaryStorageContainerPath], Event.ExecutionId, "inputs"); + // Host Path of the Input Directory. + var hostPath = Path.Combine(_hostTemporaryStoragePath, Event.ExecutionId, "inputs"); + + foreach (var input in Event.Inputs) + { + var objects = await storageService.ListObjectsAsync(input.Bucket, input.RelativeRootPath, true, cancellationToken).ConfigureAwait(false); + if (objects.Count == 0) + { + _logger.NoFilesFoundIn(input.Bucket, input.RelativeRootPath); + continue; + } + + var inputDirName = input.Name; + + // Host Path of the Directory for this Input File. + // /id/ + var inputHostDirRoot = Path.Combine(hostPath, inputDirName); + var inputContainerDirRoot = Path.Combine(containerPath, inputDirName); + + // eg: /monai/input + var volumeMount = new ContainerVolumeMount(input, Event.TaskPluginArguments[input.Name], inputHostDirRoot, inputContainerDirRoot); + volumeMounts.Add(volumeMount); + + // For each file, download from bucket and store in Task Manager Container. + foreach (var obj in objects) + { + // Task Manager Container Path of the Input File. + var filePath = Path.Combine(inputContainerDirRoot, obj.FilePath.Replace(input.RelativeRootPath, "").TrimStart('/')); + + // Task Manager Container Path of the Directory for this Input File. + var fileDirectory = Path.GetDirectoryName(filePath); + Directory.CreateDirectory(fileDirectory!); + + _logger.DownloadingArtifactFromStorageService(obj.Filename, filePath); + using var stream = await storageService.GetObjectAsync(input.Bucket, obj.FilePath, cancellationToken).ConfigureAwait(false) as MemoryStream; + using var fileStream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write); + stream!.WriteTo(fileStream); + } + } + + return volumeMounts; + } + + private ContainerVolumeMount SetupIntermediateVolume() + { + if (Event.TaskPluginArguments.ContainsKey(Keys.WorkingDirectory)) + { + var containerPath = Path.Combine(Event.TaskPluginArguments[Keys.TemporaryStorageContainerPath], Event.ExecutionId, "temp"); + var hostPath = Path.Combine(_hostTemporaryStoragePath, Event.ExecutionId, "temp"); + + Directory.CreateDirectory(containerPath); + + return new ContainerVolumeMount(Event.IntermediateStorage, Event.TaskPluginArguments[Keys.WorkingDirectory], hostPath, containerPath); + } + + return default!; + } + + private List SetupOutputs() + { + var volumeMounts = new List(); + + if (Event.Outputs.Count == 0) + { + _logger.NoOutputVolumesConfigured(); + return volumeMounts; + } + + // Container Path of the Output Directory. + var containerRootPath = Path.Combine(Event.TaskPluginArguments[Keys.TemporaryStorageContainerPath], Event.ExecutionId, "outputs"); + + // Host Path of the Output Directory. + var hostRootPath = Path.Combine(_hostTemporaryStoragePath, Event.ExecutionId, "outputs"); + + foreach (var output in Event.Outputs) + { + var hostPath = Path.Combine(hostRootPath, output.Name); + var containerPath = Path.Combine(containerRootPath, output.Name); + Directory.CreateDirectory(containerPath); + + volumeMounts.Add(new ContainerVolumeMount(output, Event.TaskPluginArguments[output.Name], hostPath, containerPath)); + } + + return volumeMounts; + } + + protected override void Dispose(bool disposing) + { + if (!DisposedValue && disposing) + { + _scope.Dispose(); + } + + base.Dispose(disposing); + } + } +} diff --git a/src/TaskManager/Plug-ins/Docker/IDockerClientFactory.cs b/src/TaskManager/Plug-ins/Docker/IDockerClientFactory.cs new file mode 100644 index 000000000..4fd66a521 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/IDockerClientFactory.cs @@ -0,0 +1,33 @@ +/* + * 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 Docker.DotNet; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + public interface IDockerClientFactory + { + IDockerClient CreateClient(Uri dockerEndpoint); + } + + public class DockerClientFactory : IDockerClientFactory + { + public IDockerClient CreateClient(Uri dockerEndpoint) + { + return new DockerClientConfiguration(dockerEndpoint).CreateClient(); + } + } +} diff --git a/src/TaskManager/Plug-ins/Docker/Keys.cs b/src/TaskManager/Plug-ins/Docker/Keys.cs new file mode 100644 index 000000000..14f3652ed --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/Keys.cs @@ -0,0 +1,73 @@ +/* + * 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. + */ + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + internal static class Keys + { + /// + /// Key for the endpoint where the Docker server is running. + /// + public static readonly string BaseUrl = "server_url"; + + /// + /// Key for the image of the container to deploy the MAP. + /// + public static readonly string ContainerImage = "container_image"; + + /// + /// Key for the entrypoint to the container. + /// + public static readonly string EntryPoint = "entrypoint"; + + /// + /// Key for the command to execute by the container. + /// + public static readonly string Command = "command"; + + /// + /// Key for task timeout value. + /// + public static readonly string TaskTimeoutMinutes = "task_timeout_minutes"; + + /// + /// Key for priority classnames on task plugin arguments side + /// + public static readonly string TemporaryStorageContainerPath = "temp_storage_container_path"; + + /// + /// Prefix for envrionment variables. + /// + public static readonly string EnvironmentVariableKeyPrefix = "env_"; + + /// + /// Key to the intermediate volume map path. + /// + public static readonly string WorkingDirectory = "env_MONAI_WORKDIR"; + + /// + /// Required arguments to run the Docker workflow. + /// + public static readonly IReadOnlyList RequiredParameters = + new List { + BaseUrl, + EntryPoint, + Command, + ContainerImage, + TemporaryStorageContainerPath + }; + } +} diff --git a/src/TaskManager/Plug-ins/Docker/Logging/Log.cs b/src/TaskManager/Plug-ins/Docker/Logging/Log.cs new file mode 100644 index 000000000..66ce7ee6e --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/Logging/Log.cs @@ -0,0 +1,104 @@ +/* + * 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 Microsoft.Extensions.Logging; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker.Logging +{ + public static partial class Log + { + [LoggerMessage(EventId = 1000, Level = LogLevel.Information, Message = "Docker plugin initialized: base URL={baseUrl}, timeout={timeoutMinutes} minutes.")] + public static partial void Initialized(this ILogger logger, string baseUrl, double timeoutMinutes); + + [LoggerMessage(EventId = 1001, Level = LogLevel.Error, Message = "Error generating Container Specification.")] + public static partial void ErrorGeneratingContainerSpecification(this ILogger logger, Exception ex); + + [LoggerMessage(EventId = 1002, Level = LogLevel.Error, Message = "Error deploying Container.")] + public static partial void ErrorDeployingContainer(this ILogger logger, Exception ex); + + [LoggerMessage(EventId = 1003, Level = LogLevel.Information, Message = "Docker container created: container Id={containerId}.")] + public static partial void CreatedContainer(this ILogger logger, string containerId); + + [LoggerMessage(EventId = 1004, Level = LogLevel.Information, Message = "Docker container started: container Id={containerId}.")] + public static partial void StartedContainer(this ILogger logger, string containerId); + + [LoggerMessage(EventId = 1005, Level = LogLevel.Information, Message = "Docker container terminated: container Id={containerId}.")] + public static partial void TerminatedContainer(this ILogger logger, string containerId); + + [LoggerMessage(EventId = 1006, Level = LogLevel.Information, Message = "Input volume mapping host=={hostPath}, container={containerPath}.")] + public static partial void DockerInputMapped(this ILogger logger, string hostPath, string containerPath); + + [LoggerMessage(EventId = 1007, Level = LogLevel.Information, Message = "Output volume mapping host=={hostPath}, container={containerPath}.")] + public static partial void DockerOutputMapped(this ILogger logger, string hostPath, string containerPath); + + [LoggerMessage(EventId = 1008, Level = LogLevel.Information, Message = "Environment variabled added {key}={value}.")] + public static partial void DockerEnvironmentVariableAdded(this ILogger logger, string key, string value); + + [LoggerMessage(EventId = 1009, Level = LogLevel.Error, Message = "Error retreiving status from container {identity}.")] + public static partial void ErrorGettingStatusFromDocker(this ILogger logger, string identity, Exception ex); + + [LoggerMessage(EventId = 1010, Level = LogLevel.Debug, Message = "Downloading artifact {source} to {target}.")] + public static partial void DownloadingArtifactFromStorageService(this ILogger logger, string source, string target); + + [LoggerMessage(EventId = 1011, Level = LogLevel.Warning, Message = "No input volumes configured for the task.")] + public static partial void NoInputVolumesConfigured(this ILogger logger); + + [LoggerMessage(EventId = 1012, Level = LogLevel.Warning, Message = "No files found in bucket {bucket} - {path}.")] + public static partial void NoFilesFoundIn(this ILogger logger, string bucket, string path); + + [LoggerMessage(EventId = 1013, Level = LogLevel.Warning, Message = "No output volumes configured for the task.")] + public static partial void NoOutputVolumesConfigured(this ILogger logger); + + [LoggerMessage(EventId = 10014, Level = LogLevel.Information, Message = "Intermediate volume mapping host=={hostPath}, container={containerPath}.")] + public static partial void DockerIntermediateVolumeMapped(this ILogger logger, string hostPath, string containerPath); + + [LoggerMessage(EventId = 1015, Level = LogLevel.Error, Message = "Error generating volume mounts.")] + public static partial void ErrorGeneratingVolumeMounts(this ILogger logger, Exception exception); + + [LoggerMessage(EventId = 1016, Level = LogLevel.Error, Message = "Error uploading file {file}.")] + public static partial void ErrorUploadingFile(this ILogger logger, string file, Exception exception); + + [LoggerMessage(EventId = 1017, Level = LogLevel.Debug, Message = "Uploading {source} to {bucket} - {destination}")] + public static partial void UploadingFile(this ILogger logger, string source, string bucket, string destination); + + [LoggerMessage(EventId = 1018, Level = LogLevel.Information, Message = "Sending task callback event for completed container {containerId}.")] + public static partial void SendingCallbackMessage(this ILogger logger, string containerId); + + [LoggerMessage(EventId = 1019, Level = LogLevel.Error, Message = "Error monitoring container {containerId}.")] + public static partial void ErrorMonitoringContainerStatus(this ILogger logger, string containerId, Exception ex); + + [LoggerMessage(EventId = 1020, Level = LogLevel.Warning, Message = "Timeout waiting for container to complete {containerId}.")] + public static partial void TimedOutMonitoringContainerStatus(this ILogger logger, string containerId); + + [LoggerMessage(EventId = 1021, Level = LogLevel.Warning, Message = "No files found in {artifactsPath} for upload.")] + public static partial void NoFilesFoundForUpload(this ILogger logger, string artifactsPath); + + [LoggerMessage(EventId = 1022, Level = LogLevel.Debug, Message = "Content type set to {contentType} for {filename}.")] + public static partial void ContentTypeForFile(this ILogger logger, string filename, string contentType); + + [LoggerMessage(EventId = 1023, Level = LogLevel.Error, Message = "Error pulling container image {image}.")] + public static partial void ErrorPullingContainerImage(this ILogger logger, string image, Exception ex); + + [LoggerMessage(EventId = 1024, Level = LogLevel.Error, Message = "Error starting container monitoring for container {container}.")] + public static partial void ErrorLaunchingContainerMonitor(this ILogger logger, string container, Exception ex); + + [LoggerMessage(EventId = 1025, Level = LogLevel.Warning, Message = "Container '{container}' created with warnings: {warnings}.")] + public static partial void ContainerCreatedWithWarnings(this ILogger logger, string container, string warnings); + + [LoggerMessage(EventId = 1026, Level = LogLevel.Error, Message = "Error terminating container '{container}'.")] + public static partial void ErrorTerminatingContainer(this ILogger logger, string container, Exception ex); + } +} diff --git a/src/TaskManager/Plug-ins/Docker/Monai.Deploy.WorkflowManager.TaskManager.Docker.csproj b/src/TaskManager/Plug-ins/Docker/Monai.Deploy.WorkflowManager.TaskManager.Docker.csproj new file mode 100644 index 000000000..fbf6b8547 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/Monai.Deploy.WorkflowManager.TaskManager.Docker.csproj @@ -0,0 +1,40 @@ + + + + + + net6.0 + enable + enable + ..\..\..\.sonarlint\project-monai_monai-deploy-workflow-managercsharp.ruleset + + + + + + + + + + + + + + + + + diff --git a/src/TaskManager/Plug-ins/Docker/Strings.cs b/src/TaskManager/Plug-ins/Docker/Strings.cs new file mode 100644 index 000000000..9a67ec631 --- /dev/null +++ b/src/TaskManager/Plug-ins/Docker/Strings.cs @@ -0,0 +1,42 @@ +/* + * 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.Specialized; + +namespace Monai.Deploy.WorkflowManager.TaskManager.Docker +{ + internal static class Strings + { + public const string ApplicationId = "Docker"; + public const string HostTemporaryStorageEnvironmentVariableName = "HOST_TEMP_STORAGE"; + public static readonly string RuntimeNvidia = "nvidia"; + + public const string DockerStatusCreated = "created"; + public const string DockerStatusRunning = "running"; + public const string DockerStatusPaused = "paused"; + public const string DockerStatusRestarting = "restarting"; + public const string DockerStatusRemoving = "removing"; + public const string DockerStatusExited = "exited"; + public const string DockerStatusDead = "dead"; + + public static readonly List DockerEndStates = new() { DockerStatusExited, DockerStatusDead }; + + public const string MimeTypeDicom = "application/dicom"; + public const string MimeTypeUnknown = "application/unknown"; + + public const string FileExtensionDicom = ".dcm"; + } +} diff --git a/src/TaskManager/Plug-ins/TestPlugin/Monai.Deploy.WorkflowManager.TaskManager.TestPlugin.csproj b/src/TaskManager/Plug-ins/TestPlugin/Monai.Deploy.WorkflowManager.TaskManager.TestPlugin.csproj index 4cd61708f..72e815379 100644 --- a/src/TaskManager/Plug-ins/TestPlugin/Monai.Deploy.WorkflowManager.TaskManager.TestPlugin.csproj +++ b/src/TaskManager/Plug-ins/TestPlugin/Monai.Deploy.WorkflowManager.TaskManager.TestPlugin.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/TaskManager/TaskManager/Extensions/TaskManagerExtensions.cs b/src/TaskManager/TaskManager/Extensions/TaskManagerExtensions.cs index 3d1a4395a..0e1597d91 100644 --- a/src/TaskManager/TaskManager/Extensions/TaskManagerExtensions.cs +++ b/src/TaskManager/TaskManager/Extensions/TaskManagerExtensions.cs @@ -19,6 +19,7 @@ using Microsoft.Extensions.Hosting; using Monai.Deploy.TaskManager.API; using Monai.Deploy.WorkflowManager.TaskManager.Argo; +using Monai.Deploy.WorkflowManager.TaskManager.Docker; using Monai.Deploy.WorkflowManager.TaskManager.Services; namespace Monai.Deploy.WorkflowManager.TaskManager.Extensions @@ -38,8 +39,13 @@ public static IServiceCollection AddTaskManager(this IServiceCollection services { Guard.Against.Null(hostContext, nameof(hostContext)); + // TODO: the plug-in dependencies need to be injected dynamically similar to how storage lib is loaded services.AddSingleton(); services.AddSingleton(); + + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddSingleton(); diff --git a/src/TaskManager/TaskManager/Monai.Deploy.WorkflowManager.TaskManager.csproj b/src/TaskManager/TaskManager/Monai.Deploy.WorkflowManager.TaskManager.csproj index 3fd9a2d1e..5f4427591 100644 --- a/src/TaskManager/TaskManager/Monai.Deploy.WorkflowManager.TaskManager.csproj +++ b/src/TaskManager/TaskManager/Monai.Deploy.WorkflowManager.TaskManager.csproj @@ -25,6 +25,10 @@ false + + + + @@ -43,8 +47,8 @@ - - + + @@ -54,9 +58,9 @@ - + - + @@ -64,6 +68,7 @@ + diff --git a/src/TaskManager/TaskManager/PluginStrings.cs b/src/TaskManager/TaskManager/PluginStrings.cs index 0eb898862..712641b5c 100644 --- a/src/TaskManager/TaskManager/PluginStrings.cs +++ b/src/TaskManager/TaskManager/PluginStrings.cs @@ -20,5 +20,9 @@ public static class PluginStrings { // note not to be confused with the ApplicationId Monai.Deploy.WorkflowManager.TaskManager.Argo public const string Argo = "argo"; + + public const string Docker = "docker"; + + public static readonly IReadOnlyList PlugsRequiresPermanentAccoutns = new List() { Argo, Docker }; } } diff --git a/src/TaskManager/TaskManager/Program.cs b/src/TaskManager/TaskManager/Program.cs index 5c4e0dc06..55fc2b4f4 100644 --- a/src/TaskManager/TaskManager/Program.cs +++ b/src/TaskManager/TaskManager/Program.cs @@ -15,6 +15,7 @@ */ using System.IO.Abstractions; +using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -85,6 +86,8 @@ private static void ConfigureServices(HostBuilderContext hostContext, IServiceCo services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTaskManager(hostContext); } } diff --git a/src/TaskManager/TaskManager/TaskManager.cs b/src/TaskManager/TaskManager/TaskManager.cs index 5d18b0ecd..ff23713cd 100644 --- a/src/TaskManager/TaskManager/TaskManager.cs +++ b/src/TaskManager/TaskManager/TaskManager.cs @@ -26,10 +26,10 @@ using Monai.Deploy.Storage.API; using Monai.Deploy.Storage.S3Policy.Policies; using Monai.Deploy.TaskManager.API; -using Monai.Deploy.WorkflowManager.TaskManager.API; -using Monai.Deploy.WorkflowManager.TaskManager.API.Models; using Monai.Deploy.WorkflowManager.Configuration; +using Monai.Deploy.WorkflowManager.TaskManager.API; using Monai.Deploy.WorkflowManager.TaskManager.API.Extensions; +using Monai.Deploy.WorkflowManager.TaskManager.API.Models; using Monai.Deploy.WorkflowManager.TaskManager.Logging; namespace Monai.Deploy.WorkflowManager.TaskManager @@ -341,9 +341,9 @@ private async Task HandleDispatchTask(JsonMessage message) try { - if (string.Equals(message.Body.TaskPluginType, - PluginStrings.Argo, - StringComparison.InvariantCultureIgnoreCase)) + if (PluginStrings.PlugsRequiresPermanentAccoutns.Contains( + message.Body.TaskPluginType, + StringComparer.InvariantCultureIgnoreCase)) { eventInfo.AddUserAccount(await AddCredentialsToPlugin(message).ConfigureAwait(false)); } diff --git a/src/TaskManager/TaskManager/appsettings.Development.json b/src/TaskManager/TaskManager/appsettings.Development.json index a99041dfd..e8a31ff72 100644 --- a/src/TaskManager/TaskManager/appsettings.Development.json +++ b/src/TaskManager/TaskManager/appsettings.Development.json @@ -125,4 +125,4 @@ } }, "AllowedHosts": "*" -} +} \ No newline at end of file diff --git a/src/TaskManager/TaskManager/appsettings.json b/src/TaskManager/TaskManager/appsettings.json index 002998540..cf23d16be 100644 --- a/src/TaskManager/TaskManager/appsettings.json +++ b/src/TaskManager/TaskManager/appsettings.json @@ -17,6 +17,7 @@ "taskTimeoutMinutes": 60, "plug-ins": { "argo": "Monai.Deploy.WorkflowManager.TaskManager.Argo.ArgoPlugin, Monai.Deploy.WorkflowManager.TaskManager.Argo", + "docker": "Monai.Deploy.WorkflowManager.TaskManager.Docker.DockerPlugin, Monai.Deploy.WorkflowManager.TaskManager.Docker", "aide_clinical_review": "Monai.Deploy.WorkflowManager.TaskManager.AideClinicalReview.AideClinicalReviewPlugin, Monai.Deploy.WorkflowManager.TaskManager.AideClinicalReview", "test": "Monai.Deploy.WorkflowManager.TaskManager.TestPlugin.TestPlugin, Monai.Deploy.WorkflowManager.TaskManager.TestPlugin" }, @@ -116,4 +117,4 @@ ] } } -} +} \ No newline at end of file diff --git a/src/TaskManager/TaskManager/packages.lock.json b/src/TaskManager/TaskManager/packages.lock.json index 3c621edbc..e2e1249d2 100644 --- a/src/TaskManager/TaskManager/packages.lock.json +++ b/src/TaskManager/TaskManager/packages.lock.json @@ -82,26 +82,27 @@ }, "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Messaging.RabbitMQ": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "IIzty1xAAn3pTSK9VPI5o22nZDGyPyKWNiGstC4bkzIHdxghPEX/ErR7IVkClxCc9kK8X+4sReGFksdGKShQnw==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "sbHA1Rt+O2SuucQOULq/SCUEFq46fUIDFtllxBL94wZSNMf7nioPRVi+kU6j6JrUBqWT+F1A/qUxwvANbrkHNQ==", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012" + "Monai.Deploy.Messaging": "0.1.6-rc0001" } }, "Monai.Deploy.Storage": { @@ -180,6 +181,16 @@ "Microsoft.Win32.Registry": "5.0.0" } }, + "Docker.DotNet": { + "type": "Transitive", + "resolved": "3.125.10", + "contentHash": "sKu8AFiRPao1IqYPUT2mAxT0c7F+dgEfOonuVfgn5FYdHccHdL9Ge4Jsem0KHlxYzqE6QpOFDt1hR/J1XzqogQ==", + "dependencies": { + "Newtonsoft.Json": "13.0.1", + "System.Buffers": "4.5.1", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Fractions": { "type": "Transitive", "resolved": "7.0.0", @@ -1243,45 +1254,53 @@ "monai.deploy.workflowmanager.configuration": { "type": "Project", "dependencies": { - "Karambolo.Extensions.Logging.File": "3.3.1", - "Microsoft.Extensions.Configuration": "6.0.1", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Newtonsoft.Json": "13.0.1", - "System.IO.Abstractions": "17.1.1" + "Karambolo.Extensions.Logging.File": "[3.3.1, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Newtonsoft.Json": "[13.0.1, )", + "System.IO.Abstractions": "[17.1.1, )" } }, "monai.deploy.workflowmanager.taskmanager.api": { "type": "Project", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "MongoDB.Bson": "2.17.1" + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "MongoDB.Bson": "[2.17.1, )" } }, "monai.deploy.workflowmanager.taskmanager.argo": { "type": "Project", "dependencies": { - "IdentityModel.OidcClient": "5.0.2", - "KubernetesClient": "7.2.19", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Configuration": "1.0.0", - "Monai.Deploy.WorkflowManager.TaskManager.API": "1.0.0", - "Newtonsoft.Json": "13.0.1" + "IdentityModel.OidcClient": "[5.0.2, )", + "KubernetesClient": "[7.2.19, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Configuration": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.TaskManager.API": "[1.0.0, )", + "Newtonsoft.Json": "[13.0.1, )" } }, "monai.deploy.workflowmanager.taskmanager.database": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.Logging.Abstractions": "6.0.1", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.WorkflowManager.TaskManager.API": "1.0.0", - "MongoDB.Bson": "2.17.1", - "MongoDB.Driver": "2.17.1" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.WorkflowManager.TaskManager.API": "[1.0.0, )", + "MongoDB.Bson": "[2.17.1, )", + "MongoDB.Driver": "[2.17.1, )" + } + }, + "monai.deploy.workflowmanager.taskmanager.docker": { + "type": "Project", + "dependencies": { + "Docker.DotNet": "[3.125.10, )", + "Monai.Deploy.WorkflowManager.Configuration": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.TaskManager.API": "[1.0.0, )" } } } diff --git a/src/WorkflowManager/ConditionsResolver/Monai.Deploy.WorkflowManager.ConditionsResolver.csproj b/src/WorkflowManager/ConditionsResolver/Monai.Deploy.WorkflowManager.ConditionsResolver.csproj index 48d664a42..f5324de01 100644 --- a/src/WorkflowManager/ConditionsResolver/Monai.Deploy.WorkflowManager.ConditionsResolver.csproj +++ b/src/WorkflowManager/ConditionsResolver/Monai.Deploy.WorkflowManager.ConditionsResolver.csproj @@ -1,45 +1,45 @@ - - - - - - net6.0 - enable - enable - ..\..\.sonarlint\project-monai_monai-deploy-workflow-managercsharp.ruleset - - - - - - + + + + + + net6.0 + enable + enable + ..\..\.sonarlint\project-monai_monai-deploy-workflow-managercsharp.ruleset + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/WorkflowManager/ConditionsResolver/packages.lock.json b/src/WorkflowManager/ConditionsResolver/packages.lock.json new file mode 100644 index 000000000..98693857a --- /dev/null +++ b/src/WorkflowManager/ConditionsResolver/packages.lock.json @@ -0,0 +1,893 @@ +{ + "version": 1, + "dependencies": { + "net6.0": { + "Ardalis.GuardClauses": { + "type": "Direct", + "requested": "[4.0.1, )", + "resolved": "4.0.1", + "contentHash": "RemnImQf/BWR8oYqFpdw+hn+b4Q1w+pGujkRiSfjQhMPuiERwGn4UMmQv+6UDE4qbPlnIN+e3e40JkvBhzgfzg==", + "dependencies": { + "JetBrains.Annotations": "2021.3.0" + } + }, + "AWSSDK.Core": { + "type": "Transitive", + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" + }, + "AWSSDK.SecurityToken": { + "type": "Transitive", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", + "dependencies": { + "AWSSDK.Core": "[3.7.12.29, 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" + } + }, + "JetBrains.Annotations": { + "type": "Transitive", + "resolved": "2021.3.0", + "contentHash": "Ddxjs5RRjf+c8m9m++WvhW1lz1bqNhsTjWvCLbQN9bvKbkJeR9MhtfNwKgBRRdG2yLHcXFr5Lf7fsvvkiPaDRg==" + }, + "Microsoft.AspNetCore.Authentication.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "VloMLDJMf3n/9ic5lCBOa42IBYJgyB1JhzLsL68Zqg+2bEPWfGBj/xCJy/LrKTArN0coOcZp3wyVTZlx0y9pHQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authentication.Core": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "XlVJzJ5wPOYW+Y0J6Q/LVTEyfS4ssLXmt60T0SPP+D8abVhBTl+cgw2gDHlyKYIkcJg7btMVh383NDkMVqD/fg==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Http": "2.2.0", + "Microsoft.AspNetCore.Http.Extensions": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authorization": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "/L0W8H3jMYWyaeA9gBJqS/tSWBegP9aaTM0mjRhxTttBY9z4RVDRYJ2CwPAmAXIuPr3r1sOw+CS8jFVRGHRezQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authorization.Policy": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "aJCo6niDRKuNg2uS2WMEmhJTooQUGARhV2ENQ2tO5443zVHUo19MSgrgGo9FIrfD+4yKPF8Q+FF33WkWfPbyKw==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Authorization": "2.2.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": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "YogBSMotWPAS/X5967pZ+yyWPQkThxhmzAwyCHCSSldzYBkW5W5d6oPfBaPqQOnSHYTpSOSOkpZoAce0vwb6+A==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.AspNetCore.WebUtilities": "2.2.0", + "Microsoft.Extensions.ObjectPool": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0", + "Microsoft.Net.Http.Headers": "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.Extensions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Buffers": "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.AspNetCore.Mvc.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "ET6uZpfVbGR1NjCuLaLy197cQ3qZUjzl7EG5SL4GfJH/c9KRE89MMBrQegqWsh0w1iRUB/zQaK0anAjxa/pz4g==", + "dependencies": { + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0" + } + }, + "Microsoft.AspNetCore.Mvc.Core": { + "type": "Transitive", + "resolved": "2.2.5", + "contentHash": "/8sr8ixIUD57UFwUntha9bOwex7/AkZfdk1f9oNJG1Ek7p/uuKVa7fuHmYZpQOf35Oxrt+2Ku4WPwMSbNxOuWg==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Core": "2.2.0", + "Microsoft.AspNetCore.Authorization.Policy": "2.2.0", + "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Http": "2.2.0", + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.AspNetCore.Mvc.Abstractions": "2.2.0", + "Microsoft.AspNetCore.ResponseCaching.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Routing": "2.2.0", + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection": "2.2.0", + "Microsoft.Extensions.DependencyModel": "2.1.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "System.Diagnostics.DiagnosticSource": "4.5.0", + "System.Threading.Tasks.Extensions": "4.5.1" + } + }, + "Microsoft.AspNetCore.ResponseCaching.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "CIHWEKrHzZfFp7t57UXsueiSA/raku56TgRYauV/W1+KAQq6vevz60zjEKaazt3BI76zwMz3B4jGWnCwd8kwQw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.AspNetCore.Routing": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "jAhDBy0wryOnMhhZTtT9z63gJbvCzFuLm8yC6pHzuVu9ZD1dzg0ltxIwT4cfwuNkIL/TixdKsm3vpVOpG8euWQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.ObjectPool": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Routing.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "lRRaPN7jDlUCVCp9i0W+PB0trFaKB0bgMJD7hEJS9Uo4R9MXaMC8X2tJhPLmeVE3SGDdYI4QNKdVmhNvMJGgPQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0" + } + }, + "Microsoft.AspNetCore.WebUtilities": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==", + "dependencies": { + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Text.Encodings.Web": "4.5.0" + } + }, + "Microsoft.DotNet.PlatformAbstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "9KPDwvb/hLEVXYruVHVZ8BkebC8j17DmPb56LnqRF74HqSPLjCkrlFUjOtFpQPA2DeADBRTI/e69aCfRBfrhxw==", + "dependencies": { + "System.AppContext": "4.1.0", + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.0.0" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "BUyFU9t+HzlSE7ri4B+AQN2BgTgHv/uM82s5ZkgU1BApyzWzIl48nDsG5wR1t0pniNuuyTBzG3qCW8152/NtSw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.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.DependencyInjection": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "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.DependencyModel": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "nS2XKqi+1A1umnYNLX2Fbm/XnzCxs5i+zXVJ3VC6r9t2z0NZr9FLnJN4VQpKigdcWH/iFTbMuX6M6WQJcTjVIg==", + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "2.1.0", + "Newtonsoft.Json": "9.0.1", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Linq": "4.1.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "xRbKuDnoKClu/lC3fCqF5f0UqEqVI8iYJ0RN4XpUHajvcfCWYcFC46NEzaUg2Fub7hznTG9m6XNScrVHl1iaSA==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "8mNPugigemlybm8f+KcwB5FOEyJ8mZ72stKvOJJqpUFYjfTjFDKFKYB2L98gru1SaxVD9akjw8OyvtbWkAEimQ==" + }, + "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.1", + "contentHash": "dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==" + }, + "Microsoft.Extensions.ObjectPool": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g==" + }, + "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.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Net.Http.Headers": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0", + "System.Buffers": "4.5.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==" + }, + "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.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Newtonsoft.Json": "13.0.1", + "RabbitMQ.Client": "6.4.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.IO.Abstractions": "17.1.1" + } + }, + "Monai.Deploy.Storage": { + "type": "Transitive", + "resolved": "0.2.5", + "contentHash": "EkctSwMUPm+omInxEGAbPPXz6dyd8nY4BAzrdGKt9MHsL1OesFXsgUXsmlCx+ltauohiiTSfjgd9eeVkUUD8MA==", + "dependencies": { + "AWSSDK.SecurityToken": "3.7.1.190", + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Monai.Deploy.Storage.S3Policy": "0.2.5", + "System.IO.Abstractions": "17.1.1" + } + }, + "Monai.Deploy.Storage.S3Policy": { + "type": "Transitive", + "resolved": "0.2.5", + "contentHash": "wtvoeDf7MsuUE48Sggs6FYNOkLFUfQ5mPZer75jb63b9SKQjK2S34IdS8SnHVovNes1xhWInTB9YT2HUNgtzig==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Newtonsoft.Json": "13.0.1" + } + }, + "MongoDB.Bson": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "IBr5w6ygeUCTobiS4J2UlYeIsnjSJvOOf31g60EkRa3NIeyrYs7Y51HeOvJ8r6NPcKv1hLj8xwoop6hDTetAdA==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + } + }, + "MongoDB.Driver": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "A5Yvm3RUdkSYnvKWVb/bZfvhzG+L+t0n80JuUXf0p2QG1TbtqHE9hX/FBK+BoF7sw9rzUTw8VHYeqX5rT0rxdA==", + "dependencies": { + "MongoDB.Bson": "2.17.1", + "MongoDB.Driver.Core": "2.17.1", + "MongoDB.Libmongocrypt": "1.5.5" + } + }, + "MongoDB.Driver.Core": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "lfuuQvCXcco6mG096PL8xRO+dBdHsDTR3DiYfK/ICHgFlL5RfKlBuE0xClEGKtaZ4Spe28/fF/GUcrrA/yfoAQ==", + "dependencies": { + "DnsClient": "1.6.1", + "MongoDB.Bson": "2.17.1", + "MongoDB.Libmongocrypt": "1.5.5", + "SharpCompress": "0.30.1", + "System.Buffers": "4.5.1" + } + }, + "MongoDB.Libmongocrypt": { + "type": "Transitive", + "resolved": "1.5.5", + "contentHash": "0DV4l2PjXirSJHD/b+LpOK3IfUDvkbpvvZBM2w1aYL6E/4vbhfyr/FP5laDNx2zRylqN1hIZO+EL7NgO/5GpVg==" + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "RabbitMQ.Client": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "1znR1gGU+xYVSpO5z8nQolcUKA/yydnxQn7Ug9+RUXxTSLMm/eE58VKGwahPBjELXvDnX0k/kBrAitFLRjx9LA==", + "dependencies": { + "System.Memory": "4.5.4", + "System.Threading.Channels": "4.7.1" + } + }, + "runtime.native.System": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "QfS/nQI7k/BLgmLrw7qm7YBoULEvgWnPI+cYsbfCVFTW8Aj+i8JhccxcFMu1RWms0YZzF+UHguNBK4Qn89e2Sg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + } + }, + "SharpCompress": { + "type": "Transitive", + "resolved": "0.30.1", + "contentHash": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==" + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "3QjO4jNV7PdKkmQAVp9atA+usVnKRwI3Kx1nMwJ93T0LcQfx7pKAYk0nKz5wn1oP5iqlhZuy6RXOFdhr7rDwow==", + "dependencies": { + "System.Runtime": "4.1.0" + } + }, + "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.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, + "System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Dynamic.Runtime": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "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.Globalization": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==", + "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.Threading.Tasks": "4.0.11" + } + }, + "System.IO.Abstractions": { + "type": "Transitive", + "resolved": "17.1.1", + "contentHash": "LWOM12Bd0kp/gaH4g1o/O2/6JDcHF/fuctF1IqDZt0aAqU2BwGiMihi9Cdcm5jJz8La1wFWbRPuRui8WeX6m8w==" + }, + "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.Linq": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + } + }, + "System.Linq.Expressions": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Emit.Lightweight": "4.0.1", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "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.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, + "System.ObjectModel": { + "type": "Transitive", + "resolved": "4.0.12", + "contentHash": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Emit": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==", + "dependencies": { + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Primitives": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Globalization": "4.0.11", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.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.Runtime.InteropServices.RuntimeInformation": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "hWPhJxc453RCa8Z29O91EmfGeZIHX1ZH2A8L6lYQVSaKzku2DfArSfMEb1/MYYzPQRJZeu0c9dmYeJKxW5Fgng==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Threading": "4.0.11", + "runtime.native.System": "4.0.0" + } + }, + "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.0.11", + "contentHash": "U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==" + }, + "System.Threading": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "dependencies": { + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + } + }, + "System.Threading.Channels": { + "type": "Transitive", + "resolved": "4.7.1", + "contentHash": "6akRtHK/wab3246t4p5v3HQrtQk8LboOt5T4dtpNgsp3zvDeM4/Gx8V12t0h+c/W9/enUrilk8n6EQqdQorZAA==" + }, + "System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "WSKUTtLhPR8gllzIWO2x6l4lmAIfbyMAiTlyXAis4QBDonXK4b4S6F8zGARX4/P8wH3DH+sLdhamCiHn+fTU1A==" + }, + "monai.deploy.workflowmanager.common": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.DependencyInjection.Abstractions": "[6.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": { + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "MongoDB.Bson": "[2.17.1, )", + "Newtonsoft.Json": "[13.0.1, )" + } + }, + "monai.deploy.workflowmanager.database": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", + "MongoDB.Bson": "[2.17.1, )", + "MongoDB.Driver": "[2.17.1, )" + } + }, + "monai.deploy.workflowmanager.logging": { + "type": "Project", + "dependencies": { + "Microsoft.AspNetCore.Mvc.Core": "[2.2.5, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" + } + }, + "monai.deploy.workflowmanager.storage": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "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/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj b/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj index 85f8ddaf1..8bf1159cb 100644 --- a/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj +++ b/src/WorkflowManager/Contracts/Monai.Deploy.WorkflowManager.Contracts.csproj @@ -27,13 +27,13 @@ - - + + - + diff --git a/src/WorkflowManager/Database/packages.lock.json b/src/WorkflowManager/Database/packages.lock.json index 374d309e4..b644e562b 100644 --- a/src/WorkflowManager/Database/packages.lock.json +++ b/src/WorkflowManager/Database/packages.lock.json @@ -49,15 +49,15 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "AWSSDK.SecurityToken": { "type": "Transitive", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "DnsClient": { @@ -296,23 +296,38 @@ "System.Linq": "4.1.0" } }, + "Microsoft.Extensions.Diagnostics.HealthChecks": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "xRbKuDnoKClu/lC3fCqF5f0UqEqVI8iYJ0RN4XpUHajvcfCWYcFC46NEzaUg2Fub7hznTG9m6XNScrVHl1iaSA==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "8mNPugigemlybm8f+KcwB5FOEyJ8mZ72stKvOJJqpUFYjfTjFDKFKYB2L98gru1SaxVD9akjw8OyvtbWkAEimQ==" + }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "resolved": "6.0.0", + "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==", + "resolved": "6.0.0", + "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", - "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } }, "Microsoft.Extensions.Logging": { @@ -370,16 +385,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "MongoDB.Driver.Core": { @@ -519,8 +535,8 @@ }, "System.IO.Abstractions": { "type": "Transitive", - "resolved": "17.0.18", - "contentHash": "x0iIMdP+PCLIkz8h13xHCecaiysFgHPe9mM3FdyfSmkl5+MtMCmgFFIe38Aibkzd0UAY/OMoXMKGR2RK10rebQ==" + "resolved": "17.1.1", + "contentHash": "LWOM12Bd0kp/gaH4g1o/O2/6JDcHF/fuctF1IqDZt0aAqU2BwGiMihi9Cdcm5jJz8La1wFWbRPuRui8WeX6m8w==" }, "System.IO.FileSystem": { "type": "Transitive", @@ -807,9 +823,9 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "[3.7.1.191, )", + "AWSSDK.SecurityToken": "[3.7.1.193, )", "Microsoft.Extensions.Configuration": "[6.0.1, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "MongoDB.Bson": "[2.17.1, )", "Newtonsoft.Json": "[13.0.1, )" } diff --git a/src/WorkflowManager/Logging/Logging/Log.cs b/src/WorkflowManager/Logging/Logging/Log.cs index 02b4f064e..33862c13b 100644 --- a/src/WorkflowManager/Logging/Logging/Log.cs +++ b/src/WorkflowManager/Logging/Logging/Log.cs @@ -154,7 +154,13 @@ public static void LogControllerEndTime(this ILogger logger, ResultExecutedConte var jsonString = JsonConvert.SerializeObject(objectLog); - logger.LogInformation(29, message: jsonString); + logger.LogInformation(30, message: jsonString); } + + [LoggerMessage(EventId = 31, Level = LogLevel.Warning, Message = "Unable to locate a matching workflow for the given workflow request.")] + public static partial void NoMatchingWorkflowFoundForPayload(this ILogger logger); + + [LoggerMessage(EventId = 32, Level = LogLevel.Debug, Message = "Verifying artifact existence on bucket {bucket}: {artifactKey}={artifactValue}.")] + public static partial void VerifyArtifactExistence(this ILogger logger, string bucket, string artifactKey, string artifactValue); } } diff --git a/src/WorkflowManager/Logging/packages.lock.json b/src/WorkflowManager/Logging/packages.lock.json index 3a9d39658..0ac6abeef 100644 --- a/src/WorkflowManager/Logging/packages.lock.json +++ b/src/WorkflowManager/Logging/packages.lock.json @@ -41,15 +41,15 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "AWSSDK.SecurityToken": { "type": "Transitive", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "JetBrains.Annotations": { @@ -258,23 +258,38 @@ "System.Linq": "4.1.0" } }, + "Microsoft.Extensions.Diagnostics.HealthChecks": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "xRbKuDnoKClu/lC3fCqF5f0UqEqVI8iYJ0RN4XpUHajvcfCWYcFC46NEzaUg2Fub7hznTG9m6XNScrVHl1iaSA==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "8mNPugigemlybm8f+KcwB5FOEyJ8mZ72stKvOJJqpUFYjfTjFDKFKYB2L98gru1SaxVD9akjw8OyvtbWkAEimQ==" + }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "resolved": "6.0.0", + "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==", + "resolved": "6.0.0", + "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", - "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } }, "Microsoft.Extensions.Logging": { @@ -332,16 +347,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "MongoDB.Bson": { @@ -467,8 +483,8 @@ }, "System.IO.Abstractions": { "type": "Transitive", - "resolved": "17.0.18", - "contentHash": "x0iIMdP+PCLIkz8h13xHCecaiysFgHPe9mM3FdyfSmkl5+MtMCmgFFIe38Aibkzd0UAY/OMoXMKGR2RK10rebQ==" + "resolved": "17.1.1", + "contentHash": "LWOM12Bd0kp/gaH4g1o/O2/6JDcHF/fuctF1IqDZt0aAqU2BwGiMihi9Cdcm5jJz8La1wFWbRPuRui8WeX6m8w==" }, "System.IO.FileSystem": { "type": "Transitive", @@ -741,9 +757,9 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "[3.7.1.191, )", + "AWSSDK.SecurityToken": "[3.7.1.193, )", "Microsoft.Extensions.Configuration": "[6.0.1, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "MongoDB.Bson": "[2.17.1, )", "Newtonsoft.Json": "[13.0.1, )" } diff --git a/src/WorkflowManager/PayloadListener/packages.lock.json b/src/WorkflowManager/PayloadListener/packages.lock.json index de9573d6d..ec77ee866 100644 --- a/src/WorkflowManager/PayloadListener/packages.lock.json +++ b/src/WorkflowManager/PayloadListener/packages.lock.json @@ -39,15 +39,15 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "AWSSDK.SecurityToken": { "type": "Transitive", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "DnsClient": { @@ -432,16 +432,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage.S3Policy": { @@ -920,7 +921,7 @@ "Microsoft.Extensions.Configuration": "[6.0.1, )", "Microsoft.Extensions.Logging": "[6.0.0, )", "Microsoft.Extensions.Options": "[6.0.0, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "Monai.Deploy.Storage": "[0.2.5, )", "Newtonsoft.Json": "[13.0.1, )", "System.IO.Abstractions": "[17.1.1, )" @@ -929,9 +930,9 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "[3.7.1.191, )", + "AWSSDK.SecurityToken": "[3.7.1.193, )", "Microsoft.Extensions.Configuration": "[6.0.1, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "MongoDB.Bson": "[2.17.1, )", "Newtonsoft.Json": "[13.0.1, )" } @@ -968,9 +969,9 @@ "monai.deploy.workloadmanager.workfowexecuter": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "[3.7.1.191, )", + "AWSSDK.SecurityToken": "[3.7.1.193, )", "Ardalis.GuardClauses": "[4.0.1, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "Monai.Deploy.Storage": "[0.2.5, )", "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", "Monai.Deploy.WorkflowManager.ConditionsResolver": "[1.0.0, )", diff --git a/src/WorkflowManager/Storage/packages.lock.json b/src/WorkflowManager/Storage/packages.lock.json index 141f744b8..0ed395c1d 100644 --- a/src/WorkflowManager/Storage/packages.lock.json +++ b/src/WorkflowManager/Storage/packages.lock.json @@ -28,15 +28,15 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "AWSSDK.SecurityToken": { "type": "Transitive", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "JetBrains.Annotations": { @@ -361,16 +361,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage.S3Policy": { @@ -779,9 +780,9 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "[3.7.1.191, )", + "AWSSDK.SecurityToken": "[3.7.1.193, )", "Microsoft.Extensions.Configuration": "[6.0.1, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "MongoDB.Bson": "[2.17.1, )", "Newtonsoft.Json": "[13.0.1, )" } diff --git a/src/WorkflowManager/WorkflowExecuter/Common/ArtifactMapper.cs b/src/WorkflowManager/WorkflowExecuter/Common/ArtifactMapper.cs index 2b4fa3de2..294d90b46 100644 --- a/src/WorkflowManager/WorkflowExecuter/Common/ArtifactMapper.cs +++ b/src/WorkflowManager/WorkflowExecuter/Common/ArtifactMapper.cs @@ -15,9 +15,11 @@ */ using Ardalis.GuardClauses; +using Microsoft.Extensions.Logging; using Monai.Deploy.Storage.API; using Monai.Deploy.WorkflowManager.Contracts.Models; using Monai.Deploy.WorkflowManager.Database.Interfaces; +using Monai.Deploy.WorkflowManager.Logging.Logging; namespace Monai.Deploy.WorkflowManager.WorkfowExecuter.Common { @@ -25,14 +27,16 @@ public class ArtifactMapper : IArtifactMapper { private readonly IWorkflowInstanceRepository _workflowInstanceRepository; private readonly IStorageService _storageService; + private readonly ILogger _logger; public ArtifactMapper( IWorkflowInstanceRepository workflowInstanceRepository, - IStorageService storageService - ) + IStorageService storageService, + ILogger logger) { _workflowInstanceRepository = workflowInstanceRepository ?? throw new ArgumentNullException(nameof(workflowInstanceRepository)); _storageService = storageService ?? throw new ArgumentNullException(nameof(storageService)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public async Task> ConvertArtifactVariablesToPath(Artifact[] artifacts, string payloadId, string workflowInstanceId, string bucketId, bool shouldExistYet = true) @@ -137,12 +141,12 @@ private static bool TrimArtifactVariable(string valueString, out string variable var artifactName = variableWords[4]; var outputArtifact = task.OutputArtifacts?.FirstOrDefault(a => a.Key == artifactName); - if (outputArtifact is null) + if (!outputArtifact.HasValue) { return default; } - return await VerifyExists((KeyValuePair)outputArtifact, bucketId, shouldExistYet); + return await VerifyExists(outputArtifact.Value, bucketId, shouldExistYet); } } @@ -158,6 +162,7 @@ private static bool TrimArtifactVariable(string valueString, out string variable if (shouldExistYet) { + _logger.VerifyArtifactExistence(bucketId, artifact.Key, artifact.Value); artifact = await _storageService.VerifyObjectExistsAsync(bucketId, artifact); } diff --git a/src/WorkflowManager/WorkflowExecuter/Monai.Deploy.WorkloadManager.WorkfowExecuter.csproj b/src/WorkflowManager/WorkflowExecuter/Monai.Deploy.WorkloadManager.WorkfowExecuter.csproj index 87289cd15..48c9c944e 100644 --- a/src/WorkflowManager/WorkflowExecuter/Monai.Deploy.WorkloadManager.WorkfowExecuter.csproj +++ b/src/WorkflowManager/WorkflowExecuter/Monai.Deploy.WorkloadManager.WorkfowExecuter.csproj @@ -26,13 +26,13 @@ - - + + - + diff --git a/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs b/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs index 209ff3d93..9c28f5ac5 100644 --- a/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs +++ b/src/WorkflowManager/WorkflowExecuter/Services/WorkflowExecuterService.cs @@ -90,6 +90,7 @@ public async Task ProcessPayload(WorkflowRequestEvent message, Payload pay { Guard.Against.Null(message, nameof(message)); + using var loggerScope = _logger.BeginScope($"Correlation ID={message.CorrelationId}, Payload ID={payload.PayloadId}"); var processed = true; var workflows = new List(); @@ -99,6 +100,7 @@ public async Task ProcessPayload(WorkflowRequestEvent message, Payload pay if (workflows is null || workflows.Any() is false) { + _logger.NoMatchingWorkflowFoundForPayload(); return false; } @@ -124,6 +126,7 @@ public async Task ProcessPayload(WorkflowRequestEvent message, Payload pay if (!processed) { + _logger.LogWarning("!processed"); return false; } diff --git a/src/WorkflowManager/WorkflowExecuter/packages.lock.json b/src/WorkflowManager/WorkflowExecuter/packages.lock.json index 2133608e9..dfa8a3006 100644 --- a/src/WorkflowManager/WorkflowExecuter/packages.lock.json +++ b/src/WorkflowManager/WorkflowExecuter/packages.lock.json @@ -13,26 +13,27 @@ }, "AWSSDK.SecurityToken": { "type": "Direct", - "requested": "[3.7.1.191, )", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "requested": "[3.7.1.193, )", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "Monai.Deploy.Messaging": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { @@ -58,8 +59,8 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "DnsClient": { "type": "Transitive", @@ -922,7 +923,7 @@ "Microsoft.Extensions.Configuration": "[6.0.1, )", "Microsoft.Extensions.Logging": "[6.0.0, )", "Microsoft.Extensions.Options": "[6.0.0, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "Monai.Deploy.Storage": "[0.2.5, )", "Newtonsoft.Json": "[13.0.1, )", "System.IO.Abstractions": "[17.1.1, )" @@ -931,9 +932,9 @@ "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "[3.7.1.191, )", + "AWSSDK.SecurityToken": "[3.7.1.193, )", "Microsoft.Extensions.Configuration": "[6.0.1, )", - "Monai.Deploy.Messaging": "[0.1.3-rc0012, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", "MongoDB.Bson": "[2.17.1, )", "Newtonsoft.Json": "[13.0.1, )" } diff --git a/src/WorkflowManager/WorkflowManager/Monai.Deploy.WorkflowManager.csproj b/src/WorkflowManager/WorkflowManager/Monai.Deploy.WorkflowManager.csproj index ea1c1559b..b2bd136a9 100644 --- a/src/WorkflowManager/WorkflowManager/Monai.Deploy.WorkflowManager.csproj +++ b/src/WorkflowManager/WorkflowManager/Monai.Deploy.WorkflowManager.csproj @@ -31,8 +31,8 @@ - - + + @@ -48,7 +48,7 @@ - + all diff --git a/src/WorkflowManager/WorkflowManager/packages.lock.json b/src/WorkflowManager/WorkflowManager/packages.lock.json index 4d12c26f1..b31627210 100644 --- a/src/WorkflowManager/WorkflowManager/packages.lock.json +++ b/src/WorkflowManager/WorkflowManager/packages.lock.json @@ -138,11 +138,11 @@ }, "Monai.Deploy.Messaging.RabbitMQ": { "type": "Direct", - "requested": "[0.1.3-rc0012, )", - "resolved": "0.1.3-rc0012", - "contentHash": "IIzty1xAAn3pTSK9VPI5o22nZDGyPyKWNiGstC4bkzIHdxghPEX/ErR7IVkClxCc9kK8X+4sReGFksdGKShQnw==", + "requested": "[0.1.6-rc0001, )", + "resolved": "0.1.6-rc0001", + "contentHash": "sbHA1Rt+O2SuucQOULq/SCUEFq46fUIDFtllxBL94wZSNMf7nioPRVi+kU6j6JrUBqWT+F1A/qUxwvANbrkHNQ==", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012" + "Monai.Deploy.Messaging": "0.1.6-rc0001" } }, "Monai.Deploy.Storage.MinIO": { @@ -186,15 +186,15 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "AWSSDK.SecurityToken": { "type": "Transitive", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "Crc32.NET": { @@ -774,16 +774,17 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Storage": { @@ -1663,119 +1664,119 @@ "monai.deploy.workflowmanager.authentication": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.8", - "Monai.Deploy.WorkflowManager.Common": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.8, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )" } }, "monai.deploy.workflowmanager.common": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Database": "1.0.0", - "Monai.Deploy.WorkflowManager.Storage": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.DependencyInjection.Abstractions": "[6.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.conditionsresolver": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "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" + "Ardalis.GuardClauses": "[4.0.1, )", + "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.configuration": { "type": "Project", "dependencies": { - "Karambolo.Extensions.Logging.File": "3.3.1", - "Microsoft.Extensions.Configuration": "6.0.1", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Newtonsoft.Json": "13.0.1", - "System.IO.Abstractions": "17.1.1" + "Karambolo.Extensions.Logging.File": "[3.3.1, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Newtonsoft.Json": "[13.0.1, )", + "System.IO.Abstractions": "[17.1.1, )" } }, "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "3.7.1.191", - "Microsoft.Extensions.Configuration": "6.0.1", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "MongoDB.Bson": "2.17.1", - "Newtonsoft.Json": "13.0.1" + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "MongoDB.Bson": "[2.17.1, )", + "Newtonsoft.Json": "[13.0.1, )" } }, "monai.deploy.workflowmanager.database": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.Logging.Abstractions": "6.0.1", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Logging": "1.0.0", - "MongoDB.Bson": "2.17.1", - "MongoDB.Driver": "2.17.1" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", + "MongoDB.Bson": "[2.17.1, )", + "MongoDB.Driver": "[2.17.1, )" } }, "monai.deploy.workflowmanager.logging": { "type": "Project", "dependencies": { - "Microsoft.AspNetCore.Mvc.Core": "2.2.5", - "Microsoft.Extensions.Logging.Abstractions": "6.0.1", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0" + "Microsoft.AspNetCore.Mvc.Core": "[2.2.5, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" } }, "monai.deploy.workflowmanager.monaibackgroundservice": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Hosting": "6.0.1", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkloadManager.WorkfowExecuter": "1.0.0" + "Microsoft.Extensions.Hosting": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkloadManager.WorkfowExecuter": "[1.0.0, )" } }, "monai.deploy.workflowmanager.payloadlistener": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkflowManager.Configuration": "1.0.0", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Logging": "1.0.0", - "Monai.Deploy.WorkloadManager.WorkfowExecuter": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Hosting.Abstractions": "[6.0.0, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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": { - "Ardalis.GuardClauses": "4.0.1", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Logging": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )" } }, "monai.deploy.workloadmanager.workfowexecuter": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "3.7.1.191", - "Ardalis.GuardClauses": "4.0.1", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkflowManager.ConditionsResolver": "1.0.0", - "Monai.Deploy.WorkflowManager.Configuration": "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", - "Newtonsoft.Json": "13.0.1" + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.ConditionsResolver": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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, )", + "Newtonsoft.Json": "[13.0.1, )" } } } 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 2be6a1171..33a9dfbd5 100644 --- a/tests/IntegrationTests/TaskManager.IntegrationTests/Monai.Deploy.WorkflowManager.TaskManager.IntegrationTests.csproj +++ b/tests/IntegrationTests/TaskManager.IntegrationTests/Monai.Deploy.WorkflowManager.TaskManager.IntegrationTests.csproj @@ -30,7 +30,7 @@ - + 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 2018631b3..d79c36205 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.csproj +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.csproj @@ -39,7 +39,7 @@ - + diff --git a/tests/UnitTests/Database.Tests/packages.lock.json b/tests/UnitTests/Database.Tests/packages.lock.json new file mode 100644 index 000000000..53d6ddce2 --- /dev/null +++ b/tests/UnitTests/Database.Tests/packages.lock.json @@ -0,0 +1,1535 @@ +{ + "version": 1, + "dependencies": { + "net6.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[3.1.2, )", + "resolved": "3.1.2", + "contentHash": "wuLDIDKD5XMt0A7lE31JPenT7QQwZPFkP5rRpdJeblyXZ9MGLI8rYjvm5fvAKln+2/X+4IxxQDxBtwdrqKNLZw==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.3.1, )", + "resolved": "17.3.1", + "contentHash": "jH9W5uYannaJ3HhrPBkzSidf3WkqP6XI+Yke0ODYVuFWM6GLVtBAyNgXvU/uQXPBsHq4aysLTsrN1FvG2hlKoQ==", + "dependencies": { + "Microsoft.CodeCoverage": "17.3.1", + "Microsoft.TestPlatform.TestHost": "17.3.1" + } + }, + "Moq": { + "type": "Direct", + "requested": "[4.18.2, )", + "resolved": "4.18.2", + "contentHash": "SjxKYS5nX6prcaT8ZjbkONh3vnh0Rxru09+gQ1a07v4TM530Oe/jq3Q4dOZPfo1wq0LYmTgLOZKrqRfEx4auPw==", + "dependencies": { + "Castle.Core": "5.1.0" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.4.2, )", + "resolved": "2.4.2", + "contentHash": "6Mj73Ont3zj2CJuoykVJfE0ZmRwn7C+pTuRP8c4bnaaTFjwNG6tGe0prJ1yIbMe9AHrpDys63ctWacSsFJWK/w==", + "dependencies": { + "xunit.analyzers": "1.0.0", + "xunit.assert": "2.4.2", + "xunit.core": "[2.4.2]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[2.4.5, )", + "resolved": "2.4.5", + "contentHash": "OwHamvBdUKgqsXfBzWiCW/O98BTx81UKzx2bieIOQI7CZFE5NEQZGi8PBQGIKawDW96xeRffiNf20SjfC0x9hw==" + }, + "Ardalis.GuardClauses": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "RemnImQf/BWR8oYqFpdw+hn+b4Q1w+pGujkRiSfjQhMPuiERwGn4UMmQv+6UDE4qbPlnIN+e3e40JkvBhzgfzg==", + "dependencies": { + "JetBrains.Annotations": "2021.3.0" + } + }, + "AWSSDK.Core": { + "type": "Transitive", + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" + }, + "AWSSDK.SecurityToken": { + "type": "Transitive", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", + "dependencies": { + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" + } + }, + "Castle.Core": { + "type": "Transitive", + "resolved": "5.1.0", + "contentHash": "31UJpTHOiWq95CDOHazE3Ub/hE/PydNWsJMwnEVTqFFP4WhAugwpaVGxzOxKgNeSUUeqS2W6lxV+q7u1pAOfXg==", + "dependencies": { + "System.Diagnostics.EventLog": "6.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" + } + }, + "JetBrains.Annotations": { + "type": "Transitive", + "resolved": "2021.3.0", + "contentHash": "Ddxjs5RRjf+c8m9m++WvhW1lz1bqNhsTjWvCLbQN9bvKbkJeR9MhtfNwKgBRRdG2yLHcXFr5Lf7fsvvkiPaDRg==" + }, + "Microsoft.AspNetCore.Authentication.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "VloMLDJMf3n/9ic5lCBOa42IBYJgyB1JhzLsL68Zqg+2bEPWfGBj/xCJy/LrKTArN0coOcZp3wyVTZlx0y9pHQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authentication.Core": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "XlVJzJ5wPOYW+Y0J6Q/LVTEyfS4ssLXmt60T0SPP+D8abVhBTl+cgw2gDHlyKYIkcJg7btMVh383NDkMVqD/fg==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Http": "2.2.0", + "Microsoft.AspNetCore.Http.Extensions": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authorization": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "/L0W8H3jMYWyaeA9gBJqS/tSWBegP9aaTM0mjRhxTttBY9z4RVDRYJ2CwPAmAXIuPr3r1sOw+CS8jFVRGHRezQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authorization.Policy": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "aJCo6niDRKuNg2uS2WMEmhJTooQUGARhV2ENQ2tO5443zVHUo19MSgrgGo9FIrfD+4yKPF8Q+FF33WkWfPbyKw==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Authorization": "2.2.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": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "YogBSMotWPAS/X5967pZ+yyWPQkThxhmzAwyCHCSSldzYBkW5W5d6oPfBaPqQOnSHYTpSOSOkpZoAce0vwb6+A==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.AspNetCore.WebUtilities": "2.2.0", + "Microsoft.Extensions.ObjectPool": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0", + "Microsoft.Net.Http.Headers": "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.Extensions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Buffers": "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.AspNetCore.Mvc.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "ET6uZpfVbGR1NjCuLaLy197cQ3qZUjzl7EG5SL4GfJH/c9KRE89MMBrQegqWsh0w1iRUB/zQaK0anAjxa/pz4g==", + "dependencies": { + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0" + } + }, + "Microsoft.AspNetCore.Mvc.Core": { + "type": "Transitive", + "resolved": "2.2.5", + "contentHash": "/8sr8ixIUD57UFwUntha9bOwex7/AkZfdk1f9oNJG1Ek7p/uuKVa7fuHmYZpQOf35Oxrt+2Ku4WPwMSbNxOuWg==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Core": "2.2.0", + "Microsoft.AspNetCore.Authorization.Policy": "2.2.0", + "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Http": "2.2.0", + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.AspNetCore.Mvc.Abstractions": "2.2.0", + "Microsoft.AspNetCore.ResponseCaching.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Routing": "2.2.0", + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection": "2.2.0", + "Microsoft.Extensions.DependencyModel": "2.1.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "System.Diagnostics.DiagnosticSource": "4.5.0", + "System.Threading.Tasks.Extensions": "4.5.1" + } + }, + "Microsoft.AspNetCore.ResponseCaching.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "CIHWEKrHzZfFp7t57UXsueiSA/raku56TgRYauV/W1+KAQq6vevz60zjEKaazt3BI76zwMz3B4jGWnCwd8kwQw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.AspNetCore.Routing": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "jAhDBy0wryOnMhhZTtT9z63gJbvCzFuLm8yC6pHzuVu9ZD1dzg0ltxIwT4cfwuNkIL/TixdKsm3vpVOpG8euWQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.ObjectPool": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Routing.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "lRRaPN7jDlUCVCp9i0W+PB0trFaKB0bgMJD7hEJS9Uo4R9MXaMC8X2tJhPLmeVE3SGDdYI4QNKdVmhNvMJGgPQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0" + } + }, + "Microsoft.AspNetCore.WebUtilities": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==", + "dependencies": { + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Text.Encodings.Web": "4.5.0" + } + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "WqB7Ik4v8ku0Y9HZShqTStZdq8R1lyhsZr7IMp8zV/OcL5sHVYvlMnardQR+SDQc3dmbniCIl9mYxYM+V7x8MA==" + }, + "Microsoft.DotNet.PlatformAbstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "9KPDwvb/hLEVXYruVHVZ8BkebC8j17DmPb56LnqRF74HqSPLjCkrlFUjOtFpQPA2DeADBRTI/e69aCfRBfrhxw==", + "dependencies": { + "System.AppContext": "4.1.0", + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.0.0" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "BUyFU9t+HzlSE7ri4B+AQN2BgTgHv/uM82s5ZkgU1BApyzWzIl48nDsG5wR1t0pniNuuyTBzG3qCW8152/NtSw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.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.DependencyInjection": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "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.DependencyModel": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "nS2XKqi+1A1umnYNLX2Fbm/XnzCxs5i+zXVJ3VC6r9t2z0NZr9FLnJN4VQpKigdcWH/iFTbMuX6M6WQJcTjVIg==", + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "2.1.0", + "Newtonsoft.Json": "9.0.1", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Linq": "4.1.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "xRbKuDnoKClu/lC3fCqF5f0UqEqVI8iYJ0RN4XpUHajvcfCWYcFC46NEzaUg2Fub7hznTG9m6XNScrVHl1iaSA==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "8mNPugigemlybm8f+KcwB5FOEyJ8mZ72stKvOJJqpUFYjfTjFDKFKYB2L98gru1SaxVD9akjw8OyvtbWkAEimQ==" + }, + "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.1", + "contentHash": "dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==" + }, + "Microsoft.Extensions.ObjectPool": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g==" + }, + "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.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Net.Http.Headers": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0", + "System.Buffers": "4.5.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.3.1", + "contentHash": "n1WSFCMiFt6KmD5JzV+Wye5Ntomez3YP2+d15bu5PS5Z1U0g+V7VBLdJIaJRnahz5BsXJDTnLYNVOUdntwjx6Q==", + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + } + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "co/GMz6rGxpzn2aJYTDDim61HvEk+SHBVtbXnu2RSrz20HxkaraEh0kltCsMkmLAX/6Hz5sa6NquLngBlURTow==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.3.1", + "Newtonsoft.Json": "9.0.1" + } + }, + "Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "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.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Newtonsoft.Json": "13.0.1", + "RabbitMQ.Client": "6.4.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.IO.Abstractions": "17.1.1" + } + }, + "MongoDB.Bson": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "IBr5w6ygeUCTobiS4J2UlYeIsnjSJvOOf31g60EkRa3NIeyrYs7Y51HeOvJ8r6NPcKv1hLj8xwoop6hDTetAdA==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + } + }, + "MongoDB.Driver": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "A5Yvm3RUdkSYnvKWVb/bZfvhzG+L+t0n80JuUXf0p2QG1TbtqHE9hX/FBK+BoF7sw9rzUTw8VHYeqX5rT0rxdA==", + "dependencies": { + "MongoDB.Bson": "2.17.1", + "MongoDB.Driver.Core": "2.17.1", + "MongoDB.Libmongocrypt": "1.5.5" + } + }, + "MongoDB.Driver.Core": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "lfuuQvCXcco6mG096PL8xRO+dBdHsDTR3DiYfK/ICHgFlL5RfKlBuE0xClEGKtaZ4Spe28/fF/GUcrrA/yfoAQ==", + "dependencies": { + "DnsClient": "1.6.1", + "MongoDB.Bson": "2.17.1", + "MongoDB.Libmongocrypt": "1.5.5", + "SharpCompress": "0.30.1", + "System.Buffers": "4.5.1" + } + }, + "MongoDB.Libmongocrypt": { + "type": "Transitive", + "resolved": "1.5.5", + "contentHash": "0DV4l2PjXirSJHD/b+LpOK3IfUDvkbpvvZBM2w1aYL6E/4vbhfyr/FP5laDNx2zRylqN1hIZO+EL7NgO/5GpVg==" + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "NuGet.Frameworks": { + "type": "Transitive", + "resolved": "5.11.0", + "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==" + }, + "RabbitMQ.Client": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "1znR1gGU+xYVSpO5z8nQolcUKA/yydnxQn7Ug9+RUXxTSLMm/eE58VKGwahPBjELXvDnX0k/kBrAitFLRjx9LA==", + "dependencies": { + "System.Memory": "4.5.4", + "System.Threading.Channels": "4.7.1" + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" + }, + "runtime.native.System": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" + }, + "SharpCompress": { + "type": "Transitive", + "resolved": "0.30.1", + "contentHash": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==" + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" + }, + "System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "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.Threading.Tasks": "4.3.0" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, + "System.Console": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "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.Tools": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "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.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Dynamic.Runtime": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "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.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.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "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.1.1", + "contentHash": "LWOM12Bd0kp/gaH4g1o/O2/6JDcHF/fuctF1IqDZt0aAqU2BwGiMihi9Cdcm5jJz8La1wFWbRPuRui8WeX6m8w==" + }, + "System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "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.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.ObjectModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.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.Emit": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "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.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "dependencies": { + "System.Reflection": "4.3.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.3.0", + "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Numerics": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "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.Cryptography.Algorithms": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Security.Cryptography.Csp": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.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.3.0", + "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "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.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==" + }, + "System.Text.RegularExpressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "dependencies": { + "System.Runtime": "4.3.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": "4.7.1", + "contentHash": "6akRtHK/wab3246t4p5v3HQrtQk8LboOt5T4dtpNgsp3zvDeM4/Gx8V12t0h+c/W9/enUrilk8n6EQqdQorZAA==" + }, + "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.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "WSKUTtLhPR8gllzIWO2x6l4lmAIfbyMAiTlyXAis4QBDonXK4b4S6F8zGARX4/P8wH3DH+sLdhamCiHn+fTU1A==" + }, + "System.Threading.Timer": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "BeO8hEgs/c8Ls2647fPfieMngncvf0D0xYNDfIO59MolxtCtVjFRd6SRc+7tj8VMqkVOuJcnc9eh4ngI2cAmLQ==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "pxJISOFjn2XTTi1mcDCkRZrTFb9OtRRCtx2kZFNF51GdReLr1ls2rnyxvAS4JO247K3aNtflvh5Q0346K5BROA==", + "dependencies": { + "NETStandard.Library": "1.6.1" + } + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "KB4yGCxNqIVyekhJLXtKSEq6BaXVp/JO3mbGVE1hxypZTLEe7h+sTbAhpA+yZW2dPtXTuiW+C1B2oxxHEkrmOw==", + "dependencies": { + "xunit.extensibility.core": "[2.4.2]", + "xunit.extensibility.execution": "[2.4.2]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "W1BoXTIN1C6kpVSMw25huSet25ky6IAQUNovu3zGOGN/jWnbgSoTyCrlIhmXSg0tH5nEf8q7h3OjNHOjyu5PfA==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "CZmgcKkwpyo8FlupZdWpJCryrAOWLh1FBPG6gmVZuPQkGQsim/oL4PcP4nfrC2hHgXUFtluvaJ0Sp9PQKUMNpg==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "xunit.extensibility.core": "[2.4.2]" + } + }, + "monai.deploy.workflowmanager.contracts": { + "type": "Project", + "dependencies": { + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "MongoDB.Bson": "[2.17.1, )", + "Newtonsoft.Json": "[13.0.1, )" + } + }, + "monai.deploy.workflowmanager.database": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", + "MongoDB.Bson": "[2.17.1, )", + "MongoDB.Driver": "[2.17.1, )" + } + }, + "monai.deploy.workflowmanager.logging": { + "type": "Project", + "dependencies": { + "Microsoft.AspNetCore.Mvc.Core": "[2.2.5, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" + } + } + } + } +} \ No newline at end of file diff --git a/tests/UnitTests/PayloadListener.Tests/packages.lock.json b/tests/UnitTests/PayloadListener.Tests/packages.lock.json new file mode 100644 index 000000000..f28bd3ea4 --- /dev/null +++ b/tests/UnitTests/PayloadListener.Tests/packages.lock.json @@ -0,0 +1,1092 @@ +{ + "version": 1, + "dependencies": { + "net6.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[3.1.2, )", + "resolved": "3.1.2", + "contentHash": "wuLDIDKD5XMt0A7lE31JPenT7QQwZPFkP5rRpdJeblyXZ9MGLI8rYjvm5fvAKln+2/X+4IxxQDxBtwdrqKNLZw==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.3.1, )", + "resolved": "17.3.1", + "contentHash": "jH9W5uYannaJ3HhrPBkzSidf3WkqP6XI+Yke0ODYVuFWM6GLVtBAyNgXvU/uQXPBsHq4aysLTsrN1FvG2hlKoQ==", + "dependencies": { + "Microsoft.CodeCoverage": "17.3.1", + "Microsoft.TestPlatform.TestHost": "17.3.1" + } + }, + "Moq": { + "type": "Direct", + "requested": "[4.18.2, )", + "resolved": "4.18.2", + "contentHash": "SjxKYS5nX6prcaT8ZjbkONh3vnh0Rxru09+gQ1a07v4TM530Oe/jq3Q4dOZPfo1wq0LYmTgLOZKrqRfEx4auPw==", + "dependencies": { + "Castle.Core": "5.1.0" + } + }, + "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.2.1, )", + "resolved": "4.2.1", + "contentHash": "kgH8VKsrcZZgNGQXRpVCrM7TnNz9li3b/snH+YmnXUNqsaWa1Xw9EQWHpbzq4Li2FbTjTE/E5N5HdLNXzZ8BpQ==" + }, + "Ardalis.GuardClauses": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "RemnImQf/BWR8oYqFpdw+hn+b4Q1w+pGujkRiSfjQhMPuiERwGn4UMmQv+6UDE4qbPlnIN+e3e40JkvBhzgfzg==", + "dependencies": { + "JetBrains.Annotations": "2021.3.0" + } + }, + "AWSSDK.Core": { + "type": "Transitive", + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" + }, + "AWSSDK.SecurityToken": { + "type": "Transitive", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", + "dependencies": { + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" + } + }, + "Castle.Core": { + "type": "Transitive", + "resolved": "5.1.0", + "contentHash": "31UJpTHOiWq95CDOHazE3Ub/hE/PydNWsJMwnEVTqFFP4WhAugwpaVGxzOxKgNeSUUeqS2W6lxV+q7u1pAOfXg==", + "dependencies": { + "System.Diagnostics.EventLog": "6.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" + } + }, + "JetBrains.Annotations": { + "type": "Transitive", + "resolved": "2021.3.0", + "contentHash": "Ddxjs5RRjf+c8m9m++WvhW1lz1bqNhsTjWvCLbQN9bvKbkJeR9MhtfNwKgBRRdG2yLHcXFr5Lf7fsvvkiPaDRg==" + }, + "Karambolo.Extensions.Logging.File": { + "type": "Transitive", + "resolved": "3.3.1", + "contentHash": "wkPTc/UEuSAwbO3/Ee+oCdotxncmc/DKwjM533Z0BKvJm94NLOvU2i7pifgMd6uAUJ8jy69OcFZRu7hXKbMW6g==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Physical": "3.0.0", + "Microsoft.Extensions.Logging.Configuration": "3.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "3.0.0", + "System.Threading.Channels": "4.7.1" + } + }, + "Microsoft.AspNetCore.Authentication.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "VloMLDJMf3n/9ic5lCBOa42IBYJgyB1JhzLsL68Zqg+2bEPWfGBj/xCJy/LrKTArN0coOcZp3wyVTZlx0y9pHQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authentication.Core": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "XlVJzJ5wPOYW+Y0J6Q/LVTEyfS4ssLXmt60T0SPP+D8abVhBTl+cgw2gDHlyKYIkcJg7btMVh383NDkMVqD/fg==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Http": "2.2.0", + "Microsoft.AspNetCore.Http.Extensions": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authorization": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "/L0W8H3jMYWyaeA9gBJqS/tSWBegP9aaTM0mjRhxTttBY9z4RVDRYJ2CwPAmAXIuPr3r1sOw+CS8jFVRGHRezQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Authorization.Policy": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "aJCo6niDRKuNg2uS2WMEmhJTooQUGARhV2ENQ2tO5443zVHUo19MSgrgGo9FIrfD+4yKPF8Q+FF33WkWfPbyKw==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Authorization": "2.2.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": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "YogBSMotWPAS/X5967pZ+yyWPQkThxhmzAwyCHCSSldzYBkW5W5d6oPfBaPqQOnSHYTpSOSOkpZoAce0vwb6+A==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.AspNetCore.WebUtilities": "2.2.0", + "Microsoft.Extensions.ObjectPool": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0", + "Microsoft.Net.Http.Headers": "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.Extensions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Buffers": "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.AspNetCore.Mvc.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "ET6uZpfVbGR1NjCuLaLy197cQ3qZUjzl7EG5SL4GfJH/c9KRE89MMBrQegqWsh0w1iRUB/zQaK0anAjxa/pz4g==", + "dependencies": { + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0" + } + }, + "Microsoft.AspNetCore.Mvc.Core": { + "type": "Transitive", + "resolved": "2.2.5", + "contentHash": "/8sr8ixIUD57UFwUntha9bOwex7/AkZfdk1f9oNJG1Ek7p/uuKVa7fuHmYZpQOf35Oxrt+2Ku4WPwMSbNxOuWg==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.Core": "2.2.0", + "Microsoft.AspNetCore.Authorization.Policy": "2.2.0", + "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Http": "2.2.0", + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.AspNetCore.Mvc.Abstractions": "2.2.0", + "Microsoft.AspNetCore.ResponseCaching.Abstractions": "2.2.0", + "Microsoft.AspNetCore.Routing": "2.2.0", + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection": "2.2.0", + "Microsoft.Extensions.DependencyModel": "2.1.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "System.Diagnostics.DiagnosticSource": "4.5.0", + "System.Threading.Tasks.Extensions": "4.5.1" + } + }, + "Microsoft.AspNetCore.ResponseCaching.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "CIHWEKrHzZfFp7t57UXsueiSA/raku56TgRYauV/W1+KAQq6vevz60zjEKaazt3BI76zwMz3B4jGWnCwd8kwQw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.AspNetCore.Routing": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "jAhDBy0wryOnMhhZTtT9z63gJbvCzFuLm8yC6pHzuVu9ZD1dzg0ltxIwT4cfwuNkIL/TixdKsm3vpVOpG8euWQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.ObjectPool": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.AspNetCore.Routing.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "lRRaPN7jDlUCVCp9i0W+PB0trFaKB0bgMJD7hEJS9Uo4R9MXaMC8X2tJhPLmeVE3SGDdYI4QNKdVmhNvMJGgPQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0" + } + }, + "Microsoft.AspNetCore.WebUtilities": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==", + "dependencies": { + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Text.Encodings.Web": "4.5.0" + } + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "WqB7Ik4v8ku0Y9HZShqTStZdq8R1lyhsZr7IMp8zV/OcL5sHVYvlMnardQR+SDQc3dmbniCIl9mYxYM+V7x8MA==" + }, + "Microsoft.DotNet.PlatformAbstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "9KPDwvb/hLEVXYruVHVZ8BkebC8j17DmPb56LnqRF74HqSPLjCkrlFUjOtFpQPA2DeADBRTI/e69aCfRBfrhxw==", + "dependencies": { + "System.AppContext": "4.1.0", + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.0.0" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "BUyFU9t+HzlSE7ri4B+AQN2BgTgHv/uM82s5ZkgU1BApyzWzIl48nDsG5wR1t0pniNuuyTBzG3qCW8152/NtSw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.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.0.0", + "contentHash": "iw3UL25Cw9GBILJOs8srwcId2UCz5+BxTu//EN5dO2dOFNtHcNJgnUiqIlmcGi0orIco0pDuDXuIDvhkrY/sGQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "3.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "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.DependencyModel": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "nS2XKqi+1A1umnYNLX2Fbm/XnzCxs5i+zXVJ3VC6r9t2z0NZr9FLnJN4VQpKigdcWH/iFTbMuX6M6WQJcTjVIg==", + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "2.1.0", + "Newtonsoft.Json": "9.0.1", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Linq": "4.1.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "xRbKuDnoKClu/lC3fCqF5f0UqEqVI8iYJ0RN4XpUHajvcfCWYcFC46NEzaUg2Fub7hznTG9m6XNScrVHl1iaSA==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "8mNPugigemlybm8f+KcwB5FOEyJ8mZ72stKvOJJqpUFYjfTjFDKFKYB2L98gru1SaxVD9akjw8OyvtbWkAEimQ==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "76yB1N8hvzDaTqx3epda5sl/3HATw2FskztmmLmfWuvaooaNgbDa37Jyc7IyBCC4PreXEW/XLEET9w6fiJZOFg==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "3.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "3.0.0" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "E1GcUu8JvY/8QfqMUYTs6HlDLefMYhEzeHsjrhRqOZguBmDTFU8d8m+mGtHEyYHWMRT1TEiha0a8I2AuozDUWQ==" + }, + "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.1", + "contentHash": "dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==" + }, + "Microsoft.Extensions.Logging.Configuration": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "Z+3mqptSt3pCo0Nl4pmwK+nTpBpRxNe2lFaBCCtsT0bb88GeFKvw6Mg+0IeEgDrfj7h4qzMYRbL5cSFMpENQZA==", + "dependencies": { + "Microsoft.Extensions.Logging": "3.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "3.0.0" + } + }, + "Microsoft.Extensions.ObjectPool": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g==" + }, + "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": "3.0.0", + "contentHash": "g4V1TXEKUDgOnp1ZKREKSvITYxcUsTqfxNlOaCG7/xlCurLLzFupm+ULkGqIBUIBK+q3kHmt42pVyHwGIcCBmg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "3.0.0", + "Microsoft.Extensions.Configuration.Binder": "3.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.0.0", + "Microsoft.Extensions.Options": "3.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Net.Http.Headers": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0", + "System.Buffers": "4.5.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "n1WSFCMiFt6KmD5JzV+Wye5Ntomez3YP2+d15bu5PS5Z1U0g+V7VBLdJIaJRnahz5BsXJDTnLYNVOUdntwjx6Q==", + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + } + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "co/GMz6rGxpzn2aJYTDDim61HvEk+SHBVtbXnu2RSrz20HxkaraEh0kltCsMkmLAX/6Hz5sa6NquLngBlURTow==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.3.1", + "Newtonsoft.Json": "9.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": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Newtonsoft.Json": "13.0.1", + "RabbitMQ.Client": "6.4.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.IO.Abstractions": "17.1.1" + } + }, + "Monai.Deploy.Storage": { + "type": "Transitive", + "resolved": "0.2.5", + "contentHash": "EkctSwMUPm+omInxEGAbPPXz6dyd8nY4BAzrdGKt9MHsL1OesFXsgUXsmlCx+ltauohiiTSfjgd9eeVkUUD8MA==", + "dependencies": { + "AWSSDK.SecurityToken": "3.7.1.190", + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Monai.Deploy.Storage.S3Policy": "0.2.5", + "System.IO.Abstractions": "17.1.1" + } + }, + "Monai.Deploy.Storage.S3Policy": { + "type": "Transitive", + "resolved": "0.2.5", + "contentHash": "wtvoeDf7MsuUE48Sggs6FYNOkLFUfQ5mPZer75jb63b9SKQjK2S34IdS8SnHVovNes1xhWInTB9YT2HUNgtzig==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Newtonsoft.Json": "13.0.1" + } + }, + "MongoDB.Bson": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "IBr5w6ygeUCTobiS4J2UlYeIsnjSJvOOf31g60EkRa3NIeyrYs7Y51HeOvJ8r6NPcKv1hLj8xwoop6hDTetAdA==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + } + }, + "MongoDB.Driver": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "A5Yvm3RUdkSYnvKWVb/bZfvhzG+L+t0n80JuUXf0p2QG1TbtqHE9hX/FBK+BoF7sw9rzUTw8VHYeqX5rT0rxdA==", + "dependencies": { + "MongoDB.Bson": "2.17.1", + "MongoDB.Driver.Core": "2.17.1", + "MongoDB.Libmongocrypt": "1.5.5" + } + }, + "MongoDB.Driver.Core": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "lfuuQvCXcco6mG096PL8xRO+dBdHsDTR3DiYfK/ICHgFlL5RfKlBuE0xClEGKtaZ4Spe28/fF/GUcrrA/yfoAQ==", + "dependencies": { + "DnsClient": "1.6.1", + "MongoDB.Bson": "2.17.1", + "MongoDB.Libmongocrypt": "1.5.5", + "SharpCompress": "0.30.1", + "System.Buffers": "4.5.1" + } + }, + "MongoDB.Libmongocrypt": { + "type": "Transitive", + "resolved": "1.5.5", + "contentHash": "0DV4l2PjXirSJHD/b+LpOK3IfUDvkbpvvZBM2w1aYL6E/4vbhfyr/FP5laDNx2zRylqN1hIZO+EL7NgO/5GpVg==" + }, + "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.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "NuGet.Frameworks": { + "type": "Transitive", + "resolved": "5.11.0", + "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==" + }, + "RabbitMQ.Client": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "1znR1gGU+xYVSpO5z8nQolcUKA/yydnxQn7Ug9+RUXxTSLMm/eE58VKGwahPBjELXvDnX0k/kBrAitFLRjx9LA==", + "dependencies": { + "System.Memory": "4.5.4", + "System.Threading.Channels": "4.7.1" + } + }, + "runtime.native.System": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "QfS/nQI7k/BLgmLrw7qm7YBoULEvgWnPI+cYsbfCVFTW8Aj+i8JhccxcFMu1RWms0YZzF+UHguNBK4Qn89e2Sg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + } + }, + "SharpCompress": { + "type": "Transitive", + "resolved": "0.30.1", + "contentHash": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==" + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "3QjO4jNV7PdKkmQAVp9atA+usVnKRwI3Kx1nMwJ93T0LcQfx7pKAYk0nKz5wn1oP5iqlhZuy6RXOFdhr7rDwow==", + "dependencies": { + "System.Runtime": "4.1.0" + } + }, + "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.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, + "System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.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.Dynamic.Runtime": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "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.Globalization": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==", + "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.Threading.Tasks": "4.0.11" + } + }, + "System.IO.Abstractions": { + "type": "Transitive", + "resolved": "17.1.1", + "contentHash": "LWOM12Bd0kp/gaH4g1o/O2/6JDcHF/fuctF1IqDZt0aAqU2BwGiMihi9Cdcm5jJz8La1wFWbRPuRui8WeX6m8w==" + }, + "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.Linq": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + } + }, + "System.Linq.Expressions": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Emit.Lightweight": "4.0.1", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "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.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, + "System.ObjectModel": { + "type": "Transitive", + "resolved": "4.0.12", + "contentHash": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Emit": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==", + "dependencies": { + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" + }, + "System.Reflection.Primitives": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Globalization": "4.0.11", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.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.Runtime.InteropServices.RuntimeInformation": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "hWPhJxc453RCa8Z29O91EmfGeZIHX1ZH2A8L6lYQVSaKzku2DfArSfMEb1/MYYzPQRJZeu0c9dmYeJKxW5Fgng==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Threading": "4.0.11", + "runtime.native.System": "4.0.0" + } + }, + "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.0.11", + "contentHash": "U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==" + }, + "System.Threading": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "dependencies": { + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + } + }, + "System.Threading.Channels": { + "type": "Transitive", + "resolved": "4.7.1", + "contentHash": "6akRtHK/wab3246t4p5v3HQrtQk8LboOt5T4dtpNgsp3zvDeM4/Gx8V12t0h+c/W9/enUrilk8n6EQqdQorZAA==" + }, + "System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "WSKUTtLhPR8gllzIWO2x6l4lmAIfbyMAiTlyXAis4QBDonXK4b4S6F8zGARX4/P8wH3DH+sLdhamCiHn+fTU1A==" + }, + "monai.deploy.workflowmanager.common": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.DependencyInjection.Abstractions": "[6.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.conditionsresolver": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "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.configuration": { + "type": "Project", + "dependencies": { + "Karambolo.Extensions.Logging.File": "[3.3.1, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Newtonsoft.Json": "[13.0.1, )", + "System.IO.Abstractions": "[17.1.1, )" + } + }, + "monai.deploy.workflowmanager.contracts": { + "type": "Project", + "dependencies": { + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "MongoDB.Bson": "[2.17.1, )", + "Newtonsoft.Json": "[13.0.1, )" + } + }, + "monai.deploy.workflowmanager.database": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", + "MongoDB.Bson": "[2.17.1, )", + "MongoDB.Driver": "[2.17.1, )" + } + }, + "monai.deploy.workflowmanager.logging": { + "type": "Project", + "dependencies": { + "Microsoft.AspNetCore.Mvc.Core": "[2.2.5, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" + } + }, + "monai.deploy.workflowmanager.payloadlistener": { + "type": "Project", + "dependencies": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Hosting.Abstractions": "[6.0.0, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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": { + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )" + } + }, + "monai.deploy.workloadmanager.workfowexecuter": { + "type": "Project", + "dependencies": { + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.ConditionsResolver": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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, )", + "Newtonsoft.Json": "[13.0.1, )" + } + } + } + } +} \ No newline at end of file diff --git a/tests/UnitTests/TaskManager.AideClinicalReview.Tests/packages.lock.json b/tests/UnitTests/TaskManager.AideClinicalReview.Tests/packages.lock.json new file mode 100644 index 000000000..c6f3efe75 --- /dev/null +++ b/tests/UnitTests/TaskManager.AideClinicalReview.Tests/packages.lock.json @@ -0,0 +1,1258 @@ +{ + "version": 1, + "dependencies": { + "net6.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[3.1.2, )", + "resolved": "3.1.2", + "contentHash": "wuLDIDKD5XMt0A7lE31JPenT7QQwZPFkP5rRpdJeblyXZ9MGLI8rYjvm5fvAKln+2/X+4IxxQDxBtwdrqKNLZw==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.3.1, )", + "resolved": "17.3.1", + "contentHash": "jH9W5uYannaJ3HhrPBkzSidf3WkqP6XI+Yke0ODYVuFWM6GLVtBAyNgXvU/uQXPBsHq4aysLTsrN1FvG2hlKoQ==", + "dependencies": { + "Microsoft.CodeCoverage": "17.3.1", + "Microsoft.TestPlatform.TestHost": "17.3.1" + } + }, + "Moq": { + "type": "Direct", + "requested": "[4.18.2, )", + "resolved": "4.18.2", + "contentHash": "SjxKYS5nX6prcaT8ZjbkONh3vnh0Rxru09+gQ1a07v4TM530Oe/jq3Q4dOZPfo1wq0LYmTgLOZKrqRfEx4auPw==", + "dependencies": { + "Castle.Core": "5.1.0" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.4.2, )", + "resolved": "2.4.2", + "contentHash": "6Mj73Ont3zj2CJuoykVJfE0ZmRwn7C+pTuRP8c4bnaaTFjwNG6tGe0prJ1yIbMe9AHrpDys63ctWacSsFJWK/w==", + "dependencies": { + "xunit.analyzers": "1.0.0", + "xunit.assert": "2.4.2", + "xunit.core": "[2.4.2]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[2.4.5, )", + "resolved": "2.4.5", + "contentHash": "OwHamvBdUKgqsXfBzWiCW/O98BTx81UKzx2bieIOQI7CZFE5NEQZGi8PBQGIKawDW96xeRffiNf20SjfC0x9hw==" + }, + "Ardalis.GuardClauses": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "RemnImQf/BWR8oYqFpdw+hn+b4Q1w+pGujkRiSfjQhMPuiERwGn4UMmQv+6UDE4qbPlnIN+e3e40JkvBhzgfzg==", + "dependencies": { + "JetBrains.Annotations": "2021.3.0" + } + }, + "AWSSDK.Core": { + "type": "Transitive", + "resolved": "3.7.12.26", + "contentHash": "Axc3mHH1B+KChD4soiFnolvVxD8dVKeEsVFQ0jOxn+VBhHEizUd3oNq0id/AFYkJL6hdC3NGmbs0Y4OGtT5eEg==" + }, + "AWSSDK.SecurityToken": { + "type": "Transitive", + "resolved": "3.7.1.190", + "contentHash": "6njZoO/BBDWIAeN5DrIjZdQXOt6SSpE+x1A8JRWC9moyz3sqwU3l4uePZSpDyrQuLre+dkj1088Z62u9HX6FpQ==", + "dependencies": { + "AWSSDK.Core": "[3.7.12.26, 4.0.0)" + } + }, + "Castle.Core": { + "type": "Transitive", + "resolved": "5.1.0", + "contentHash": "31UJpTHOiWq95CDOHazE3Ub/hE/PydNWsJMwnEVTqFFP4WhAugwpaVGxzOxKgNeSUUeqS2W6lxV+q7u1pAOfXg==", + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + } + }, + "JetBrains.Annotations": { + "type": "Transitive", + "resolved": "2021.3.0", + "contentHash": "Ddxjs5RRjf+c8m9m++WvhW1lz1bqNhsTjWvCLbQN9bvKbkJeR9MhtfNwKgBRRdG2yLHcXFr5Lf7fsvvkiPaDRg==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "WqB7Ik4v8ku0Y9HZShqTStZdq8R1lyhsZr7IMp8zV/OcL5sHVYvlMnardQR+SDQc3dmbniCIl9mYxYM+V7x8MA==" + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "BUyFU9t+HzlSE7ri4B+AQN2BgTgHv/uM82s5ZkgU1BApyzWzIl48nDsG5wR1t0pniNuuyTBzG3qCW8152/NtSw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.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.DependencyInjection": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "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.8", + "contentHash": "xRbKuDnoKClu/lC3fCqF5f0UqEqVI8iYJ0RN4XpUHajvcfCWYcFC46NEzaUg2Fub7hznTG9m6XNScrVHl1iaSA==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "6.0.8", + "contentHash": "8mNPugigemlybm8f+KcwB5FOEyJ8mZ72stKvOJJqpUFYjfTjFDKFKYB2L98gru1SaxVD9akjw8OyvtbWkAEimQ==" + }, + "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.1", + "contentHash": "dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==" + }, + "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.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": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "n1WSFCMiFt6KmD5JzV+Wye5Ntomez3YP2+d15bu5PS5Z1U0g+V7VBLdJIaJRnahz5BsXJDTnLYNVOUdntwjx6Q==", + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + } + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.3.1", + "contentHash": "co/GMz6rGxpzn2aJYTDDim61HvEk+SHBVtbXnu2RSrz20HxkaraEh0kltCsMkmLAX/6Hz5sa6NquLngBlURTow==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.3.1", + "Newtonsoft.Json": "9.0.1" + } + }, + "Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "Monai.Deploy.Messaging": { + "type": "Transitive", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Newtonsoft.Json": "13.0.1", + "RabbitMQ.Client": "6.4.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.IO.Abstractions": "17.1.1" + } + }, + "Monai.Deploy.Storage": { + "type": "Transitive", + "resolved": "0.2.5", + "contentHash": "EkctSwMUPm+omInxEGAbPPXz6dyd8nY4BAzrdGKt9MHsL1OesFXsgUXsmlCx+ltauohiiTSfjgd9eeVkUUD8MA==", + "dependencies": { + "AWSSDK.SecurityToken": "3.7.1.190", + "Ardalis.GuardClauses": "4.0.1", + "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", + "Microsoft.Extensions.Logging": "6.0.0", + "Monai.Deploy.Storage.S3Policy": "0.2.5", + "System.IO.Abstractions": "17.1.1" + } + }, + "Monai.Deploy.Storage.S3Policy": { + "type": "Transitive", + "resolved": "0.2.5", + "contentHash": "wtvoeDf7MsuUE48Sggs6FYNOkLFUfQ5mPZer75jb63b9SKQjK2S34IdS8SnHVovNes1xhWInTB9YT2HUNgtzig==", + "dependencies": { + "Ardalis.GuardClauses": "4.0.1", + "Newtonsoft.Json": "13.0.1" + } + }, + "MongoDB.Bson": { + "type": "Transitive", + "resolved": "2.17.1", + "contentHash": "IBr5w6ygeUCTobiS4J2UlYeIsnjSJvOOf31g60EkRa3NIeyrYs7Y51HeOvJ8r6NPcKv1hLj8xwoop6hDTetAdA==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + } + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "NuGet.Frameworks": { + "type": "Transitive", + "resolved": "5.11.0", + "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==" + }, + "RabbitMQ.Client": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "1znR1gGU+xYVSpO5z8nQolcUKA/yydnxQn7Ug9+RUXxTSLMm/eE58VKGwahPBjELXvDnX0k/kBrAitFLRjx9LA==", + "dependencies": { + "System.Memory": "4.5.4", + "System.Threading.Channels": "4.7.1" + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" + }, + "runtime.native.System": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "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.Threading.Tasks": "4.3.0" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, + "System.Console": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "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.Tools": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "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.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.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.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "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.1.1", + "contentHash": "LWOM12Bd0kp/gaH4g1o/O2/6JDcHF/fuctF1IqDZt0aAqU2BwGiMihi9Cdcm5jJz8La1wFWbRPuRui8WeX6m8w==" + }, + "System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "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.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.ObjectModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.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.Emit": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "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.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "dependencies": { + "System.Reflection": "4.3.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.3.0", + "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Numerics": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Security.Cryptography.Algorithms": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Security.Cryptography.Csp": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "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.3.0", + "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "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.Text.RegularExpressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "dependencies": { + "System.Runtime": "4.3.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": "4.7.1", + "contentHash": "6akRtHK/wab3246t4p5v3HQrtQk8LboOt5T4dtpNgsp3zvDeM4/Gx8V12t0h+c/W9/enUrilk8n6EQqdQorZAA==" + }, + "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.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Timer": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "BeO8hEgs/c8Ls2647fPfieMngncvf0D0xYNDfIO59MolxtCtVjFRd6SRc+7tj8VMqkVOuJcnc9eh4ngI2cAmLQ==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "pxJISOFjn2XTTi1mcDCkRZrTFb9OtRRCtx2kZFNF51GdReLr1ls2rnyxvAS4JO247K3aNtflvh5Q0346K5BROA==", + "dependencies": { + "NETStandard.Library": "1.6.1" + } + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "KB4yGCxNqIVyekhJLXtKSEq6BaXVp/JO3mbGVE1hxypZTLEe7h+sTbAhpA+yZW2dPtXTuiW+C1B2oxxHEkrmOw==", + "dependencies": { + "xunit.extensibility.core": "[2.4.2]", + "xunit.extensibility.execution": "[2.4.2]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "W1BoXTIN1C6kpVSMw25huSet25ky6IAQUNovu3zGOGN/jWnbgSoTyCrlIhmXSg0tH5nEf8q7h3OjNHOjyu5PfA==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.4.2", + "contentHash": "CZmgcKkwpyo8FlupZdWpJCryrAOWLh1FBPG6gmVZuPQkGQsim/oL4PcP4nfrC2hHgXUFtluvaJ0Sp9PQKUMNpg==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "xunit.extensibility.core": "[2.4.2]" + } + }, + "monai.deploy.workflowmanager.taskmanager.aideclinicalreview": { + "type": "Project", + "dependencies": { + "Monai.Deploy.WorkflowManager.TaskManager.API": "[1.0.0, )" + } + }, + "monai.deploy.workflowmanager.taskmanager.api": { + "type": "Project", + "dependencies": { + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "MongoDB.Bson": "[2.17.1, )" + } + } + } + } +} \ No newline at end of file diff --git a/tests/UnitTests/TaskManager.Argo.Tests/ArgoPluginTest.cs b/tests/UnitTests/TaskManager.Argo.Tests/ArgoPluginTest.cs index f89a43be7..0f8c697d9 100644 --- a/tests/UnitTests/TaskManager.Argo.Tests/ArgoPluginTest.cs +++ b/tests/UnitTests/TaskManager.Argo.Tests/ArgoPluginTest.cs @@ -477,7 +477,7 @@ public async Task ArgoPlugin_GetStatus_WaitUntilSucceededPhase() _argoClient.Verify(p => p.WorkflowService_GetWorkflowAsync(It.Is(p => p.Equals("namespace", StringComparison.OrdinalIgnoreCase)), It.Is(p => p.Equals("identity", StringComparison.OrdinalIgnoreCase)), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); } - [Fact(DisplayName = "ExecuteTask - Stats contains info")] + [Fact(DisplayName = "GetStatus - Stats contains info")] public async Task ArgoPlugin_GetStatus_HasStatsInfo() { var tryCount = 0; diff --git a/tests/UnitTests/TaskManager.Docker.Tests/ContainerStatusMonitorTest.cs b/tests/UnitTests/TaskManager.Docker.Tests/ContainerStatusMonitorTest.cs new file mode 100644 index 000000000..527b90429 --- /dev/null +++ b/tests/UnitTests/TaskManager.Docker.Tests/ContainerStatusMonitorTest.cs @@ -0,0 +1,232 @@ +/* + * 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.IO.Abstractions; +using System.IO.Abstractions.TestingHelpers; +using Docker.DotNet; +using Docker.DotNet.Models; +using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Monai.Deploy.Messaging.API; +using Monai.Deploy.Messaging.Common; +using Monai.Deploy.Messaging.Events; +using Monai.Deploy.Storage.API; +using Monai.Deploy.WorkflowManager.Configuration; +using Monai.Deploy.WorkflowManager.TaskManager.Docker; +using Moq; +using Credentials = Monai.Deploy.Messaging.Common.Credentials; + +namespace TaskManager.Docker.Tests +{ + public class ContainerStatusMonitorTest + { + private readonly Mock _serviceScopeFactory; + private readonly Mock> _logger; + private readonly IOptions _options; + private readonly Mock _serviceScope; + + private readonly Mock _dockerClientFactory; + private readonly Mock _dockerClient; + private readonly Mock _storageService; + private readonly Mock _contentTypeProvider; + private readonly Mock _messageBrokerPublisherService; + private readonly Mock _containerStatusMonitor; + private readonly IFileSystem _fileSystem; + + public ContainerStatusMonitorTest() + { + _logger = new Mock>(); + _serviceScopeFactory = new Mock(); + _serviceScope = new Mock(); + _options = Options.Create(new WorkflowManagerOptions()); + _options.Value.Messaging.PublisherSettings.Add("endpoint", "1.2.2.3/virtualhost"); + _options.Value.Messaging.PublisherSettings.Add("username", "username"); + _options.Value.Messaging.PublisherSettings.Add("password", "password"); + _options.Value.Messaging.PublisherSettings.Add("exchange", "exchange"); + _options.Value.Messaging.PublisherSettings.Add("virtualHost", "vhost"); + _options.Value.Messaging.Topics.TaskCallbackRequest = "md.tasks.callback"; + _dockerClientFactory = new Mock(); + _dockerClient = new Mock(); + _storageService = new Mock(); + _contentTypeProvider = new Mock(); + _messageBrokerPublisherService = new Mock(); + _containerStatusMonitor = new Mock(); + _fileSystem = new MockFileSystem(); + + _serviceScopeFactory.Setup(p => p.CreateScope()).Returns(_serviceScope.Object); + + var serviceProvider = new Mock(); + serviceProvider + .Setup(x => x.GetService(typeof(IDockerClientFactory))) + .Returns(_dockerClientFactory.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IStorageService))) + .Returns(_storageService.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IContentTypeProvider))) + .Returns(_contentTypeProvider.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IMessageBrokerPublisherService))) + .Returns(_messageBrokerPublisherService.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IContainerStatusMonitor))) + .Returns(_containerStatusMonitor.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IFileSystem))) + .Returns(_fileSystem); + + _serviceScope.Setup(x => x.ServiceProvider).Returns(serviceProvider.Object); + _dockerClientFactory.Setup(p => p.CreateClient(It.IsAny())).Returns(_dockerClient.Object); + + _logger.Setup(p => p.IsEnabled(It.IsAny())).Returns(true); + } + + [Fact(DisplayName = "Start - when called without any artifacts expect to send callback event")] + public async Task Start_WhenCalledWithoutAnyArtifacts_ExpectToSendCallbackEvent() + { + _fileSystem.Directory.CreateDirectory("/taskmanagerpath/working"); + _fileSystem.Directory.CreateDirectory("/taskmanagerpath/output"); + var intermediateVolumeMount = new ContainerVolumeMount(new Storage { Bucket = "bucket", RelativeRootPath = "/svc" }, "/containerpath", "/hostpath", "/taskmanagerpath/working"); + var outputVolumeMounts = new List() { new ContainerVolumeMount(new Storage { Bucket = "bucket", RelativeRootPath = "/svc" }, "/containerpath", "/hostpath", "/taskmanagerpath/output") }; + var monitor = new ContainerStatusMonitor(_serviceScopeFactory.Object, _logger.Object, _fileSystem, _options); + var taskDispatchEvent = GenerateTaskDispatchEventWithValidArguments(); + + _storageService.Setup(p => p.PutObjectAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>(), It.IsAny())); + _dockerClient.Setup(p => p.Containers.InspectContainerAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(new ContainerInspectResponse + { + State = new ContainerState + { + Status = Strings.DockerStatusExited, + FinishedAt = DateTime.MinValue.ToString("s") + } + }); + + await monitor.Start(taskDispatchEvent, TimeSpan.FromSeconds(3), "container", intermediateVolumeMount, outputVolumeMounts, CancellationToken.None); + + _storageService.Verify(p => p.PutObjectAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>(), It.IsAny()) + , Times.Never()); + _messageBrokerPublisherService.Verify(p => p.Publish(It.IsAny(), It.IsAny()), Times.Once()); + } + + [Fact(DisplayName = "Start - when called expect to upload artifacts and send callback event")] + public async Task Start_WhenCalled_ExpectToUploadArtifactsAndSendCallbackEvent() + { + var files = new List() { "/taskmanagerpath/working/a.json", "/taskmanagerpath/output/b.dcm" }; + CreateFiles(files); + var intermediateVolumeMount = new ContainerVolumeMount(new Storage { Bucket = "bucket", RelativeRootPath = "/svc" }, "/containerpath", "/hostpath", "/taskmanagerpath/working"); + var outputVolumeMounts = new List() { new ContainerVolumeMount(new Storage { Bucket = "bucket", RelativeRootPath = "/svc" }, "/containerpath", "/hostpath", "/taskmanagerpath/output") }; + var monitor = new ContainerStatusMonitor(_serviceScopeFactory.Object, _logger.Object, _fileSystem, _options); + var taskDispatchEvent = GenerateTaskDispatchEventWithValidArguments(); + + _storageService.Setup(p => p.PutObjectAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>(), It.IsAny())); + _dockerClient.Setup(p => p.Containers.InspectContainerAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(new ContainerInspectResponse + { + State = new ContainerState + { + Status = Strings.DockerStatusExited, + FinishedAt = DateTime.MinValue.ToString("s") + } + }); + + await monitor.Start(taskDispatchEvent, TimeSpan.FromSeconds(3), "container", intermediateVolumeMount, outputVolumeMounts, CancellationToken.None); + + _storageService.Verify(p => p.PutObjectAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>(), It.IsAny()) + , Times.Exactly(2)); + _messageBrokerPublisherService.Verify(p => p.Publish(It.IsAny(), It.IsAny()), Times.Once()); + } + + private void CreateFiles(List files) + { + foreach (var file in files) + { + var dir = _fileSystem.Path.GetDirectoryName(file); + _fileSystem.Directory.CreateDirectory(dir); + using var stream = _fileSystem.File.CreateText(file); + stream.WriteLine(file); + } + } + + private static TaskDispatchEvent GenerateTaskDispatchEventWithValidArguments() + { + Environment.SetEnvironmentVariable(Strings.HostTemporaryStorageEnvironmentVariableName, "storage"); + var message = GenerateTaskDispatchEvent(); + message.TaskPluginArguments[Keys.BaseUrl] = "http://api-endpoint/"; + message.TaskPluginArguments[Keys.Command] = "command"; + message.TaskPluginArguments[Keys.ContainerImage] = "image"; + message.TaskPluginArguments[Keys.EntryPoint] = "entrypoint"; + message.TaskPluginArguments[Keys.TemporaryStorageContainerPath] = "path"; + message.TaskPluginArguments[Keys.TaskTimeoutMinutes] = "100"; + message.TaskPluginArguments[Keys.WorkingDirectory] = "/working-dir"; + message.TaskPluginArguments[$"{Keys.EnvironmentVariableKeyPrefix}MyVariable"] = "MyVariable"; + message.TaskPluginArguments["input-dicom"] = "some-path"; + message.TaskPluginArguments["output"] = "some-path"; + return message; + } + + private static TaskDispatchEvent GenerateTaskDispatchEvent() + { + var message = new TaskDispatchEvent + { + CorrelationId = Guid.NewGuid().ToString(), + ExecutionId = Guid.NewGuid().ToString(), + TaskPluginType = Guid.NewGuid().ToString(), + WorkflowInstanceId = Guid.NewGuid().ToString(), + TaskId = Guid.NewGuid().ToString(), + IntermediateStorage = new Storage + { + Name = Guid.NewGuid().ToString(), + Endpoint = Guid.NewGuid().ToString(), + Credentials = new Credentials + { + AccessKey = Guid.NewGuid().ToString(), + AccessToken = Guid.NewGuid().ToString() + }, + Bucket = Guid.NewGuid().ToString(), + RelativeRootPath = Guid.NewGuid().ToString(), + } + }; + message.Inputs.Add(new Storage + { + Name = "input-dicom", + Endpoint = Guid.NewGuid().ToString(), + Credentials = new Credentials + { + AccessKey = Guid.NewGuid().ToString(), + AccessToken = Guid.NewGuid().ToString() + }, + Bucket = Guid.NewGuid().ToString(), + RelativeRootPath = Guid.NewGuid().ToString(), + }); + message.Outputs.Add(new Storage + { + Name = "output", + Endpoint = Guid.NewGuid().ToString(), + Credentials = new Credentials + { + AccessKey = Guid.NewGuid().ToString(), + AccessToken = Guid.NewGuid().ToString() + }, + Bucket = Guid.NewGuid().ToString(), + RelativeRootPath = Guid.NewGuid().ToString(), + }); + return message; + } + } +} diff --git a/tests/UnitTests/TaskManager.Docker.Tests/DockerPluginTest.cs b/tests/UnitTests/TaskManager.Docker.Tests/DockerPluginTest.cs new file mode 100644 index 000000000..a9aa2ab55 --- /dev/null +++ b/tests/UnitTests/TaskManager.Docker.Tests/DockerPluginTest.cs @@ -0,0 +1,474 @@ +/* + * 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.Text; +using Docker.DotNet; +using Docker.DotNet.Models; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Monai.Deploy.Messaging.Common; +using Monai.Deploy.Messaging.Events; +using Monai.Deploy.Storage.API; +using Monai.Deploy.WorkflowManager.SharedTest; +using Monai.Deploy.WorkflowManager.TaskManager.API; +using Monai.Deploy.WorkflowManager.TaskManager.Docker; +using Moq; +using Credentials = Monai.Deploy.Messaging.Common.Credentials; + +namespace TaskManager.Docker.Tests +{ + public class DockerPluginTest + { + private readonly Mock> _logger; + private readonly Mock _serviceScopeFactory; + private readonly Mock _serviceScope; + + private readonly Mock _dockerClientFactory; + private readonly Mock _dockerClient; + private readonly Mock _storageService; + private readonly Mock _containerStatusMonitor; + + public DockerPluginTest() + { + _logger = new Mock>(); + _serviceScopeFactory = new Mock(); + _serviceScope = new Mock(); + _dockerClientFactory = new Mock(); + _dockerClient = new Mock(); + _storageService = new Mock(); + _containerStatusMonitor = new Mock(); + + _serviceScopeFactory.Setup(p => p.CreateScope()).Returns(_serviceScope.Object); + + var serviceProvider = new Mock(); + serviceProvider + .Setup(x => x.GetService(typeof(IDockerClientFactory))) + .Returns(_dockerClientFactory.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IStorageService))) + .Returns(_storageService.Object); + serviceProvider + .Setup(x => x.GetService(typeof(IContainerStatusMonitor))) + .Returns(_containerStatusMonitor.Object); + + _serviceScope.Setup(x => x.ServiceProvider).Returns(serviceProvider.Object); + _dockerClientFactory.Setup(p => p.CreateClient(It.IsAny())).Returns(_dockerClient.Object); + + _logger.Setup(p => p.IsEnabled(It.IsAny())).Returns(true); + } + + [Fact(DisplayName = "Throws when missing required plug-in arguments")] + public void GivenDockerPlugIn_WhenInitializedWIthMissingPlugInArguments_ExpectToThrow() + { + var message = GenerateTaskDispatchEvent(); + Assert.Throws(() => new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message)); + + foreach (var key in Keys.RequiredParameters.Take(Keys.RequiredParameters.Count - 1)) + { + message.TaskPluginArguments.Add(key, Guid.NewGuid().ToString()); + Assert.Throws(() => new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message)); + } + message.TaskPluginArguments[Keys.RequiredParameters[Keys.RequiredParameters.Count - 1]] = Guid.NewGuid().ToString(); + Assert.Throws(() => new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message)); + + message.TaskPluginArguments[Keys.BaseUrl] = "/api"; + Assert.Throws(() => new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message)); + } + + [Fact(DisplayName = "Initializes values")] + public void GivenDockerPlugIn_WhenInitialized_ExpectValuesToBeInitialized() + { + var message = GenerateTaskDispatchEventWithValidArguments(); + + _ = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + _logger.VerifyLogging($"Docker plugin initialized: base URL=http://api-endpoint/, timeout=100 minutes.", LogLevel.Information, Times.Once()); + } + + [Fact(DisplayName = "ExecuteTask - when docker service is unavilable returns failure status")] + public async Task ExecuteTask_WhenDockerServiceIsUnavailable_ExpectFailureStatus() + { + var payloadFiles = new List() + { + new VirtualFileInfo( "file.dcm", "path/to/file.dcm", "etag", 1000) + }; + _dockerClient.Setup(p => p.Images.CreateImageAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())) + .ThrowsAsync(new Exception("error")); + _storageService.Setup(p => p.ListObjectsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(payloadFiles); + _storageService.Setup(p => p.GetObjectAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(new MemoryStream(Encoding.UTF8.GetBytes("hello"))); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.ExecuteTask(CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Failed, result.Status); + Assert.Equal(FailureReason.PluginError, result.FailureReason); + Assert.Equal("error", result.Errors); + + runner.Dispose(); + } + + [Fact(DisplayName = "ExecuteTask - when storage service is unavailable returns failure status")] + public async Task ExecuteTask_WhenStorageServiceIsUnavailable_ExpectFailureStatus() + { + _dockerClient.Setup(p => p.Images.CreateImageAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())) + .ThrowsAsync(new Exception("error")); + _storageService.Setup(p => p.ListObjectsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ThrowsAsync(new Exception("error")); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.ExecuteTask(CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Failed, result.Status); + Assert.Equal(FailureReason.PluginError, result.FailureReason); + Assert.Equal("error", result.Errors); + + runner.Dispose(); + } + + [Fact(DisplayName = "ExecuteTask - when unable to create container return failure status")] + public async Task ExecuteTask_WhenFailedToCreateContainer_ExpectFailureStatus() + { + var payloadFiles = new List() + { + new VirtualFileInfo( "file.dcm", "path/to/file.dcm", "etag", 1000) + }; + var contianerId = Guid.NewGuid().ToString(); + + _dockerClient.Setup(p => p.Images.CreateImageAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())); + _dockerClient.Setup(p => p.Containers.CreateContainerAsync( + It.IsAny(), + It.IsAny())) + .ThrowsAsync(new Exception("error")); + + _storageService.Setup(p => p.ListObjectsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(payloadFiles); + _storageService.Setup(p => p.GetObjectAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(new MemoryStream(Encoding.UTF8.GetBytes("hello"))); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.ExecuteTask(CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Failed, result.Status); + Assert.Equal(FailureReason.PluginError, result.FailureReason); + Assert.Equal("error", result.Errors); + runner.Dispose(); + } + + [Fact(DisplayName = "ExecuteTask - when unable to monitor container expect task to be accepted")] + public async Task ExecuteTask_WhenFailedToMonitorContainer_ExpectTaskToBeAccepted() + { + var payloadFiles = new List() + { + new VirtualFileInfo( "file.dcm", "path/to/file.dcm", "etag", 1000) + }; + var contianerId = Guid.NewGuid().ToString(); + + _dockerClient.Setup(p => p.Images.CreateImageAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())); + _dockerClient.Setup(p => p.Containers.CreateContainerAsync( + It.IsAny(), + It.IsAny())) + .ReturnsAsync(new CreateContainerResponse { ID = contianerId, Warnings = new List() { "warning" } }); + _containerStatusMonitor.Setup(p => p.Start( + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())) + .ThrowsAsync(new Exception("error")); + _storageService.Setup(p => p.ListObjectsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(payloadFiles); + _storageService.Setup(p => p.GetObjectAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(new MemoryStream(Encoding.UTF8.GetBytes("hello"))); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.ExecuteTask(CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Accepted, result.Status); + Assert.Equal(FailureReason.None, result.FailureReason); + Assert.Empty(result.Errors); + runner.Dispose(); + } + + [Fact(DisplayName = "ExecuteTask - when called with a valid event expect task to be accepted and monitored in the background")] + public async Task ExecuteTask_WhenCalledWithValidEvent_ExpectTaskToBeAcceptedAndMonitored() + { + var payloadFiles = new List() + { + new VirtualFileInfo( "file.dcm", "path/to/file.dcm", "etag", 1000) + }; + var contianerId = Guid.NewGuid().ToString(); + + _dockerClient.Setup(p => p.Images.CreateImageAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())); + _dockerClient.Setup(p => p.Containers.CreateContainerAsync( + It.IsAny(), + It.IsAny())) + .ReturnsAsync(new CreateContainerResponse { ID = contianerId, Warnings = new List() { "warning" } }); + + _storageService.Setup(p => p.ListObjectsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(payloadFiles); + _storageService.Setup(p => p.GetObjectAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(new MemoryStream(Encoding.UTF8.GetBytes("hello"))); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.ExecuteTask(CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Accepted, result.Status); + Assert.Equal(FailureReason.None, result.FailureReason); + Assert.Equal(String.Empty, result.Errors); + + runner.Dispose(); + } + + [Fact(DisplayName = "GetStatus - when contianer status is unknown expect failure status")] + public async Task GetStatus_WhenContainerStatusIsUnknown_ExpectFalureStatus() + { + var tryCount = 0; + _dockerClient.Setup(p => p.Containers.InspectContainerAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync( + new ContainerInspectResponse + { + State = new ContainerState + { + Status = Strings.DockerStatusPaused, + FinishedAt = DateTime.MinValue.ToString("s"), + ExitCode = 100 + } + }); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.GetStatus("identity", CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Failed, result.Status); + Assert.Equal(FailureReason.Unknown, result.FailureReason); + Assert.Equal($"Exit code=100. Status=paused.", result.Errors); + + _dockerClient.Verify(p => p.Containers.InspectContainerAsync( + It.Is(p => p.Equals("identity", StringComparison.OrdinalIgnoreCase)), + It.IsAny()), Times.AtLeastOnce()); + } + + [Fact(DisplayName = "GetStatus - when contianer is killed or dead expect failure status")] + public async Task GetStatus_WhenContainerIsKilledOrDead_ExpectFalureStatus() + { + var tryCount = 0; + _dockerClient.Setup(p => p.Containers.InspectContainerAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync( + new ContainerInspectResponse + { + State = new ContainerState + { + OOMKilled = true, + FinishedAt = DateTime.MinValue.ToString("s"), + ExitCode = 100 + } + }); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.GetStatus("identity", CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Failed, result.Status); + Assert.Equal(FailureReason.ExternalServiceError, result.FailureReason); + Assert.Equal($"Exit code=100", result.Errors); + + _dockerClient.Verify(p => p.Containers.InspectContainerAsync( + It.Is(p => p.Equals("identity", StringComparison.OrdinalIgnoreCase)), + It.IsAny()), Times.AtLeastOnce()); + } + + [Fact(DisplayName = "GetStatus - when Docker is unavailable expect failure status")] + public async Task GetStatus_WhenDockerIsDown_ExpectFalureStatus() + { + var tryCount = 0; + _dockerClient.Setup(p => p.Containers.InspectContainerAsync(It.IsAny(), It.IsAny())) + .ThrowsAsync(new Exception("error")); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.GetStatus("identity", CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Failed, result.Status); + Assert.Equal(FailureReason.ExternalServiceError, result.FailureReason); + Assert.Equal($"error", result.Errors); + + _dockerClient.Verify(p => p.Containers.InspectContainerAsync( + It.Is(p => p.Equals("identity", StringComparison.OrdinalIgnoreCase)), + It.IsAny()), Times.AtLeastOnce()); + } + + [Fact(DisplayName = "GetStatus - Waits until Succeeded Phase")] + public async Task GetStatus_WhenCalled_ExpectToWaitUntilFinalStatuses() + { + var tryCount = 0; + _dockerClient.Setup(p => p.Containers.InspectContainerAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync((string containerId, CancellationToken cancellationToken) => + { + if (tryCount++ < 2) + { + return new ContainerInspectResponse + { + State = new ContainerState + { + Status = Strings.DockerStatusRunning, + FinishedAt = DateTime.MinValue.ToString("s") + } + }; + } + + return new ContainerInspectResponse + { + State = new ContainerState + { + Status = Strings.DockerStatusExited, + FinishedAt = DateTime.MinValue.ToString("s") + } + }; + }); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + var result = await runner.GetStatus("identity", CancellationToken.None).ConfigureAwait(false); + + Assert.Equal(TaskExecutionStatus.Succeeded, result.Status); + Assert.Equal(FailureReason.None, result.FailureReason); + Assert.Empty(result.Errors); + + _dockerClient.Verify(p => p.Containers.InspectContainerAsync( + It.Is(p => p.Equals("identity", StringComparison.OrdinalIgnoreCase)), + It.IsAny()), Times.Exactly(3)); + } + + [Fact(DisplayName = "HandleTimeout - when called expecte to terminate container")] + public async Task HandleTimeout_WhenCalled_ExpectToTerminateContainer() + { + _dockerClient.Setup(p => p.Containers.KillContainerAsync(It.IsAny(), It.IsAny(), It.IsAny())); + + var message = GenerateTaskDispatchEventWithValidArguments(); + + var runner = new DockerPlugin(_serviceScopeFactory.Object, _logger.Object, message); + + var exception = await Record.ExceptionAsync(async () => + { + await runner.HandleTimeout("identity").ConfigureAwait(false); + }); + + Assert.Null(exception); + } + + private static TaskDispatchEvent GenerateTaskDispatchEventWithValidArguments() + { + Environment.SetEnvironmentVariable(Strings.HostTemporaryStorageEnvironmentVariableName, "storage"); + var message = GenerateTaskDispatchEvent(); + message.TaskPluginArguments[Keys.BaseUrl] = "http://api-endpoint/"; + message.TaskPluginArguments[Keys.Command] = "command"; + message.TaskPluginArguments[Keys.ContainerImage] = "image"; + message.TaskPluginArguments[Keys.EntryPoint] = "entrypoint"; + message.TaskPluginArguments[Keys.TemporaryStorageContainerPath] = "path"; + message.TaskPluginArguments[Keys.TaskTimeoutMinutes] = "100"; + message.TaskPluginArguments[Keys.WorkingDirectory] = "/working-dir"; + message.TaskPluginArguments[$"{Keys.EnvironmentVariableKeyPrefix}MyVariable"] = "MyVariable"; + message.TaskPluginArguments["input-dicom"] = "some-path"; + message.TaskPluginArguments["output"] = "some-path"; + return message; + } + + private static TaskDispatchEvent GenerateTaskDispatchEvent() + { + var message = new TaskDispatchEvent + { + CorrelationId = Guid.NewGuid().ToString(), + ExecutionId = Guid.NewGuid().ToString(), + TaskPluginType = Guid.NewGuid().ToString(), + WorkflowInstanceId = Guid.NewGuid().ToString(), + TaskId = Guid.NewGuid().ToString(), + IntermediateStorage = new Storage + { + Name = Guid.NewGuid().ToString(), + Endpoint = Guid.NewGuid().ToString(), + Credentials = new Credentials + { + AccessKey = Guid.NewGuid().ToString(), + AccessToken = Guid.NewGuid().ToString() + }, + Bucket = Guid.NewGuid().ToString(), + RelativeRootPath = Guid.NewGuid().ToString(), + } + }; + message.Inputs.Add(new Storage + { + Name = "input-dicom", + Endpoint = Guid.NewGuid().ToString(), + Credentials = new Credentials + { + AccessKey = Guid.NewGuid().ToString(), + AccessToken = Guid.NewGuid().ToString() + }, + Bucket = Guid.NewGuid().ToString(), + RelativeRootPath = Guid.NewGuid().ToString(), + }); + message.Outputs.Add(new Storage + { + Name = "output", + Endpoint = Guid.NewGuid().ToString(), + Credentials = new Credentials + { + AccessKey = Guid.NewGuid().ToString(), + AccessToken = Guid.NewGuid().ToString() + }, + Bucket = Guid.NewGuid().ToString(), + RelativeRootPath = Guid.NewGuid().ToString(), + }); + return message; + } + } +} diff --git a/tests/UnitTests/TaskManager.Docker.Tests/Monai.Deploy.WorkflowManager.TaskManager.Docker.Tests.csproj b/tests/UnitTests/TaskManager.Docker.Tests/Monai.Deploy.WorkflowManager.TaskManager.Docker.Tests.csproj new file mode 100644 index 000000000..7b4e6c612 --- /dev/null +++ b/tests/UnitTests/TaskManager.Docker.Tests/Monai.Deploy.WorkflowManager.TaskManager.Docker.Tests.csproj @@ -0,0 +1,50 @@ + + + + + + net6.0 + enable + enable + + false + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/tests/UnitTests/TaskManager.Docker.Tests/Usings.cs b/tests/UnitTests/TaskManager.Docker.Tests/Usings.cs new file mode 100644 index 000000000..ffb0fd08f --- /dev/null +++ b/tests/UnitTests/TaskManager.Docker.Tests/Usings.cs @@ -0,0 +1,17 @@ +/* + * 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. + */ + +global using Xunit; \ No newline at end of file diff --git a/tests/UnitTests/TaskManager.Tests/Monai.Deploy.WorkflowManager.TaskManager.Tests.csproj b/tests/UnitTests/TaskManager.Tests/Monai.Deploy.WorkflowManager.TaskManager.Tests.csproj index 2fe7e5a5c..253b3a331 100644 --- a/tests/UnitTests/TaskManager.Tests/Monai.Deploy.WorkflowManager.TaskManager.Tests.csproj +++ b/tests/UnitTests/TaskManager.Tests/Monai.Deploy.WorkflowManager.TaskManager.Tests.csproj @@ -27,7 +27,7 @@ - + diff --git a/tests/UnitTests/WorkflowExecuter.Tests/Common/ArtifactMapperTests.cs b/tests/UnitTests/WorkflowExecuter.Tests/Common/ArtifactMapperTests.cs index 15ade425e..7363fef79 100644 --- a/tests/UnitTests/WorkflowExecuter.Tests/Common/ArtifactMapperTests.cs +++ b/tests/UnitTests/WorkflowExecuter.Tests/Common/ArtifactMapperTests.cs @@ -19,6 +19,7 @@ using System.IO; using System.Threading.Tasks; using FluentAssertions; +using Microsoft.Extensions.Logging; using Monai.Deploy.Messaging.Events; using Monai.Deploy.Storage.API; using Monai.Deploy.WorkflowManager.Contracts.Models; @@ -35,13 +36,15 @@ public class ArtifactMapperTests private readonly Mock _workflowInstanceRepository; private readonly Mock _storageService; + private readonly Mock> _logger; public ArtifactMapperTests() { _workflowInstanceRepository = new Mock(); _storageService = new Mock(); + _logger = new Mock>(); - ArtifactMapper = new ArtifactMapper(_workflowInstanceRepository.Object, _storageService.Object); + ArtifactMapper = new ArtifactMapper(_workflowInstanceRepository.Object, _storageService.Object, _logger.Object); } [Fact] diff --git a/tests/UnitTests/WorkflowManager.Tests/DummyMessagingService.cs b/tests/UnitTests/WorkflowManager.Tests/DummyMessagingService.cs index aa2342cb9..398101e2a 100644 --- a/tests/UnitTests/WorkflowManager.Tests/DummyMessagingService.cs +++ b/tests/UnitTests/WorkflowManager.Tests/DummyMessagingService.cs @@ -14,8 +14,10 @@ * limitations under the License. */ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; using Monai.Deploy.Messaging; using Monai.Deploy.Messaging.API; using Monai.Deploy.Messaging.Common; @@ -23,20 +25,22 @@ namespace Monai.Deploy.WorkflowManager.Tests { - internal class DummyMessagePublisherRegistrar : PublisherServiceRegistrationBase + internal class DummyMessageSubscriberHealtCheck : SubscriberServiceHealthCheckRegistrationBase + { + public override IHealthChecksBuilder Configure(IHealthChecksBuilder builder, HealthStatus? failureStatus = null, IEnumerable tags = null, TimeSpan? timeout = null) => builder; + } + + internal class DummyMessagePublisherHealtCheck : PublisherServiceHealthCheckRegistrationBase { - public DummyMessagePublisherRegistrar(string fullyQualifiedAssemblyName) : base(fullyQualifiedAssemblyName) - { - } + public override IHealthChecksBuilder Configure(IHealthChecksBuilder builder, HealthStatus? failureStatus = null, IEnumerable tags = null, TimeSpan? timeout = null) => builder; + } + internal class DummyMessagePublisherRegistrar : PublisherServiceRegistrationBase + { public override IServiceCollection Configure(IServiceCollection services) => services; } internal class DummyMessageSubscriberRegistrar : SubscriberServiceRegistrationBase { - public DummyMessageSubscriberRegistrar(string fullyQualifiedAssemblyName) : base(fullyQualifiedAssemblyName) - { - } - public override IServiceCollection Configure(IServiceCollection services) => services; } diff --git a/tests/UnitTests/WorkflowManager.Tests/packages.lock.json b/tests/UnitTests/WorkflowManager.Tests/packages.lock.json index 1a77409c9..881b9a627 100644 --- a/tests/UnitTests/WorkflowManager.Tests/packages.lock.json +++ b/tests/UnitTests/WorkflowManager.Tests/packages.lock.json @@ -46,12 +46,12 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[17.3.0, )", - "resolved": "17.3.0", - "contentHash": "ch4JCT7AZdBzvCAKD36t6fDsl7NEzzunwW7MwXUG2uFPoWcMd8B8KYg5fiwxnpdXJHodJk6yIBdSwMpN3Ikt9w==", + "requested": "[17.3.1, )", + "resolved": "17.3.1", + "contentHash": "jH9W5uYannaJ3HhrPBkzSidf3WkqP6XI+Yke0ODYVuFWM6GLVtBAyNgXvU/uQXPBsHq4aysLTsrN1FvG2hlKoQ==", "dependencies": { - "Microsoft.CodeCoverage": "17.3.0", - "Microsoft.TestPlatform.TestHost": "17.3.0" + "Microsoft.CodeCoverage": "17.3.1", + "Microsoft.TestPlatform.TestHost": "17.3.1" } }, "Moq": { @@ -99,15 +99,15 @@ }, "AWSSDK.Core": { "type": "Transitive", - "resolved": "3.7.12.27", - "contentHash": "pCX0yHPFuREXOqGaEQoCSlPZwsiijT1rBBiyk1pdD19Db8gVFglO7wMbxl37OhRNcLZprmtWJFvaDfuzeV10Wg==" + "resolved": "3.7.12.29", + "contentHash": "bxSbEjbCyAzjmUpxVKXiQhkXEvb3w9OHL7AOL9LItY1f5xLB9/qbtHoi5FvmZXTPPi2RahPJr9fDyHMLwQnxiA==" }, "AWSSDK.SecurityToken": { "type": "Transitive", - "resolved": "3.7.1.191", - "contentHash": "tTIqJ/QKaPzTu5ZPdRFa2sW9p5F441RLV7nDdTAVVuu6oLyemna0bTtE+luGLaw17oE4GZHpa5n5p0oJmpzcxA==", + "resolved": "3.7.1.193", + "contentHash": "xDZAerod8OUtyIgIYPiGRO+PRdGDjepGGgH2/DuAK/aoARU/FinaFr+yuUjJItrP53dCezbpdFVSRa1BFpIGfA==", "dependencies": { - "AWSSDK.Core": "[3.7.12.27, 4.0.0)" + "AWSSDK.Core": "[3.7.12.29, 4.0.0)" } }, "Castle.Core": { @@ -373,8 +373,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "17.3.0", - "contentHash": "/xxz+e29F2V5pePtInjbLffoqWVTm60KCX87vSj2laNboeWq65WFJ634fGtBcMZO3VEfOmh9/XcoWEfLlWWG+g==" + "resolved": "17.3.1", + "contentHash": "WqB7Ik4v8ku0Y9HZShqTStZdq8R1lyhsZr7IMp8zV/OcL5sHVYvlMnardQR+SDQc3dmbniCIl9mYxYM+V7x8MA==" }, "Microsoft.CSharp": { "type": "Transitive", @@ -788,8 +788,8 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", - "resolved": "17.3.0", - "contentHash": "6NRzi6QbmWV49Psf8A9z1LTJU4nBrlJdCcDOUyD4Ttm1J2wvksu98GlV+52CkxtpgNsUjGr9Mv1Rbb1/dB06yQ==", + "resolved": "17.3.1", + "contentHash": "n1WSFCMiFt6KmD5JzV+Wye5Ntomez3YP2+d15bu5PS5Z1U0g+V7VBLdJIaJRnahz5BsXJDTnLYNVOUdntwjx6Q==", "dependencies": { "NuGet.Frameworks": "5.11.0", "System.Reflection.Metadata": "1.6.0" @@ -797,10 +797,10 @@ }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "17.3.0", - "contentHash": "uOJALDWtKXZkISKuNI7kOlRi/lk2CqXZtLkNS0Ei+RXqRUjUpCsjAPYSP+DJ/a4QwJ5cI9CVF52vtajnGOaEpw==", + "resolved": "17.3.1", + "contentHash": "co/GMz6rGxpzn2aJYTDDim61HvEk+SHBVtbXnu2RSrz20HxkaraEh0kltCsMkmLAX/6Hz5sa6NquLngBlURTow==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.3.0", + "Microsoft.TestPlatform.ObjectModel": "17.3.1", "Newtonsoft.Json": "9.0.1" } }, @@ -829,24 +829,25 @@ }, "Monai.Deploy.Messaging": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "cTVT2sId7/mGKTwuUvBqnoOAN7CBZmSlZK3WMXdBlmsHs3vHi5wvjho0sUP7psl7hhivd/cSP5cfZ8x2Sry3Xg==", + "resolved": "0.1.6-rc0001", + "contentHash": "hQMo8/7sWrn14KnTodUN8UkuPVnCDOScgMvfG3jErx6Tm6Bpyp6h4PXwL56Q2U0Og2pVG7X7aX2N0XpY+HWQMA==", "dependencies": { "Ardalis.GuardClauses": "4.0.1", "Microsoft.Extensions.Configuration": "6.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.8", "Microsoft.Extensions.Logging": "6.0.0", "Newtonsoft.Json": "13.0.1", "RabbitMQ.Client": "6.4.0", "System.ComponentModel.Annotations": "5.0.0", - "System.IO.Abstractions": "17.0.18" + "System.IO.Abstractions": "17.1.1" } }, "Monai.Deploy.Messaging.RabbitMQ": { "type": "Transitive", - "resolved": "0.1.3-rc0012", - "contentHash": "IIzty1xAAn3pTSK9VPI5o22nZDGyPyKWNiGstC4bkzIHdxghPEX/ErR7IVkClxCc9kK8X+4sReGFksdGKShQnw==", + "resolved": "0.1.6-rc0001", + "contentHash": "sbHA1Rt+O2SuucQOULq/SCUEFq46fUIDFtllxBL94wZSNMf7nioPRVi+kU6j6JrUBqWT+F1A/qUxwvANbrkHNQ==", "dependencies": { - "Monai.Deploy.Messaging": "0.1.3-rc0012" + "Monai.Deploy.Messaging": "0.1.6-rc0001" } }, "Monai.Deploy.Storage": { @@ -1696,147 +1697,147 @@ "monai.deploy.workflowmanager": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Karambolo.Extensions.Logging.File": "3.3.1", - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.8", - "Microsoft.AspNetCore.Mvc.Versioning": "5.0.0", - "Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer": "5.0.0", - "Microsoft.EntityFrameworkCore": "6.0.8", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Hosting": "6.0.1", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Console": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.Messaging.RabbitMQ": "0.1.3-rc0012", - "Monai.Deploy.Storage.MinIO": "0.2.5", - "Monai.Deploy.WorkflowManager.Authentication": "1.0.0", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkflowManager.Configuration": "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.MonaiBackgroundService": "1.0.0", - "Monai.Deploy.WorkflowManager.PayloadListener": "1.0.0", - "Newtonsoft.Json": "13.0.1", - "Swashbuckle.AspNetCore": "6.4.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Karambolo.Extensions.Logging.File": "[3.3.1, )", + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "[6.0.8, )", + "Microsoft.AspNetCore.Mvc.Versioning": "[5.0.0, )", + "Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer": "[5.0.0, )", + "Microsoft.EntityFrameworkCore": "[6.0.8, )", + "Microsoft.Extensions.DependencyInjection.Abstractions": "[6.0.0, )", + "Microsoft.Extensions.Hosting": "[6.0.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "Microsoft.Extensions.Logging.Console": "[6.0.0, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.Messaging.RabbitMQ": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage.MinIO": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Authentication": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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.MonaiBackgroundService": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.PayloadListener": "[1.0.0, )", + "Newtonsoft.Json": "[13.0.1, )", + "Swashbuckle.AspNetCore": "[6.4.0, )" } }, "monai.deploy.workflowmanager.authentication": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.8", - "Monai.Deploy.WorkflowManager.Common": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.8, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )" } }, "monai.deploy.workflowmanager.common": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Database": "1.0.0", - "Monai.Deploy.WorkflowManager.Storage": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.DependencyInjection.Abstractions": "[6.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.conditionsresolver": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "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" + "Ardalis.GuardClauses": "[4.0.1, )", + "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.configuration": { "type": "Project", "dependencies": { - "Karambolo.Extensions.Logging.File": "3.3.1", - "Microsoft.Extensions.Configuration": "6.0.1", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Newtonsoft.Json": "13.0.1", - "System.IO.Abstractions": "17.1.1" + "Karambolo.Extensions.Logging.File": "[3.3.1, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Newtonsoft.Json": "[13.0.1, )", + "System.IO.Abstractions": "[17.1.1, )" } }, "monai.deploy.workflowmanager.contracts": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "3.7.1.191", - "Microsoft.Extensions.Configuration": "6.0.1", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "MongoDB.Bson": "2.17.1", - "Newtonsoft.Json": "13.0.1" + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Microsoft.Extensions.Configuration": "[6.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "MongoDB.Bson": "[2.17.1, )", + "Newtonsoft.Json": "[13.0.1, )" } }, "monai.deploy.workflowmanager.database": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.Logging.Abstractions": "6.0.1", - "Microsoft.Extensions.Options": "6.0.0", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Logging": "1.0.0", - "MongoDB.Bson": "2.17.1", - "MongoDB.Driver": "2.17.1" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Microsoft.Extensions.Options": "[6.0.0, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )", + "MongoDB.Bson": "[2.17.1, )", + "MongoDB.Driver": "[2.17.1, )" } }, "monai.deploy.workflowmanager.logging": { "type": "Project", "dependencies": { - "Microsoft.AspNetCore.Mvc.Core": "2.2.5", - "Microsoft.Extensions.Logging.Abstractions": "6.0.1", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0" + "Microsoft.AspNetCore.Mvc.Core": "[2.2.5, )", + "Microsoft.Extensions.Logging.Abstractions": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )" } }, "monai.deploy.workflowmanager.monaibackgroundservice": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Hosting": "6.0.1", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkloadManager.WorkfowExecuter": "1.0.0" + "Microsoft.Extensions.Hosting": "[6.0.1, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkloadManager.WorkfowExecuter": "[1.0.0, )" } }, "monai.deploy.workflowmanager.payloadlistener": { "type": "Project", "dependencies": { - "Ardalis.GuardClauses": "4.0.1", - "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkflowManager.Configuration": "1.0.0", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Logging": "1.0.0", - "Monai.Deploy.WorkloadManager.WorkfowExecuter": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Microsoft.Extensions.Hosting.Abstractions": "[6.0.0, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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": { - "Ardalis.GuardClauses": "4.0.1", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Contracts": "1.0.0", - "Monai.Deploy.WorkflowManager.Logging": "1.0.0" + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Contracts": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Logging": "[1.0.0, )" } }, "monai.deploy.workloadmanager.workfowexecuter": { "type": "Project", "dependencies": { - "AWSSDK.SecurityToken": "3.7.1.191", - "Ardalis.GuardClauses": "4.0.1", - "Monai.Deploy.Messaging": "0.1.3-rc0012", - "Monai.Deploy.Storage": "0.2.5", - "Monai.Deploy.WorkflowManager.Common": "1.0.0", - "Monai.Deploy.WorkflowManager.ConditionsResolver": "1.0.0", - "Monai.Deploy.WorkflowManager.Configuration": "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", - "Newtonsoft.Json": "13.0.1" + "AWSSDK.SecurityToken": "[3.7.1.193, )", + "Ardalis.GuardClauses": "[4.0.1, )", + "Monai.Deploy.Messaging": "[0.1.6-rc0001, )", + "Monai.Deploy.Storage": "[0.2.5, )", + "Monai.Deploy.WorkflowManager.Common": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.ConditionsResolver": "[1.0.0, )", + "Monai.Deploy.WorkflowManager.Configuration": "[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, )", + "Newtonsoft.Json": "[13.0.1, )" } } } diff --git a/tests/run-tests.sh b/tests/run-tests.sh index c5caaf8ae..2198d3093 100644 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -23,13 +23,13 @@ fi if [ -f /.dockerenv ]; then echo "##### Installing apt packages..." apt-get update - apt-get install -y dcmtk sudo sqlite3 + apt-get install -y dcmtk sudo fi if [ ! -z ${CI} ]; then echo "##### Installing apt packages..." sudo apt-get update - sudo apt-get install -y dcmtk sqlite3 + sudo apt-get install -y dcmtk fi if [ -d "$RESULTS_DIR" ]; then