From 8c15a67166e545169216eee8be7c44acf03a27cb Mon Sep 17 00:00:00 2001 From: Rory& Date: Sat, 20 Jan 2024 11:34:00 +0100 Subject: Add actions and unit data --- SystemdCtl.Client/Pages/ServiceManage.razor | 81 ++++++++++++++++++++++++++--- SystemdCtl.Client/Pages/Services.razor | 1 - SystemdCtl.Client/_Imports.razor | 2 +- 3 files changed, 75 insertions(+), 9 deletions(-) (limited to 'SystemdCtl.Client') diff --git a/SystemdCtl.Client/Pages/ServiceManage.razor b/SystemdCtl.Client/Pages/ServiceManage.razor index c622833..851f1b6 100644 --- a/SystemdCtl.Client/Pages/ServiceManage.razor +++ b/SystemdCtl.Client/Pages/ServiceManage.razor @@ -2,7 +2,10 @@ @using LibSystemdCli.Models @using LibSystemdCli @using System.Text.RegularExpressions +@using ArcaneLibs.Extensions @using SystemdCtl.Client.Abstractions +@using System.Diagnostics.Metrics +@using System.Text.Json @* @attribute [StreamRendering] *@ @rendermode InteractiveWebAssembly @inject NavigationManager NavigationManager @@ -10,7 +13,26 @@ Manage @ServiceName -

Manage @ServiceName

+

Managing @ServiceName (@ServiceInfo?.Status)

+ +
+
+

Actions

+
+
+ @if (ServiceInfo.IsRunning) { + Stop + Restart + Kill + } + else { + Start + } +
+
+
+
+ @* //simple log view *@
@@ -19,9 +41,14 @@
-                    @foreach (var line in LogLines) {
-                        @line
- } + + @foreach (var line in LogLines) { + + + + + } +
@line.Exe.Split('/').Last()@line.Message
@@ -36,6 +63,7 @@ private static bool IsClient => !Environment.CommandLine.Contains("/"); private List LogLines { get; set; } = new(); + private SystemdServiceData? ServiceInfo { get; set; } = new(); protected override async Task OnInitializedAsync() { Console.WriteLine("OnInitializedAsync"); @@ -44,17 +72,36 @@ private async Task Run() { if (!IsClient) return; - + int history = 100; LogLines.Clear(); + GetServiceDataTask(); var Http = new StreamingHttpClient() { BaseAddress = new Uri(NavigationManager.BaseUri) }; - var _items = Http.GetAsyncEnumerableFromJsonAsync($"/api/unit/{ServiceName}/logs"); + var jso = new JsonSerializerOptions() { + DefaultBufferSize = 1, + AllowTrailingCommas = true + }; + var _items = Http.GetAsyncEnumerableFromJsonAsync($"/api/unit/{ServiceName}/logs?contextLines={history}", jso); await foreach (var item in _items) { + // LogLines.RemoveAll(x=>x.SystemdInvocationId != item.SystemdInvocationId); LogLines.Add(item); - if (LogLines.Count > 100) LogLines.RemoveAt(0); + if (LogLines.Count > history) { + LogLines.RemoveAt(0); + } + StateHasChanged(); } } + private async Task GetServiceDataTask() { + if (!IsClient) return; + var Http = new StreamingHttpClient() { BaseAddress = new Uri(NavigationManager.BaseUri) }; + while (true) { + ServiceInfo = await Http.GetFromJsonAsync($"/api/unit/{ServiceName}/data"); + StateHasChanged(); + await Task.Delay(TimeSpan.FromSeconds(5)); + } + } + private string Capitalize(string input) { return input switch { null => throw new ArgumentNullException(nameof(input)), @@ -63,4 +110,24 @@ }; } + private async Task Start() { + var Http = new StreamingHttpClient() { BaseAddress = new Uri(NavigationManager.BaseUri) }; + await Http.GetAsync($"/api/unit/{ServiceName}/start", null); + } + + private async Task Stop() { + var Http = new StreamingHttpClient() { BaseAddress = new Uri(NavigationManager.BaseUri) }; + await Http.GetAsync($"/api/unit/{ServiceName}/stop", null); + } + + private async Task Restart() { + var Http = new StreamingHttpClient() { BaseAddress = new Uri(NavigationManager.BaseUri) }; + await Http.GetAsync($"/api/unit/{ServiceName}/restart", null); + } + + private async Task Kill() { + var Http = new StreamingHttpClient() { BaseAddress = new Uri(NavigationManager.BaseUri) }; + await Http.GetAsync($"/api/unit/{ServiceName}/kill", null); + } + } \ No newline at end of file diff --git a/SystemdCtl.Client/Pages/Services.razor b/SystemdCtl.Client/Pages/Services.razor index d0f67a7..f2e8bb9 100644 --- a/SystemdCtl.Client/Pages/Services.razor +++ b/SystemdCtl.Client/Pages/Services.razor @@ -2,7 +2,6 @@ @using LibSystemdCli.Models @using System.Text.RegularExpressions @using SystemdCtl.Client.Abstractions -@using ArcaneLibs.Blazor.Components @* @attribute [StreamRendering] *@ @rendermode InteractiveWebAssembly @inject NavigationManager NavigationManager diff --git a/SystemdCtl.Client/_Imports.razor b/SystemdCtl.Client/_Imports.razor index 3da583a..71d1c80 100644 --- a/SystemdCtl.Client/_Imports.razor +++ b/SystemdCtl.Client/_Imports.razor @@ -7,4 +7,4 @@ @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using SystemdCtl.Client - +@using ArcaneLibs.Blazor.Components -- cgit 1.4.1