diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml index f6ace41..49e5564 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml @@ -11,7 +11,18 @@ - + + + + + + + + + + + + @@ -29,50 +40,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - + - - - - - + + + - diff --git a/HetznerServer/HetznerServer.csproj b/HetznerServer/HetznerServer.csproj index 9c2a4dc..3215248 100644 --- a/HetznerServer/HetznerServer.csproj +++ b/HetznerServer/HetznerServer.csproj @@ -33,6 +33,7 @@ + diff --git a/HetznerServer/Models/Domain.cs b/HetznerServer/Models/Domain.cs index 14fab85..4a51c5c 100644 --- a/HetznerServer/Models/Domain.cs +++ b/HetznerServer/Models/Domain.cs @@ -3,6 +3,8 @@ namespace PSCHelpdesk.Plugins.HetznerServer.Models; public class Domain { public string Name { get; set; } + + public string LinkDomain { get => "https://" + Name.ToLower(); } public Domain(String name) { diff --git a/HetznerServer/Models/Server.cs b/HetznerServer/Models/Server.cs index fcf4c8a..3b195cb 100644 --- a/HetznerServer/Models/Server.cs +++ b/HetznerServer/Models/Server.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; +using Avalonia.Media; +using Material.Icons; using ReactiveUI; namespace PSCHelpdesk.Plugins.HetznerServer.Models; @@ -12,6 +14,62 @@ public class Server : ReactiveObject public string Status { get; set; } + private string _isGoodIcon = MaterialIconKind.AlertCircleOutline.ToString(); + + public string IsGoodIcon + { + get => _isGoodIcon; + set => this.RaiseAndSetIfChanged(ref _isGoodIcon, value); + } + + private IImmutableSolidColorBrush? _isGoodColor = Brushes.Red; + + public IImmutableSolidColorBrush? IsGoodColor + { + get => _isGoodColor; + set => this.RaiseAndSetIfChanged(ref _isGoodColor, value); + } + + private String _rootDirUsed = "100%"; + + public string RootDirUsed + { + get => _rootDirUsed; + set => this.RaiseAndSetIfChanged(ref _rootDirUsed, value); + } + + private String _dataDirUsed = "100%"; + + public string DataDirUsed + { + get => _dataDirUsed; + set => this.RaiseAndSetIfChanged(ref _dataDirUsed, value); + } + + private String _mongoVersion = ""; + + public string MongoVersion + { + get => _mongoVersion; + set => this.RaiseAndSetIfChanged(ref _mongoVersion, value); + } + + private int _runningContainerCount = 0; + + public int RunningContainerCount + { + get => _runningContainerCount; + set => this.RaiseAndSetIfChanged(ref _runningContainerCount, value); + } + + private String _mysqlVersion = ""; + + public string MysqlVersion + { + get => _mysqlVersion; + set => this.RaiseAndSetIfChanged(ref _mysqlVersion, value); + } + public string Type { get; set; } public string Ipv4 { get; set; } public string Ipv6 { get; set; } diff --git a/HetznerServer/Service/ServerService.cs b/HetznerServer/Service/ServerService.cs index 3023339..c3535d7 100644 --- a/HetznerServer/Service/ServerService.cs +++ b/HetznerServer/Service/ServerService.cs @@ -92,7 +92,42 @@ public class ServerService: IServerService }); } - + command = client.RunCommand("docker inspect psc_mongodb_1"); + if (command.ExitStatus == 0) + { + JArray mongoDB = JArray.Parse(command.Result); + var mongoDBEnvArray = mongoDB[0]["Config"]["Env"]; + + foreach (String entry in mongoDBEnvArray) + { + var mongodDBexploded = entry.Split("="); + if (mongodDBexploded[0] == "MONGO_VERSION") + { + serv.MongoVersion = mongodDBexploded[1]; + } + } + } + command = client.RunCommand("docker inspect psc_mysql_1"); + if (command.ExitStatus == 0) + { + JArray mongoDB = JArray.Parse(command.Result); + var mongoDBEnvArray = mongoDB[0]["Config"]["Env"]; + + foreach (String entry in mongoDBEnvArray) + { + var mongodDBexploded = entry.Split("="); + if (mongodDBexploded[0] == "MARIADB_VERSION") + { + serv.MysqlVersion = mongodDBexploded[1]; + } + } + } + + command = client.RunCommand("docker ps|wc -l"); + if (command.ExitStatus == 0) + { + serv.RunningContainerCount = int.Parse(command.Result); + } command = client.RunCommand("docker inspect psc_web_1"); if (command.ExitStatus == 0) { diff --git a/HetznerServer/Views/ServerView.axaml b/HetznerServer/Views/ServerView.axaml index b1579fd..a275372 100644 --- a/HetznerServer/Views/ServerView.axaml +++ b/HetznerServer/Views/ServerView.axaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:vm="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.ViewModels" xmlns:converter="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.Converter" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" @@ -15,10 +16,8 @@ - - + + Suchtext @@ -42,18 +41,25 @@ - + + + + + + + + - - + + - + + Width="35" /> - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/PSCHelpdesk.sln.DotSettings.user b/PSCHelpdesk.sln.DotSettings.user index f0910b6..de79d68 100644 --- a/PSCHelpdesk.sln.DotSettings.user +++ b/PSCHelpdesk.sln.DotSettings.user @@ -8,6 +8,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -25,7 +26,9 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -37,6 +40,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj b/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj index 116b071..da6d212 100644 --- a/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj +++ b/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj @@ -27,6 +27,12 @@ ..\..\..\..\.nuget\packages\avalonia\11.2.0\ref\net8.0\Avalonia.Controls.dll + + ..\..\..\..\.nuget\packages\projektanker.icons.avalonia\9.4.1\lib\netstandard2.0\Projektanker.Icons.Avalonia.dll + + + ..\..\..\..\.nuget\packages\projektanker.icons.avalonia.fontawesome\9.4.1\lib\netstandard2.0\Projektanker.Icons.Avalonia.FontAwesome.dll + diff --git a/PSCHelpdesk/PSCHelpdesk.Desktop/Program.cs b/PSCHelpdesk/PSCHelpdesk.Desktop/Program.cs index dfbf411..f4d5e76 100644 --- a/PSCHelpdesk/PSCHelpdesk.Desktop/Program.cs +++ b/PSCHelpdesk/PSCHelpdesk.Desktop/Program.cs @@ -15,9 +15,12 @@ sealed class Program // Avalonia configuration, don't remove; also used by visual designer. public static AppBuilder BuildAvaloniaApp() - => AppBuilder.Configure() + { + + return AppBuilder.Configure() .UsePlatformDetect() .WithInterFont() .UseReactiveUI() .LogToTrace(); + } } \ No newline at end of file diff --git a/PSCHelpdesk/PSCHelpdesk/App.axaml b/PSCHelpdesk/PSCHelpdesk/App.axaml index bec75b6..0657b66 100644 --- a/PSCHelpdesk/PSCHelpdesk/App.axaml +++ b/PSCHelpdesk/PSCHelpdesk/App.axaml @@ -1,6 +1,7 @@ @@ -10,6 +11,7 @@ +