Browse Source

AccessPoint Commands

James 2 months ago
parent
commit
fd804b943c

+ 9 - 0
RackPeek/Commands/AccessPoints/AccessCommands.cs

@@ -0,0 +1,9 @@
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointNameSettings : CommandSettings
+{
+    [CommandArgument(0, "<name>")] 
+    public string Name { get; set; } = default!;
+}

+ 31 - 0
RackPeek/Commands/AccessPoints/AccessPointAddCommand.cs

@@ -0,0 +1,31 @@
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Domain.Resources.Hardware.AccessPoints;
+using Spectre.Console;
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointAddSettings : CommandSettings
+{
+    [CommandArgument(0, "<name>")] 
+    public string Name { get; set; } = default!;
+}
+
+public class AccessPointAddCommand(
+    IServiceProvider serviceProvider
+) : AsyncCommand<AccessPointAddSettings>
+{
+    public override async Task<int> ExecuteAsync(
+        CommandContext context,
+        AccessPointAddSettings settings,
+        CancellationToken cancellationToken)
+    {
+        using var scope = serviceProvider.CreateScope();
+        var useCase = scope.ServiceProvider.GetRequiredService<AddAccessPointUseCase>();
+
+        await useCase.ExecuteAsync(settings.Name);
+
+        AnsiConsole.MarkupLine($"[green]Access point '{settings.Name}' added.[/]");
+        return 0;
+    }
+}

+ 25 - 0
RackPeek/Commands/AccessPoints/AccessPointDeleteCommand.cs

@@ -0,0 +1,25 @@
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Domain.Resources.Hardware.AccessPoints;
+using Spectre.Console;
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointDeleteCommand(
+    IServiceProvider serviceProvider
+) : AsyncCommand<AccessPointNameSettings>
+{
+    public override async Task<int> ExecuteAsync(
+        CommandContext context,
+        AccessPointNameSettings settings,
+        CancellationToken cancellationToken)
+    {
+        using var scope = serviceProvider.CreateScope();
+        var useCase = scope.ServiceProvider.GetRequiredService<DeleteAccessPointUseCase>();
+
+        await useCase.ExecuteAsync(settings.Name);
+
+        AnsiConsole.MarkupLine($"[green]Access point '{settings.Name}' deleted.[/]");
+        return 0;
+    }
+}

+ 43 - 0
RackPeek/Commands/AccessPoints/AccessPointDescribeCommand.cs

@@ -0,0 +1,43 @@
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Domain.Resources.Hardware.AccessPoints;
+using Spectre.Console;
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointDescribeCommand(
+    IServiceProvider serviceProvider
+) : AsyncCommand<AccessPointNameSettings>
+{
+    public override async Task<int> ExecuteAsync(
+        CommandContext context,
+        AccessPointNameSettings settings,
+        CancellationToken cancellationToken)
+    {
+        using var scope = serviceProvider.CreateScope();
+        var useCase = scope.ServiceProvider.GetRequiredService<DescribeAccessPointUseCase>();
+
+        var ap = await useCase.ExecuteAsync(settings.Name);
+
+        if (ap == null)
+        {
+            AnsiConsole.MarkupLine($"[red]Access point '{settings.Name}' not found.[/]");
+            return 1;
+        }
+
+        var grid = new Grid()
+            .AddColumn(new GridColumn().NoWrap())
+            .AddColumn(new GridColumn().NoWrap());
+
+        grid.AddRow("Name:", ap.Name);
+        grid.AddRow("Model:", ap.Model ?? "Unknown");
+        grid.AddRow("Speed (Gbps):", ap.Speed?.ToString() ?? "Unknown");
+
+        AnsiConsole.Write(
+            new Panel(grid)
+                .Header("Access Point")
+                .Border(BoxBorder.Rounded));
+
+        return 0;
+    }
+}

+ 33 - 0
RackPeek/Commands/AccessPoints/AccessPointGetByNameCommand.cs

@@ -0,0 +1,33 @@
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Domain.Resources.Hardware.AccessPoints;
+using Spectre.Console;
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointGetByNameCommand(
+    IServiceProvider serviceProvider
+) : AsyncCommand<AccessPointNameSettings>
+{
+    public override async Task<int> ExecuteAsync(
+        CommandContext context,
+        AccessPointNameSettings settings,
+        CancellationToken cancellationToken)
+    {
+        using var scope = serviceProvider.CreateScope();
+        var useCase = scope.ServiceProvider.GetRequiredService<DescribeAccessPointUseCase>();
+
+        var ap = await useCase.ExecuteAsync(settings.Name);
+
+        if (ap == null)
+        {
+            AnsiConsole.MarkupLine($"[red]Access point '{settings.Name}' not found.[/]");
+            return 1;
+        }
+
+        AnsiConsole.MarkupLine(
+            $"[green]{ap.Name}[/]  Model: {ap.Model ?? "Unknown"}, Speed: {(ap.Speed?.ToString() ?? "Unknown")} Gbps");
+
+        return 0;
+    }
+}

+ 44 - 0
RackPeek/Commands/AccessPoints/AccessPointGetCommand.cs

@@ -0,0 +1,44 @@
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Domain.Resources.Hardware.Reports;
+using Spectre.Console;
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointGetCommand(
+    IServiceProvider serviceProvider
+) : AsyncCommand
+{
+    public override async Task<int> ExecuteAsync(
+        CommandContext context,
+        CancellationToken cancellationToken)
+    {
+        using var scope = serviceProvider.CreateScope();
+        var useCase = scope.ServiceProvider.GetRequiredService<AccessPointHardwareReportUseCase>();
+
+        var report = await useCase.ExecuteAsync();
+
+        if (report.AccessPoints.Count == 0)
+        {
+            AnsiConsole.MarkupLine("[yellow]No access points found.[/]");
+            return 0;
+        }
+
+        var table = new Table()
+            .Border(TableBorder.Rounded)
+            .AddColumn("Name")
+            .AddColumn("Model")
+            .AddColumn("Speed (Gbps)");
+
+        foreach (var ap in report.AccessPoints)
+            table.AddRow(
+                ap.Name,
+                ap.Model,
+                ap.SpeedGb.ToString()
+            );
+
+
+        AnsiConsole.Write(table);
+        return 0;
+    }
+}

+ 39 - 0
RackPeek/Commands/AccessPoints/AccessPointSetCommand.cs

@@ -0,0 +1,39 @@
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Commands.Server;
+using RackPeek.Domain.Resources.Hardware.AccessPoints;
+using Spectre.Console;
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.AccessPoints;
+
+public class AccessPointSetSettings : ServerNameSettings
+{
+    [CommandOption("--model")] 
+    public string? Model { get; set; }
+
+    [CommandOption("--speed")] 
+    public double? Speed { get; set; }
+}
+
+public class AccessPointSetCommand(
+    IServiceProvider serviceProvider
+) : AsyncCommand<AccessPointSetSettings>
+{
+    public override async Task<int> ExecuteAsync(
+        CommandContext context,
+        AccessPointSetSettings settings,
+        CancellationToken cancellationToken)
+    {
+        using var scope = serviceProvider.CreateScope();
+        var useCase = scope.ServiceProvider.GetRequiredService<UpdateAccessPointUseCase>();
+
+        await useCase.ExecuteAsync(
+            settings.Name,
+            settings.Model,
+            settings.Speed
+        );
+
+        AnsiConsole.MarkupLine($"[green]Access point '{settings.Name}' updated.[/]");
+        return 0;
+    }
+}

+ 0 - 1
RackPeek/RackPeek.csproj

@@ -24,7 +24,6 @@
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
-      <Folder Include="Commands\AccessPoint\" />
       <Folder Include="Commands\Desktop\" />
       <Folder Include="Commands\Desktop\" />
       <Folder Include="Commands\Ups\" />
       <Folder Include="Commands\Ups\" />
     </ItemGroup>
     </ItemGroup>