Backend/e-suite.WorkBench/eSuite.WorkBench/Commands/StartContainersCommand.cs
2026-01-20 21:50:10 +00:00

98 lines
3.9 KiB
C#

using eSuite.WorkBench.Services;
using eSuite.WorkBench.WpfHelper;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using eSuite.WorkBench.Models;
namespace eSuite.WorkBench.Commands
{
public class StartContainersCommand : AsyncCommandBase
{
private readonly MainWindowViewModel _mainWindowViewModel;
private readonly ICommandsService _commandService;
public StartContainersCommand(MainWindowViewModel mainWindowViewModel, ICommandsService commandsService, Action<Exception> onException, EventHandler<FeedbackEventArgs> addFeedbackMessage ) : base(onException)
{
FeedbackMessage += addFeedbackMessage;
_mainWindowViewModel = mainWindowViewModel;
_commandService = commandsService;
_commandService.FeedbackMessage += commandService_FeedbackMessage;
IsEnabled = !_commandService.IsAnyContainerRunning();
}
private void commandService_FeedbackMessage(object sender, FeedbackEventArgs e)
{
DoFeedbackMessage(e.Message);
}
public StartContainersCommand(MainWindowViewModel mainWindowViewModel, ICommandsService commandsService, Action<Exception> onException) : base (onException)
{
_mainWindowViewModel = mainWindowViewModel;
_commandService = commandsService;
IsEnabled = !_commandService.IsAnyContainerRunning();
}
protected override async Task ExecuteAsync(object parameter)
{
try
{
DoFeedbackMessage("Starting containers...");
DoFeedbackMessage("Connecting to container registry");
await _commandService.ConnectToContainerRegistry();
var databaseName = GetBranchName(_mainWindowViewModel.SelectedBranch);
DoFeedbackMessage($"Database name: {databaseName}");
await Task.WhenAll(new List<Task>
{
_commandService.StartRabbitMQContainerAsync(),
_commandService.StartDatabaseMigratorContainerAsync(_mainWindowViewModel.AvailableDbMigratorTags.SelectedItem, databaseName),
});
await Task.WhenAll(new List<Task>
{
_commandService.StartProxyContainerAsync(_mainWindowViewModel.AvailableProxyTags.SelectedItem),
_commandService.StartApiContainerAsync(_mainWindowViewModel.AvailableApiTags.SelectedItem, databaseName),
_commandService.StartWebUiContainerAsync(_mainWindowViewModel.AvailableWebUiTags.SelectedItem),
_commandService.StartSchedulerContainerAsync(_mainWindowViewModel.AvailableSchedulerTags.SelectedItem, databaseName),
_commandService.StartMessageProcessorContainerAsync(_mainWindowViewModel.AvailableMessageProcessorTags.SelectedItem, databaseName)
});
_mainWindowViewModel.StopContainersCommand.IsEnabled = await _commandService.IsAnyContainerRunningAsync();
IsEnabled = !(await _commandService.IsAnyContainerRunningAsync());
}
catch (Exception ex)
{
DoFeedbackMessage(ex.Message);
}
finally
{
DoFeedbackMessage("...finished");
}
}
private static string GetBranchName(Branch branch)
{
char[] replaceChars = { '.', '-' };
var currentBranch = branch;
var branchName = string.Empty;
while (currentBranch != null)
{
branchName = currentBranch.BranchName + "_" + branchName;
currentBranch = currentBranch.Parent;
}
foreach (var replaceChar in replaceChars)
branchName = branchName.Replace(replaceChar, '_');
return branchName.TrimEnd('_');
}
}
}