diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5961f1d7..070b6fc3 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -154,8 +154,8 @@ jobs:
cache-from: type=gha
cache-to: type=gha,mode=max
- calculation-build-push:
- name: Calculation Build & Push Docker
+ analysis-build-push:
+ name: Analysis Build & Push Docker
needs: backend-test
runs-on: ubuntu-latest
permissions:
@@ -179,15 +179,15 @@ jobs:
id: meta
run: echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- - name: Build and push Calculation Docker image
+ - name: Build and push Analysis Docker image
uses: docker/build-push-action@v7
with:
context: .
- file: ./calculation.Dockerfile
+ file: ./analysis.Dockerfile
push: true
tags: |
- dxworks/scriptbee/calculation:${{ steps.meta.outputs.version }}
- dxworks/scriptbee/calculation:latest
+ dxworks/scriptbee/analysis:${{ steps.meta.outputs.version }}
+ dxworks/scriptbee/analysis:latest
cache-from: type=gha
cache-to: type=gha,mode=max
@@ -196,7 +196,7 @@ jobs:
# ------------------------------------------------------------------
create-release:
name: Create GitHub Release
- needs: [ ui-build-push, gateway-build-push, calculation-build-push ]
+ needs: [ ui-build-push, gateway-build-push, analysis-build-push ]
runs-on: ubuntu-latest
permissions:
contents: write
diff --git a/ScriptBeeClient/src/app/components/instance-manager/instance-manager.component.ts b/ScriptBeeClient/src/app/components/instance-manager/instance-manager.component.ts
index 21a99626..3fee230d 100644
--- a/ScriptBeeClient/src/app/components/instance-manager/instance-manager.component.ts
+++ b/ScriptBeeClient/src/app/components/instance-manager/instance-manager.component.ts
@@ -10,7 +10,7 @@ import { rxResource } from '@angular/core/rxjs-interop';
import { of } from 'rxjs';
import { InstanceService } from '../../services/instances/instance.service';
import { ProjectStateService } from '../../services/projects/project-state.service';
-import { CalculationInstanceStatus, InstanceInfo } from '../../types/instance';
+import { InstanceStatus, InstanceInfo } from '../../types/instance';
import { ConfirmationDialogComponent } from '../dialogs/confirmation-dialog/confirmation-dialog.component';
@Component({
@@ -56,7 +56,7 @@ export class InstanceManagerComponent {
return this.instances().find((i) => i.id === id);
});
- getStatusIcon(status: CalculationInstanceStatus): string {
+ getStatusIcon(status: InstanceStatus): string {
switch (status) {
case 'Running':
return 'check_circle';
@@ -71,7 +71,7 @@ export class InstanceManagerComponent {
}
}
- getStatusClass(status: CalculationInstanceStatus): string {
+ getStatusClass(status: InstanceStatus): string {
return status.toLowerCase();
}
diff --git a/ScriptBeeClient/src/app/types/instance.ts b/ScriptBeeClient/src/app/types/instance.ts
index 04bbbccf..5a05aacd 100644
--- a/ScriptBeeClient/src/app/types/instance.ts
+++ b/ScriptBeeClient/src/app/types/instance.ts
@@ -1,7 +1,7 @@
-export type CalculationInstanceStatus = 'Allocating' | 'Running' | 'Deallocating' | 'NotFound';
+export type InstanceStatus = 'Allocating' | 'Running' | 'Deallocating' | 'NotFound';
export interface InstanceInfo {
id: string;
creationDate: string;
- status: CalculationInstanceStatus;
+ status: InstanceStatus;
}
diff --git a/ScriptBeeWebApp/src/Analysis/Application/UseCases.Analysis/CalculationInstanceCommand.cs b/ScriptBeeWebApp/src/Analysis/Application/UseCases.Analysis/CalculationInstanceCommand.cs
deleted file mode 100644
index 6056cbad..00000000
--- a/ScriptBeeWebApp/src/Analysis/Application/UseCases.Analysis/CalculationInstanceCommand.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-namespace ScriptBee.UseCases.Analysis;
-
-public record CalculationInstanceCommand(string ImageName);
diff --git a/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Config/UserFolderSettings.cs b/ScriptBeeWebApp/src/Common/Application.Model/Config/UserFolderSettings.cs
similarity index 64%
rename from ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Config/UserFolderSettings.cs
rename to ScriptBeeWebApp/src/Common/Application.Model/Config/UserFolderSettings.cs
index 38534126..c53f1fb1 100644
--- a/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Config/UserFolderSettings.cs
+++ b/ScriptBeeWebApp/src/Common/Application.Model/Config/UserFolderSettings.cs
@@ -1,4 +1,4 @@
-namespace ScriptBee.Artifacts.Config;
+namespace ScriptBee.Application.Model.Config;
public class UserFolderSettings
{
diff --git a/ScriptBeeWebApp/src/Common/Model/Instance/CalculationInstanceStatus.cs b/ScriptBeeWebApp/src/Common/Model/Instance/AnalysisInstanceStatus.cs
similarity index 74%
rename from ScriptBeeWebApp/src/Common/Model/Instance/CalculationInstanceStatus.cs
rename to ScriptBeeWebApp/src/Common/Model/Instance/AnalysisInstanceStatus.cs
index 5cc62e23..bc6c10ac 100644
--- a/ScriptBeeWebApp/src/Common/Model/Instance/CalculationInstanceStatus.cs
+++ b/ScriptBeeWebApp/src/Common/Model/Instance/AnalysisInstanceStatus.cs
@@ -1,6 +1,6 @@
namespace ScriptBee.Domain.Model.Instance;
-public enum CalculationInstanceStatus
+public enum AnalysisInstanceStatus
{
Allocating,
Running,
diff --git a/ScriptBeeWebApp/src/Common/Model/Instance/InstanceInfo.cs b/ScriptBeeWebApp/src/Common/Model/Instance/InstanceInfo.cs
index 76cd8a82..f73a26f2 100644
--- a/ScriptBeeWebApp/src/Common/Model/Instance/InstanceInfo.cs
+++ b/ScriptBeeWebApp/src/Common/Model/Instance/InstanceInfo.cs
@@ -7,5 +7,5 @@ public record InstanceInfo(
ProjectId ProjectId,
string Url,
DateTimeOffset CreationDate,
- CalculationInstanceStatus Status
+ AnalysisInstanceStatus Status
);
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Analysis.Instance.Docker.csproj b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Analysis.Instance.Docker.csproj
index 02da4c38..734b71df 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Analysis.Instance.Docker.csproj
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Analysis.Instance.Docker.csproj
@@ -8,6 +8,7 @@
+
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/CalculationInstanceDockerAdapter.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/AnalysisInstanceDockerAdapter.cs
similarity index 65%
rename from ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/CalculationInstanceDockerAdapter.cs
rename to ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/AnalysisInstanceDockerAdapter.cs
index 7965a41b..ce969428 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/CalculationInstanceDockerAdapter.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/AnalysisInstanceDockerAdapter.cs
@@ -5,6 +5,7 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ScriptBee.Analysis.Instance.Docker.Config;
+using ScriptBee.Application.Model.Config;
using ScriptBee.Domain.Model.Analysis;
using ScriptBee.Domain.Model.Instance;
using ScriptBee.Domain.Model.Project;
@@ -12,10 +13,11 @@
namespace ScriptBee.Analysis.Instance.Docker;
-public class CalculationInstanceDockerAdapter(
- IOptions config,
+public class AnalysisInstanceDockerAdapter(
+ IOptions config,
+ IOptions userFolderSettingsOptions,
IConfiguration configuration,
- ILogger logger,
+ ILogger logger,
IFreePortProvider freePortProvider
) : IAllocateInstance, IDeallocateInstance, IGetInstanceStatus
{
@@ -26,8 +28,8 @@ public async Task Allocate(
CancellationToken cancellationToken = default
)
{
- var calculationDockerConfig = config.Value;
- using var client = CreateDockerClient(calculationDockerConfig);
+ var analysisDockerConfig = config.Value;
+ using var client = CreateDockerClient(analysisDockerConfig);
await PullImageIfNeeded(client, image.ImageName, cancellationToken);
@@ -36,36 +38,32 @@ public async Task Allocate(
var portBindings = new Dictionary>
{
{
- $"{calculationDockerConfig.Port}/tcp",
+ $"{analysisDockerConfig.Port}/tcp",
new List { new() { HostPort = hostPort.ToString() } }
},
};
var mongoDbConnectionString =
- calculationDockerConfig.MongoDbConnectionString
+ analysisDockerConfig.MongoDbConnectionString
?? configuration.GetConnectionString("mongodb");
var response = await client.Containers.CreateContainerAsync(
new CreateContainerParameters
{
- Name = $"scriptbee-calculation-{instanceId}",
+ Name = $"scriptbee-analysis-{instanceId}",
Image = image.ImageName,
HostConfig = new HostConfig
{
- NetworkMode = calculationDockerConfig.Network,
+ NetworkMode = analysisDockerConfig.Network,
PortBindings = portBindings,
+ Binds = GetBinds(),
},
ExposedPorts = new Dictionary
{
- { $"{calculationDockerConfig.Port}/tcp", new EmptyStruct() },
- },
- Env = new List
- {
- $"ScriptBee__InstanceId={instanceId}",
- $"ScriptBee__ProjectId={projectDetails.Id}",
- $"ScriptBee__ProjectName={projectDetails.Name}",
- $"ConnectionStrings__mongodb={mongoDbConnectionString}",
+ { $"{analysisDockerConfig.Port}/tcp", new EmptyStruct() },
},
+ Env = GetEnvironmentVariables(projectDetails, instanceId, mongoDbConnectionString),
+ Volumes = GetVolumes(),
},
cancellationToken
);
@@ -82,29 +80,19 @@ await client.Containers.StartContainerAsync(
return await GetContainerUrl(
client,
response.ID,
- calculationDockerConfig.Network,
+ analysisDockerConfig.Network,
hostPort,
cancellationToken
);
}
- private static DockerClient CreateDockerClient(CalculationDockerConfig calculationDockerConfig)
+ public async Task Deallocate(InstanceInfo instanceInfo, CancellationToken cancellationToken)
{
- return new DockerClientConfiguration(
- new Uri(calculationDockerConfig.DockerSocket)
- ).CreateClient();
- }
-
- public async Task Deallocate(
- InstanceInfo calculationInstanceInfo,
- CancellationToken cancellationToken
- )
- {
- var containerName = $"scriptbee-calculation-{calculationInstanceInfo.Id}";
+ var containerName = $"scriptbee-analysis-{instanceInfo.Id}";
logger.LogInformation("Attempting to deallocate container: {Name}", containerName);
- var calculationDockerConfig = config.Value;
- using var client = CreateDockerClient(calculationDockerConfig);
+ var analysisDockerConfig = config.Value;
+ using var client = CreateDockerClient(analysisDockerConfig);
IList containers = await client.Containers.ListContainersAsync(
new ContainersListParameters
@@ -164,6 +152,107 @@ await client.Containers.RemoveContainerAsync(
}
}
+ public async Task GetStatus(
+ InstanceId instanceId,
+ CancellationToken cancellationToken
+ )
+ {
+ var containerName = $"scriptbee-analysis-{instanceId}";
+ var analysisDockerConfig = config.Value;
+ using var client = CreateDockerClient(analysisDockerConfig);
+
+ var containers = await client.Containers.ListContainersAsync(
+ new ContainersListParameters
+ {
+ All = true,
+ Filters = new Dictionary>
+ {
+ {
+ "name",
+ new Dictionary { { containerName, true } }
+ },
+ },
+ },
+ cancellationToken
+ );
+
+ var container = containers.FirstOrDefault();
+
+ if (container == null)
+ {
+ return AnalysisInstanceStatus.NotFound;
+ }
+
+ return container.State.ToLower() switch
+ {
+ "running" => AnalysisInstanceStatus.Running,
+ "created" or "restarting" => AnalysisInstanceStatus.Allocating,
+ "removing" => AnalysisInstanceStatus.Deallocating,
+ _ => AnalysisInstanceStatus.NotFound,
+ };
+ }
+
+ private List GetEnvironmentVariables(
+ ProjectDetails projectDetails,
+ InstanceId instanceId,
+ string? mongoDbConnectionString
+ )
+ {
+ var environmentVariables = new List
+ {
+ $"ScriptBee__InstanceId={instanceId}",
+ $"ScriptBee__ProjectId={projectDetails.Id}",
+ $"ScriptBee__ProjectName={projectDetails.Name}",
+ $"ConnectionStrings__mongodb={mongoDbConnectionString}",
+ };
+
+ if (
+ string.IsNullOrEmpty(userFolderSettingsOptions.Value.UserFolderPath)
+ && string.IsNullOrEmpty(config.Value.UserFolderHostPath)
+ )
+ {
+ return environmentVariables;
+ }
+
+ environmentVariables.Add($"UserFolder__UserFolderPath={config.Value.UserFolderVolumePath}");
+
+ return environmentVariables;
+ }
+
+ private List GetBinds()
+ {
+ var hostPath =
+ config.Value.UserFolderHostPath ?? userFolderSettingsOptions.Value.UserFolderPath;
+ return string.IsNullOrEmpty(hostPath)
+ ? []
+ : [$"{hostPath}:{config.Value.UserFolderVolumePath}"];
+ }
+
+ private Dictionary GetVolumes()
+ {
+ var hostPath =
+ config.Value.UserFolderHostPath ?? userFolderSettingsOptions.Value.UserFolderPath;
+ if (
+ string.IsNullOrEmpty(hostPath)
+ || string.IsNullOrEmpty(config.Value.UserFolderVolumePath)
+ )
+ {
+ return new Dictionary();
+ }
+
+ return new Dictionary
+ {
+ { config.Value.UserFolderVolumePath, new EmptyStruct() },
+ };
+ }
+
+ private static DockerClient CreateDockerClient(AnalysisDockerConfig analysisDockerConfig)
+ {
+ return new DockerClientConfiguration(
+ new Uri(analysisDockerConfig.DockerSocket)
+ ).CreateClient();
+ }
+
private static async Task GetContainerUrl(
DockerClient client,
string containerId,
@@ -195,7 +284,7 @@ private async Task PullImageIfNeeded(
{
var parts = imageName.Split(":");
var image = parts[0];
- var tag = parts[1];
+ var tag = parts.Length > 1 ? parts[1] : "latest";
var images = await client.Images.ListImagesAsync(
new ImagesListParameters
@@ -228,44 +317,4 @@ await client.Images.CreateImageAsync(
logger.LogInformation("Image {Image}:{Tag} already exists", image, tag);
}
}
-
- public async Task GetStatus(
- InstanceId instanceId,
- CancellationToken cancellationToken
- )
- {
- var containerName = $"scriptbee-calculation-{instanceId}";
- var calculationDockerConfig = config.Value;
- using var client = CreateDockerClient(calculationDockerConfig);
-
- var containers = await client.Containers.ListContainersAsync(
- new ContainersListParameters
- {
- All = true,
- Filters = new Dictionary>
- {
- {
- "name",
- new Dictionary { { containerName, true } }
- },
- },
- },
- cancellationToken
- );
-
- var container = containers.FirstOrDefault();
-
- if (container == null)
- {
- return CalculationInstanceStatus.NotFound;
- }
-
- return container.State.ToLower() switch
- {
- "running" => CalculationInstanceStatus.Running,
- "created" or "restarting" => CalculationInstanceStatus.Allocating,
- "removing" => CalculationInstanceStatus.Deallocating,
- _ => CalculationInstanceStatus.NotFound,
- };
- }
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Config/CalculationDockerConfig.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Config/AnalysisDockerConfig.cs
similarity index 64%
rename from ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Config/CalculationDockerConfig.cs
rename to ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Config/AnalysisDockerConfig.cs
index 8d8fc2a9..093dd12f 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Config/CalculationDockerConfig.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Config/AnalysisDockerConfig.cs
@@ -1,6 +1,6 @@
namespace ScriptBee.Analysis.Instance.Docker.Config;
-public class CalculationDockerConfig
+public class AnalysisDockerConfig
{
public required string DockerSocket { get; init; }
@@ -9,4 +9,8 @@ public class CalculationDockerConfig
public string? Network { get; init; }
public string? MongoDbConnectionString { get; init; }
+
+ public string? UserFolderVolumePath { get; init; }
+
+ public string? UserFolderHostPath { get; init; }
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Extensions/AnalysisDockerInstanceExtensions.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Extensions/AnalysisDockerInstanceExtensions.cs
index 88a3543b..0f3e3bb7 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Extensions/AnalysisDockerInstanceExtensions.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Analysis.Instance.Docker/Extensions/AnalysisDockerInstanceExtensions.cs
@@ -11,14 +11,12 @@ public static IServiceCollection AddDockerInstanceAdapter(
string dockerConfigSection
)
{
- services
- .AddOptions()
- .BindConfiguration("ScriptBee:Calculation:Docker");
+ services.AddOptions().BindConfiguration("ScriptBee:Analysis:Docker");
return services
.AddSingleton()
- .AddSingleton()
- .AddSingleton()
- .AddSingleton();
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton();
}
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/Entity/MongodbProjectInstance.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/Entity/MongodbProjectInstance.cs
index 111bbcc9..f777f874 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/Entity/MongodbProjectInstance.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/Entity/MongodbProjectInstance.cs
@@ -13,14 +13,14 @@ public class MongodbProjectInstance : IDocument
public required string Url { get; init; }
public DateTimeOffset CreationDate { get; init; }
- public InstanceInfo ToCalculationInstanceInfo()
+ public InstanceInfo ToInstanceInfo()
{
return new InstanceInfo(
new InstanceId(Id),
Domain.Model.Project.ProjectId.FromValue(ProjectId),
Url,
CreationDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
);
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/ProjectInstancesPersistenceAdapter.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/ProjectInstancesPersistenceAdapter.cs
index 771be61b..870acebe 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/ProjectInstancesPersistenceAdapter.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Persistence.Mongodb.Gateway/ProjectInstancesPersistenceAdapter.cs
@@ -34,7 +34,7 @@ CancellationToken cancellationToken
cancellationToken
);
- return projectInstances.Select(instance => instance.ToCalculationInstanceInfo());
+ return projectInstances.Select(instance => instance.ToInstanceInfo());
}
public async Task> Get(
@@ -49,7 +49,7 @@ CancellationToken cancellationToken
return new InstanceDoesNotExistsError(id);
}
- return instance.ToCalculationInstanceInfo();
+ return instance.ToInstanceInfo();
}
public async Task Delete(InstanceInfo instanceInfo, CancellationToken cancellationToken)
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Web/Config/ScriptBeeCalculationConfig.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Web/Config/ScriptBeeAnalysisConfig.cs
similarity index 65%
rename from ScriptBeeWebApp/src/Gateway/Adapters/Web/Config/ScriptBeeCalculationConfig.cs
rename to ScriptBeeWebApp/src/Gateway/Adapters/Web/Config/ScriptBeeAnalysisConfig.cs
index 9df3087f..475a78de 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Web/Config/ScriptBeeCalculationConfig.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Web/Config/ScriptBeeAnalysisConfig.cs
@@ -2,11 +2,11 @@
namespace ScriptBee.Web.Config;
-public class ScriptBeeCalculationConfig
+public class ScriptBeeAnalysisConfig
{
public required string Image { get; init; }
public required string Driver { get; init; }
- public CalculationDockerConfig? Docker { get; init; }
+ public AnalysisDockerConfig? Docker { get; init; }
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Web/EndpointDefinitions/Instances/GetProjectInstancesEndpoint.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Web/EndpointDefinitions/Instances/GetProjectInstancesEndpoint.cs
index 88d53027..db670461 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Web/EndpointDefinitions/Instances/GetProjectInstancesEndpoint.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Web/EndpointDefinitions/Instances/GetProjectInstancesEndpoint.cs
@@ -27,8 +27,8 @@ private static async Task> GetAllInstance
)
{
var id = ProjectId.FromValue(projectId);
- var calculationInstanceInfos = await useCase.GetAllInstances(id, cancellationToken);
+ var instanceInfos = await useCase.GetAllInstances(id, cancellationToken);
- return TypedResults.Ok(WebGetProjectInstancesListResponse.Map(calculationInstanceInfos));
+ return TypedResults.Ok(WebGetProjectInstancesListResponse.Map(instanceInfos));
}
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Web/Extensions/ScriptBeeCalculationConfigExtensions.cs b/ScriptBeeWebApp/src/Gateway/Adapters/Web/Extensions/ScriptBeeAnalysisConfigExtensions.cs
similarity index 58%
rename from ScriptBeeWebApp/src/Gateway/Adapters/Web/Extensions/ScriptBeeCalculationConfigExtensions.cs
rename to ScriptBeeWebApp/src/Gateway/Adapters/Web/Extensions/ScriptBeeAnalysisConfigExtensions.cs
index 6e993155..07c94b08 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Web/Extensions/ScriptBeeCalculationConfigExtensions.cs
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Web/Extensions/ScriptBeeAnalysisConfigExtensions.cs
@@ -7,28 +7,28 @@
namespace ScriptBee.Web.Extensions;
-public static class ScriptBeeCalculationConfigExtensions
+public static class ScriptBeeAnalysisConfigExtensions
{
public static IServiceCollection AddAnalysisConfig(
this IServiceCollection services,
ConfigurationManager configurationManager
)
{
- var scriptBeeCalculationConfig = configurationManager
- .GetSection("ScriptBee:Calculation")
- .Get()!;
+ var scriptBeeAnalysisConfig = configurationManager
+ .GetSection("ScriptBee:Analysis")
+ .Get()!;
- if (scriptBeeCalculationConfig.Driver != "Docker")
+ if (scriptBeeAnalysisConfig.Driver != "Docker")
{
- throw new AnalysisInstanceDriverTypeNotSupported(scriptBeeCalculationConfig.Driver);
+ throw new AnalysisInstanceDriverTypeNotSupported(scriptBeeAnalysisConfig.Driver);
}
services.AddSingleton(
_ => new InstanceTemplateProvider(
- new AnalysisInstanceImage(scriptBeeCalculationConfig.Image)
+ new AnalysisInstanceImage(scriptBeeAnalysisConfig.Image)
)
);
- return services.AddDockerInstanceAdapter("ScriptBee:Calculation:Docker");
+ return services.AddDockerInstanceAdapter("ScriptBee:Analysis:Docker");
}
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.Development.json b/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.Development.json
index d5f223a0..e1447374 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.Development.json
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.Development.json
@@ -10,10 +10,11 @@
}
},
"ScriptBee": {
- "Calculation": {
+ "Analysis": {
"Docker": {
"DockerSocket": "npipe://./pipe/docker_engine",
- "MongoDbConnectionString": "mongodb://root:example@host.docker.internal:27017/ScriptBee?authSource=admin"
+ "MongoDbConnectionString": "mongodb://root:example@host.docker.internal:27017/ScriptBee?authSource=admin",
+ "UserFolderHostPath": ""
}
}
}
diff --git a/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.json b/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.json
index 2b4e0f13..531fac0d 100644
--- a/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.json
+++ b/ScriptBeeWebApp/src/Gateway/Adapters/Web/appsettings.json
@@ -30,11 +30,12 @@
"UserFolder": {
},
"ScriptBee": {
- "Calculation": {
- "Image": "dxworks/scriptbee/calculation:latest",
+ "Analysis": {
+ "Image": "dxworks/scriptbee/analysis:latest",
"Driver": "Docker",
"Docker": {
- "DockerSocket": "unix:///var/run/docker.sock"
+ "DockerSocket": "unix:///var/run/docker.sock",
+ "UserFolderVolumePath": "/root/.scriptbee"
}
}
},
diff --git a/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IDeallocateInstance.cs b/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IDeallocateInstance.cs
index 5759a840..cef7673e 100644
--- a/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IDeallocateInstance.cs
+++ b/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IDeallocateInstance.cs
@@ -4,5 +4,5 @@ namespace ScriptBee.Ports.Instance.Allocation;
public interface IDeallocateInstance
{
- Task Deallocate(InstanceInfo calculationInstanceInfo, CancellationToken cancellationToken);
+ Task Deallocate(InstanceInfo instanceInfo, CancellationToken cancellationToken);
}
diff --git a/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IGetInstanceStatus.cs b/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IGetInstanceStatus.cs
index 7ab69586..2b6f4c0e 100644
--- a/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IGetInstanceStatus.cs
+++ b/ScriptBeeWebApp/src/Gateway/Application/Ports.Instance.Allocation/IGetInstanceStatus.cs
@@ -4,7 +4,7 @@ namespace ScriptBee.Ports.Instance.Allocation;
public interface IGetInstanceStatus
{
- Task GetStatus(
+ Task GetStatus(
InstanceId instanceId,
CancellationToken cancellationToken
);
diff --git a/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/AllocateProjectInstanceService.cs b/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/AllocateProjectInstanceService.cs
index d11a5da9..84ea4008 100644
--- a/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/AllocateProjectInstanceService.cs
+++ b/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/AllocateProjectInstanceService.cs
@@ -55,7 +55,7 @@ CancellationToken cancellationToken
projectDetails.Id,
instanceUrl,
dateTimeProvider.UtcNow(),
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
);
var info = await createProjectInstance.Create(instanceInfo, cancellationToken);
diff --git a/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/InstallPluginsForNewlyAllocatedInstance.cs b/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/InstallPluginsForNewlyAllocatedInstance.cs
index 346e40b6..f12a560d 100644
--- a/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/InstallPluginsForNewlyAllocatedInstance.cs
+++ b/ScriptBeeWebApp/src/Gateway/Application/Service.Project/Analysis/InstallPluginsForNewlyAllocatedInstance.cs
@@ -18,15 +18,15 @@ public async Task InstallPlugins(
CancellationToken cancellationToken
)
{
- CalculationInstanceStatus status;
+ AnalysisInstanceStatus status;
do
{
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
status = await getInstanceStatus.GetStatus(instanceInfo.Id, cancellationToken);
- } while (status == CalculationInstanceStatus.Allocating);
+ } while (status == AnalysisInstanceStatus.Allocating);
- if (status != CalculationInstanceStatus.Running)
+ if (status != AnalysisInstanceStatus.Running)
{
logger.LogWarning(
"Could not install plugins for instance {Instance} because instance is {Status}",
diff --git a/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/ConfigFoldersService.cs b/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/ConfigFoldersService.cs
index a726643e..8a842489 100644
--- a/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/ConfigFoldersService.cs
+++ b/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/ConfigFoldersService.cs
@@ -1,5 +1,5 @@
using Microsoft.Extensions.Options;
-using ScriptBee.Artifacts.Config;
+using ScriptBee.Application.Model.Config;
using ScriptBee.Domain.Model.Config;
using ScriptBee.Domain.Model.Project;
diff --git a/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Extensions/ConfigureProjectScriptingExtensions.cs b/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Extensions/ConfigureProjectScriptingExtensions.cs
index 43d172a1..2758322e 100644
--- a/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Extensions/ConfigureProjectScriptingExtensions.cs
+++ b/ScriptBeeWebApp/src/Workspace/Artifacts/Artifacts/Extensions/ConfigureProjectScriptingExtensions.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
-using ScriptBee.Artifacts.Config;
+using ScriptBee.Application.Model.Config;
namespace ScriptBee.Artifacts.Extensions;
diff --git a/ScriptBeeWebApp/test/Common/Tests.Common/InstanceInfoFixture.cs b/ScriptBeeWebApp/test/Common/Tests.Common/InstanceInfoFixture.cs
index 839b14c4..176a94f9 100644
--- a/ScriptBeeWebApp/test/Common/Tests.Common/InstanceInfoFixture.cs
+++ b/ScriptBeeWebApp/test/Common/Tests.Common/InstanceInfoFixture.cs
@@ -11,6 +11,6 @@ public static InstanceInfo BasicInstanceInfo(ProjectId projectId) =>
projectId,
"http://instance",
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
);
}
diff --git a/ScriptBeeWebApp/test/Common/Tests.Common/TestWebApplicationFactory.cs b/ScriptBeeWebApp/test/Common/Tests.Common/TestWebApplicationFactory.cs
index 23d78dfa..ccc53e9a 100644
--- a/ScriptBeeWebApp/test/Common/Tests.Common/TestWebApplicationFactory.cs
+++ b/ScriptBeeWebApp/test/Common/Tests.Common/TestWebApplicationFactory.cs
@@ -43,9 +43,9 @@ private static void ConfigureConfigurations(IWebHostBuilder builder)
{
var configurationValues = new Dictionary
{
- { "ScriptBee:Calculation:Driver", "Docker" },
- { "ScriptBee:Calculation:Image", "test-image" },
- { "ScriptBee:Calculation:Docker:DockerSocket", "unix:///var/run/docker.sock" },
+ { "ScriptBee:Analysis:Driver", "Docker" },
+ { "ScriptBee:Analysis:Image", "test-image" },
+ { "ScriptBee:Analysis:Docker:DockerSocket", "unix:///var/run/docker.sock" },
};
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(configurationValues)
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/CalculationInstanceDockerAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/AnalysisInstanceDockerAdapterTest.cs
similarity index 60%
rename from ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/CalculationInstanceDockerAdapterTest.cs
rename to ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/AnalysisInstanceDockerAdapterTest.cs
index a932615f..49b85511 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/CalculationInstanceDockerAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/AnalysisInstanceDockerAdapterTest.cs
@@ -4,6 +4,7 @@
using Microsoft.Extensions.Options;
using NSubstitute;
using ScriptBee.Analysis.Instance.Docker.Config;
+using ScriptBee.Application.Model.Config;
using ScriptBee.Domain.Model.Analysis;
using ScriptBee.Domain.Model.Instance;
using ScriptBee.Domain.Model.Project;
@@ -11,31 +12,47 @@
namespace ScriptBee.Analysis.Instance.Docker.Tests;
-public class CalculationInstanceDockerAdapterTest : IClassFixture
+public class AnalysisInstanceDockerAdapterTest : IClassFixture
{
private readonly IFreePortProvider _freePortProvider = Substitute.For();
private readonly DockerFixture _dockerFixture;
private readonly IConfiguration _configuration = Substitute.For();
- private readonly ILogger _logger;
- private readonly IOptions _configOptions;
+ private readonly ILogger _logger;
+ private readonly IOptions _configOptions;
+ private readonly IOptions _userFolderOptions;
private readonly int _testPort;
private const string TestMongoConnectionString = "mongodb://test:27017";
private const string OverrideMongoConnectionString = "mongodb://mongodb-host:27017";
- public CalculationInstanceDockerAdapterTest(
+ private static readonly string TestUserFolderPath = Path.Combine(
+ Path.GetTempPath(),
+ "scriptbee-test-userfolder"
+ )
+ .Replace("\\", "/");
+ private static readonly string OverrideHostPath = Path.Combine(
+ Path.GetTempPath(),
+ "scriptbee-test-override"
+ )
+ .Replace("\\", "/");
+
+ public AnalysisInstanceDockerAdapterTest(
DockerFixture dockerFixture,
ITestOutputHelper outputHelper
)
{
_dockerFixture = dockerFixture;
- var config = new CalculationDockerConfig
+ var config = new AnalysisDockerConfig
{
DockerSocket = dockerFixture.DockerClient.Configuration.EndpointBaseUri.ToString(),
Network = DockerFixture.TestNetworkName,
+ UserFolderVolumePath = "/root/.scriptbee",
};
_configOptions = Options.Create(config);
+ _userFolderOptions = Options.Create(
+ new UserFolderSettings { UserFolderPath = TestUserFolderPath }
+ );
_testPort = new FreePortProvider().GetFreeTcpPort();
_freePortProvider.GetFreeTcpPort().Returns(_testPort);
@@ -47,15 +64,16 @@ ITestOutputHelper outputHelper
var loggerFactory = LoggerFactory.Create(builder =>
builder.AddProvider(new XUnitLoggerProvider(outputHelper))
);
- _logger = loggerFactory.CreateLogger();
+ _logger = loggerFactory.CreateLogger();
}
[Fact]
public async Task Allocate_ShouldCreateAndStartContainerAndReturnUrlWithNetworkIP()
{
// Arrange
- var adapter = new CalculationInstanceDockerAdapter(
+ var adapter = new AnalysisInstanceDockerAdapter(
_configOptions,
+ _userFolderOptions,
_configuration,
_logger,
_freePortProvider
@@ -80,7 +98,7 @@ public async Task Allocate_ShouldCreateAndStartContainerAndReturnUrlWithNetworkI
TestContext.Current.CancellationToken
);
var ourContainer = containers.FirstOrDefault(c =>
- c.Names.Contains($"/scriptbee-calculation-{instanceId}")
+ c.Names.Contains($"/scriptbee-analysis-{instanceId}")
);
ourContainer.ShouldNotBeNull();
ourContainer.State.ShouldBe("running");
@@ -97,8 +115,9 @@ public async Task Allocate_ShouldCreateAndStartContainerAndReturnUrlWithNetworkI
public async Task Allocate_ShouldUseConfiguredNetworkAndContainerName()
{
// Arrange
- var adapter = new CalculationInstanceDockerAdapter(
+ var adapter = new AnalysisInstanceDockerAdapter(
_configOptions,
+ _userFolderOptions,
_configuration,
_logger,
_freePortProvider
@@ -126,7 +145,7 @@ await adapter.Allocate(
"name",
new Dictionary
{
- { $"scriptbee-calculation-{instanceId}", true },
+ { $"scriptbee-analysis-{instanceId}", true },
}
},
},
@@ -134,7 +153,7 @@ await adapter.Allocate(
TestContext.Current.CancellationToken
);
containers.ShouldHaveSingleItem();
- containers.First().Names.ShouldContain($"/scriptbee-calculation-{instanceId}");
+ containers.First().Names.ShouldContain($"/scriptbee-analysis-{instanceId}");
containers.First().NetworkSettings.Networks.ShouldContainKey(DockerFixture.TestNetworkName);
}
@@ -142,8 +161,9 @@ await adapter.Allocate(
public async Task Allocate_ShouldPassEnvironmentVariables()
{
// Arrange
- var adapter = new CalculationInstanceDockerAdapter(
+ var adapter = new AnalysisInstanceDockerAdapter(
_configOptions,
+ _userFolderOptions,
_configuration,
_logger,
_freePortProvider
@@ -167,7 +187,7 @@ await adapter.Allocate(
// Assert
var containerInspect = await _dockerFixture.DockerClient.Containers.InspectContainerAsync(
- $"scriptbee-calculation-{instanceId}",
+ $"scriptbee-analysis-{instanceId}",
TestContext.Current.CancellationToken
);
@@ -177,20 +197,132 @@ await adapter.Allocate(
containerInspect.Config.Env.ShouldContain(
$"ConnectionStrings__mongodb={TestMongoConnectionString}"
);
+ containerInspect.Config.Env.ShouldContain(
+ $"UserFolder__UserFolderPath={_configOptions.Value.UserFolderVolumePath}"
+ );
+ }
+
+ [Fact]
+ public async Task Allocate_ShouldMountVolumes_WhenUserFolderIsConfigured()
+ {
+ // Arrange
+ var adapter = new AnalysisInstanceDockerAdapter(
+ _configOptions,
+ _userFolderOptions,
+ _configuration,
+ _logger,
+ _freePortProvider
+ );
+ var projectDetails = ProjectDetailsFixture.BasicProjectDetails(ProjectId.FromValue("id"));
+ var instanceId = new InstanceId(Guid.NewGuid());
+ var image = new AnalysisInstanceImage(DockerFixture.TestImageName);
+
+ // Act
+ await adapter.Allocate(
+ projectDetails,
+ instanceId,
+ image,
+ TestContext.Current.CancellationToken
+ );
+
+ // Assert
+ var containerInspect = await _dockerFixture.DockerClient.Containers.InspectContainerAsync(
+ $"scriptbee-analysis-{instanceId}",
+ TestContext.Current.CancellationToken
+ );
+
+ containerInspect.HostConfig.Binds.ShouldContain(
+ $"{TestUserFolderPath}:{_configOptions.Value.UserFolderVolumePath}"
+ );
+ }
+
+ [Fact]
+ public async Task Allocate_ShouldUseUserFolderHostPath_WhenConfigured()
+ {
+ // Arrange
+ var config = new AnalysisDockerConfig
+ {
+ DockerSocket = _dockerFixture.DockerClient.Configuration.EndpointBaseUri.ToString(),
+ Network = DockerFixture.TestNetworkName,
+ UserFolderVolumePath = "/root/.scriptbee",
+ UserFolderHostPath = OverrideHostPath,
+ };
+ var adapter = new AnalysisInstanceDockerAdapter(
+ Options.Create(config),
+ _userFolderOptions,
+ _configuration,
+ _logger,
+ _freePortProvider
+ );
+ var projectDetails = ProjectDetailsFixture.BasicProjectDetails(ProjectId.FromValue("id"));
+ var instanceId = new InstanceId(Guid.NewGuid());
+ var image = new AnalysisInstanceImage(DockerFixture.TestImageName);
+
+ // Act
+ await adapter.Allocate(
+ projectDetails,
+ instanceId,
+ image,
+ TestContext.Current.CancellationToken
+ );
+
+ // Assert
+ var containerInspect = await _dockerFixture.DockerClient.Containers.InspectContainerAsync(
+ $"scriptbee-analysis-{instanceId}",
+ TestContext.Current.CancellationToken
+ );
+
+ containerInspect.HostConfig.Binds.ShouldContain(
+ $"{OverrideHostPath}:{_configOptions.Value.UserFolderVolumePath}"
+ );
+ }
+
+ [Fact]
+ public async Task Allocate_ShouldNotMountVolumes_WhenNoUserFolderIsConfigured()
+ {
+ // Arrange
+ var adapter = new AnalysisInstanceDockerAdapter(
+ _configOptions,
+ Options.Create(new UserFolderSettings { UserFolderPath = null }),
+ _configuration,
+ _logger,
+ _freePortProvider
+ );
+ var projectDetails = ProjectDetailsFixture.BasicProjectDetails(ProjectId.FromValue("id"));
+ var instanceId = new InstanceId(Guid.NewGuid());
+ var image = new AnalysisInstanceImage(DockerFixture.TestImageName);
+
+ // Act
+ await adapter.Allocate(
+ projectDetails,
+ instanceId,
+ image,
+ TestContext.Current.CancellationToken
+ );
+
+ // Assert
+ var containerInspect = await _dockerFixture.DockerClient.Containers.InspectContainerAsync(
+ $"scriptbee-analysis-{instanceId}",
+ TestContext.Current.CancellationToken
+ );
+
+ containerInspect.HostConfig.Binds.ShouldBeEmpty();
}
[Fact]
public async Task Allocate_ShouldUseOverrideMongoDbConnectionString_WhenConfigured()
{
// Arrange
- var config = new CalculationDockerConfig
+ var config = new AnalysisDockerConfig
{
DockerSocket = _dockerFixture.DockerClient.Configuration.EndpointBaseUri.ToString(),
Network = DockerFixture.TestNetworkName,
+ UserFolderVolumePath = "/root/.scriptbee",
MongoDbConnectionString = OverrideMongoConnectionString,
};
- var adapter = new CalculationInstanceDockerAdapter(
+ var adapter = new AnalysisInstanceDockerAdapter(
Options.Create(config),
+ _userFolderOptions,
_configuration,
_logger,
_freePortProvider
@@ -209,7 +341,7 @@ await adapter.Allocate(
// Assert
var containerInspect = await _dockerFixture.DockerClient.Containers.InspectContainerAsync(
- $"scriptbee-calculation-{instanceId}",
+ $"scriptbee-analysis-{instanceId}",
TestContext.Current.CancellationToken
);
@@ -222,8 +354,9 @@ await adapter.Allocate(
public async Task Deallocate_ShouldStopAndRemoveExistingContainer()
{
// Arrange
- var adapter = new CalculationInstanceDockerAdapter(
+ var adapter = new AnalysisInstanceDockerAdapter(
_configOptions,
+ _userFolderOptions,
_configuration,
_logger,
_freePortProvider
@@ -231,7 +364,7 @@ public async Task Deallocate_ShouldStopAndRemoveExistingContainer()
var projectDetails = ProjectDetailsFixture.BasicProjectDetails(ProjectId.FromValue("id"));
var instanceId = new InstanceId(Guid.NewGuid());
var instanceImage = new AnalysisInstanceImage(DockerFixture.TestImageName);
- var containerName = $"scriptbee-calculation-{instanceId}";
+ var containerName = $"scriptbee-analysis-{instanceId}";
var instanceUrl = await adapter.Allocate(
projectDetails,
@@ -245,7 +378,7 @@ public async Task Deallocate_ShouldStopAndRemoveExistingContainer()
ProjectId.FromValue("project-id"),
instanceUrl,
DateTimeOffset.UtcNow,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
);
// Act
@@ -272,8 +405,9 @@ public async Task Deallocate_ShouldStopAndRemoveExistingContainer()
[Fact]
public async Task Deallocate_ShouldNotThrowException_IfContainerNotFound()
{
- var adapter = new CalculationInstanceDockerAdapter(
+ var adapter = new AnalysisInstanceDockerAdapter(
_configOptions,
+ _userFolderOptions,
_configuration,
_logger,
_freePortProvider
@@ -284,7 +418,7 @@ public async Task Deallocate_ShouldNotThrowException_IfContainerNotFound()
ProjectId.FromValue("project-id"),
"http://fakeurl",
DateTimeOffset.UtcNow,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
);
var exception = await Record.ExceptionAsync(() =>
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/DockerFixture.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/DockerFixture.cs
index a5e50100..3197319a 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/DockerFixture.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Analysis.Instance.Docker.Tests/DockerFixture.cs
@@ -28,7 +28,7 @@ public async ValueTask DisposeAsync()
{
{
"name",
- new Dictionary { { "scriptbee-calculation", true } }
+ new Dictionary { { "scriptbee-analysis", true } }
},
},
}
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Persistence.Mongodb.Gateway.Tests/ProjectInstancesPersistenceAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Persistence.Mongodb.Gateway.Tests/ProjectInstancesPersistenceAdapterTest.cs
index ccbaa62c..97d59fd5 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Persistence.Mongodb.Gateway.Tests/ProjectInstancesPersistenceAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Persistence.Mongodb.Gateway.Tests/ProjectInstancesPersistenceAdapterTest.cs
@@ -89,14 +89,14 @@ await _mongoCollection.InsertOneAsync(
ProjectId.FromValue("all-project-id-1"),
"http://test:80",
creationDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
new(
new InstanceId("47e981a7-9cd6-46d6-ba11-7f3c65ce38a2"),
ProjectId.FromValue("all-project-id-1"),
"http://test:80",
creationDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
}
);
@@ -128,7 +128,7 @@ await _mongoCollection.InsertOneAsync(
ProjectId.FromValue("project-id"),
"http://test:80",
creationDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
)
);
}
@@ -158,7 +158,7 @@ public async Task GivenNoInstanceInfo_ShouldDeleteSuccessful()
ProjectId.FromValue("project-id"),
"http://test:80",
creationDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
)
@@ -188,7 +188,7 @@ await _adapter.Delete(
ProjectId.FromValue("project-id"),
"http://test:80",
creationDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/ClearInstanceContextAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/ClearInstanceContextAdapterTest.cs
index 2a082dfd..74e1df25 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/ClearInstanceContextAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/ClearInstanceContextAdapterTest.cs
@@ -32,7 +32,7 @@ await _clearInstanceContextAdapter.Clear(
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetInstanceContextAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetInstanceContextAdapterTest.cs
index 4b30dbe1..c2322747 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetInstanceContextAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetInstanceContextAdapterTest.cs
@@ -48,7 +48,7 @@ public async Task GetContextSlices()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetPluginsAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetPluginsAdapterTest.cs
index ee65a2b4..0b89fdaa 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetPluginsAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/GetPluginsAdapterTest.cs
@@ -38,7 +38,7 @@ public async Task ShouldReturnLoaderPlugin()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
@@ -72,7 +72,7 @@ public async Task ShouldReturnLinkerPlugin()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
@@ -106,7 +106,7 @@ public async Task ShouldReturnHelperFunctionsPlugin()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
@@ -142,7 +142,7 @@ public async Task ShouldReturnScriptGeneratorPlugin()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
@@ -180,7 +180,7 @@ public async Task ShouldReturnScriptRunnerPlugin()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
@@ -221,7 +221,7 @@ public async Task ShouldReturnUiPlugin()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
@@ -260,7 +260,7 @@ public async Task GivenUnknownKind_ShouldReturnPluginWithoutExtensionPoints()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
TestContext.Current.CancellationToken
);
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/InstallPluginAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/InstallPluginAdapterTest.cs
index 9b4f6e4e..5e8affad 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/InstallPluginAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/InstallPluginAdapterTest.cs
@@ -44,7 +44,7 @@ await _installPluginAdapter.Install(
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
"plugin-id",
"1.2.3",
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LinkInstanceContextAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LinkInstanceContextAdapterTest.cs
index 117602c9..58e1ac72 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LinkInstanceContextAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LinkInstanceContextAdapterTest.cs
@@ -32,7 +32,7 @@ await _linkInstanceContextAdapter.Link(
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
["linker-id"],
TestContext.Current.CancellationToken
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LoadInstanceContextAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LoadInstanceContextAdapterTest.cs
index 8055ee00..e2f2577d 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LoadInstanceContextAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/LoadInstanceContextAdapterTest.cs
@@ -33,7 +33,7 @@ await _loadInstanceContextAdapter.Load(
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
new Dictionary>
{
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/TriggerInstanceAnalysisAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/TriggerInstanceAnalysisAdapterTest.cs
index c43fa36f..82a02af9 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/TriggerInstanceAnalysisAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/TriggerInstanceAnalysisAdapterTest.cs
@@ -49,7 +49,7 @@ public async Task TriggerAnalysis()
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
new ScriptId("403e05ae-f16b-4fd7-8d23-375b1d2accb4"),
TestContext.Current.CancellationToken
diff --git a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/UninstallPluginAdapterTest.cs b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/UninstallPluginAdapterTest.cs
index 0d45b585..45691150 100644
--- a/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/UninstallPluginAdapterTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Adapters/Rest.Tests/UninstallPluginAdapterTest.cs
@@ -38,7 +38,7 @@ await _uninstallPluginAdapter.Uninstall(
ProjectId.FromValue("id"),
_server.Urls[0],
DateTimeOffset.Now,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
),
"plugin-id",
"1.2.3",
diff --git a/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/AllocateProjectInstanceServiceTest.cs b/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/AllocateProjectInstanceServiceTest.cs
index e1ef160f..2d597fd9 100644
--- a/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/AllocateProjectInstanceServiceTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/AllocateProjectInstanceServiceTest.cs
@@ -80,7 +80,7 @@ public async Task GivenProject_ExpectInstanceToBeCreatedAndAllocated()
projectId,
"http://instance-url",
createdDate,
- CalculationInstanceStatus.NotFound
+ AnalysisInstanceStatus.NotFound
);
var analysisInstanceImage = new AnalysisInstanceImage("scriptbee/analysis:latest");
_getProject
diff --git a/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/GetProjectInstancesServiceTest.cs b/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/GetProjectInstancesServiceTest.cs
index 22ced376..b630d933 100644
--- a/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/GetProjectInstancesServiceTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/GetProjectInstancesServiceTest.cs
@@ -34,15 +34,15 @@ public async Task GetAllProjectInstances()
projectId,
"http://url:8080",
DateTimeOffset.UtcNow,
- CalculationInstanceStatus.Allocating
+ AnalysisInstanceStatus.Allocating
);
- IEnumerable expectedCalculationInstanceInfos = [instanceInfo];
+ IEnumerable expectedInstanceInfos = [instanceInfo];
_getAllProjectInstances
.GetAll(projectId, Arg.Any())
- .Returns(Task.FromResult(expectedCalculationInstanceInfos));
+ .Returns(Task.FromResult(expectedInstanceInfos));
_getInstanceStatus
.GetStatus(instanceId, Arg.Any())
- .Returns(CalculationInstanceStatus.Allocating);
+ .Returns(AnalysisInstanceStatus.Allocating);
var instanceInfos = await _getProjectInstancesService.GetAllInstances(
projectId,
diff --git a/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/InstallPluginsForNewlyAllocatedInstanceTest.cs b/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/InstallPluginsForNewlyAllocatedInstanceTest.cs
index ac77b0d3..e157c43a 100644
--- a/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/InstallPluginsForNewlyAllocatedInstanceTest.cs
+++ b/ScriptBeeWebApp/test/Gateway/Application/Service.Project.Tests/Analysis/InstallPluginsForNewlyAllocatedInstanceTest.cs
@@ -42,7 +42,7 @@ public async Task GivenInstanceRunning_ShouldInstallProjectPlugins()
_getInstanceStatus
.GetStatus(instanceInfo.Id, Arg.Any())
- .Returns(CalculationInstanceStatus.Allocating, CalculationInstanceStatus.Running);
+ .Returns(AnalysisInstanceStatus.Allocating, AnalysisInstanceStatus.Running);
// Act
await _installPluginsForNewlyAllocatedInstance.InstallPlugins(
@@ -70,7 +70,7 @@ public async Task GivenInstanceNotFound_ShouldNotInstallAnything()
_getInstanceStatus
.GetStatus(instanceInfo.Id, Arg.Any())
- .Returns(CalculationInstanceStatus.Allocating, CalculationInstanceStatus.NotFound);
+ .Returns(AnalysisInstanceStatus.Allocating, AnalysisInstanceStatus.NotFound);
// Act
await _installPluginsForNewlyAllocatedInstance.InstallPlugins(
diff --git a/ScriptBeeWebApp/test/Workspace/Artifacts/Artifacts.Tests/ConfigFoldersServiceTest.cs b/ScriptBeeWebApp/test/Workspace/Artifacts/Artifacts.Tests/ConfigFoldersServiceTest.cs
index 39cff671..9de6129b 100644
--- a/ScriptBeeWebApp/test/Workspace/Artifacts/Artifacts.Tests/ConfigFoldersServiceTest.cs
+++ b/ScriptBeeWebApp/test/Workspace/Artifacts/Artifacts.Tests/ConfigFoldersServiceTest.cs
@@ -1,5 +1,5 @@
using Microsoft.Extensions.Options;
-using ScriptBee.Artifacts.Config;
+using ScriptBee.Application.Model.Config;
using ScriptBee.Domain.Model.Project;
namespace ScriptBee.Artifacts.Tests;
diff --git a/calculation.Dockerfile b/analysis.Dockerfile
similarity index 100%
rename from calculation.Dockerfile
rename to analysis.Dockerfile