Compare commits

...

2 Commits

Author SHA1 Message Date
f5435e6764 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	.idea/.idea.PSCHelpdesk/.idea/workspace.xml
2025-05-22 09:38:07 +02:00
f493bc18f4 Fix 2025-05-22 09:37:51 +02:00
7 changed files with 184 additions and 40 deletions

View File

@ -1 +0,0 @@
PSCHelpdesk

View File

@ -2,6 +2,7 @@
<project version="4"> <project version="4">
<component name="RiderProjectSettingsUpdater"> <component name="RiderProjectSettingsUpdater">
<option name="singleClickDiffPreview" value="1" /> <option name="singleClickDiffPreview" value="1" />
<option name="unhandledExceptionsIgnoreList" value="1" />
<option name="vcsConfiguration" value="3" /> <option name="vcsConfiguration" value="3" />
</component> </component>
</project> </project>

View File

@ -11,8 +11,13 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="95257dc5-08bd-4c50-8726-85956b3c2c92" name="Changes" comment=""> <list default="true" id="95257dc5-08bd-4c50-8726-85956b3c2c92" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/.name" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Service/CheckMKService.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Service/CheckMKService.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -70,7 +75,7 @@
&quot;associatedIndex&quot;: 8 &quot;associatedIndex&quot;: 8
}</component> }</component>
<component name="ProjectId" id="2oALwzSyifDVjc3qbb4djsSPFwr" /> <component name="ProjectId" id="2oALwzSyifDVjc3qbb4djsSPFwr" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true"> <component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="1" id="Add" /> <ConfirmationsSetting value="1" id="Add" />
</component> </component>
<component name="ProjectViewState"> <component name="ProjectViewState">
@ -118,8 +123,13 @@
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Browser/bin/Debug/net9.0-browser" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Browser/bin/Debug/net9.0-browser" />
<option name="PASS_PARENT_ENVS" value="1" /> <option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="ENV_FILE_PATHS" value="" />
<option name="REDIRECT_INPUT_PATH" value="" />
<option name="PTY_MODE" value="Auto" />
<option name="USE_MONO" value="0" /> <option name="USE_MONO" value="0" />
<option name="RUNTIME_ARGUMENTS" value="" /> <option name="RUNTIME_ARGUMENTS" value="" />
<option name="AUTO_ATTACH_CHILDREN" value="0" />
<option name="MIXED_MODE_DEBUG" value="0" />
<option name="PROJECT_PATH" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Browser/PSCHelpdesk.Browser.csproj" /> <option name="PROJECT_PATH" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Browser/PSCHelpdesk.Browser.csproj" />
<option name="PROJECT_EXE_PATH_TRACKING" value="1" /> <option name="PROJECT_EXE_PATH_TRACKING" value="1" />
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
@ -136,8 +146,13 @@
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/bin/Debug/net9.0" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/bin/Debug/net9.0" />
<option name="PASS_PARENT_ENVS" value="1" /> <option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="ENV_FILE_PATHS" value="" />
<option name="REDIRECT_INPUT_PATH" value="" />
<option name="PTY_MODE" value="Auto" />
<option name="USE_MONO" value="0" /> <option name="USE_MONO" value="0" />
<option name="RUNTIME_ARGUMENTS" value="" /> <option name="RUNTIME_ARGUMENTS" value="" />
<option name="AUTO_ATTACH_CHILDREN" value="0" />
<option name="MIXED_MODE_DEBUG" value="0" />
<option name="PROJECT_PATH" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj" /> <option name="PROJECT_PATH" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj" />
<option name="PROJECT_EXE_PATH_TRACKING" value="1" /> <option name="PROJECT_EXE_PATH_TRACKING" value="1" />
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> <option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
@ -154,8 +169,13 @@
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/bin/Debug/net9.0" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/bin/Debug/net9.0" />
<option name="PASS_PARENT_ENVS" value="1" /> <option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" /> <option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="ENV_FILE_PATHS" value="" />
<option name="REDIRECT_INPUT_PATH" value="" />
<option name="PTY_MODE" value="Auto" />
<option name="USE_MONO" value="0" /> <option name="USE_MONO" value="0" />
<option name="RUNTIME_ARGUMENTS" value="" /> <option name="RUNTIME_ARGUMENTS" value="" />
<option name="AUTO_ATTACH_CHILDREN" value="0" />
<option name="MIXED_MODE_DEBUG" value="0" />
<option name="RUNTIME_TYPE" value="coreclr" /> <option name="RUNTIME_TYPE" value="coreclr" />
<option name="PROJECT_PATH" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj" /> <option name="PROJECT_PATH" value="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj" />
<option name="PROJECT_EXE_PATH_TRACKING" value="1" /> <option name="PROJECT_EXE_PATH_TRACKING" value="1" />
@ -247,26 +267,36 @@
<workItem from="1734440327643" duration="505000" /> <workItem from="1734440327643" duration="505000" />
<workItem from="1734440840094" duration="1461000" /> <workItem from="1734440840094" duration="1461000" />
<workItem from="1734512891958" duration="8348000" /> <workItem from="1734512891958" duration="8348000" />
<workItem from="1734681339447" duration="25455000" /> <workItem from="1734681339447" duration="16737000" />
<workItem from="1735825667995" duration="6639000" /> <workItem from="1735123214835" duration="1653000" />
<workItem from="1736012348049" duration="5675000" /> <workItem from="1736948977011" duration="332000" />
<workItem from="1736245173247" duration="1723000" /> <workItem from="1737038383441" duration="226000" />
<workItem from="1736268018760" duration="1279000" /> <workItem from="1737039295949" duration="1236000" />
<workItem from="1736272969135" duration="16118000" /> <workItem from="1743165836762" duration="2671000" />
<workItem from="1736861862450" duration="6203000" /> <workItem from="1743501446532" duration="3592000" />
<workItem from="1737048851006" duration="14459000" /> <workItem from="1743587565847" duration="1225000" />
<workItem from="1737537909704" duration="3401000" /> <workItem from="1743604532742" duration="1994000" />
<workItem from="1737646873757" duration="1252000" /> <workItem from="1743754990311" duration="1575000" />
<workItem from="1737728621993" duration="12485000" /> <workItem from="1743767288057" duration="617000" />
<workItem from="1737966490104" duration="1235000" /> <workItem from="1743782743398" duration="1871000" />
<workItem from="1737998140424" duration="2999000" /> <workItem from="1744031357110" duration="1699000" />
<workItem from="1738271984376" duration="325000" /> <workItem from="1744285115795" duration="665000" />
<workItem from="1738310654132" duration="13826000" /> <workItem from="1744631967068" duration="656000" />
<workItem from="1739349147095" duration="24038000" /> <workItem from="1744702202799" duration="2323000" />
<workItem from="1739867474147" duration="39725000" /> <workItem from="1744893226982" duration="632000" />
<workItem from="1740569707006" duration="11324000" /> <workItem from="1745319131675" duration="7778000" />
<workItem from="1741601215219" duration="1811000" /> <workItem from="1745841859983" duration="2375000" />
<workItem from="1741876162867" duration="16308000" /> <workItem from="1745910444885" duration="4541000" />
<workItem from="1745942637758" duration="3099000" />
<workItem from="1746374007171" duration="9698000" />
<workItem from="1746781538550" duration="1342000" />
<workItem from="1747038399537" duration="42000" />
<workItem from="1747038853869" duration="112000" />
<workItem from="1747038981831" duration="5786000" />
<workItem from="1747490908831" duration="662000" />
<workItem from="1747575639007" duration="7581000" />
<workItem from="1747843509990" duration="143000" />
<workItem from="1747843668500" duration="750000" />
</task> </task>
<task id="LOCAL-00001" summary="Backup"> <task id="LOCAL-00001" summary="Backup">
<option name="closed" value="true" /> <option name="closed" value="true" />
@ -324,15 +354,7 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1734120730780</updated> <updated>1734120730780</updated>
</task> </task>
<task id="LOCAL-00008" summary="Fixes"> <option name="localTasksCounter" value="8" />
<option name="closed" value="true" />
<created>1735121726198</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1735121726198</updated>
</task>
<option name="localTasksCounter" value="9" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@ -355,8 +377,7 @@
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" /> <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
<MESSAGE value="backup" /> <MESSAGE value="backup" />
<MESSAGE value="Backup" /> <MESSAGE value="Backup" />
<MESSAGE value="Fixes" /> <option name="LAST_COMMIT_MESSAGE" value="Backup" />
<option name="LAST_COMMIT_MESSAGE" value="Fixes" />
</component> </component>
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager> <breakpoint-manager>
@ -458,6 +479,18 @@
</properties> </properties>
<option name="timeStamp" value="195" /> <option name="timeStamp" value="195" />
</line-breakpoint> </line-breakpoint>
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
<properties exception="System.OperationCanceledException" breakIfHandledByOtherCode="false" displayValue="System.OperationCanceledException" />
<option name="timeStamp" value="196" />
</breakpoint>
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
<properties exception="System.Threading.Tasks.TaskCanceledException" breakIfHandledByOtherCode="false" displayValue="System.Threading.Tasks.TaskCanceledException" />
<option name="timeStamp" value="197" />
</breakpoint>
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
<properties exception="System.Threading.ThreadAbortException" breakIfHandledByOtherCode="false" displayValue="System.Threading.ThreadAbortException" />
<option name="timeStamp" value="198" />
</breakpoint>
</breakpoints> </breakpoints>
</breakpoint-manager> </breakpoint-manager>
<pin-to-top-manager> <pin-to-top-manager>

View File

@ -78,6 +78,9 @@ public class CheckMKService: IServerService
if (serv.Services.Count == 0 && serv.BackupLastModified > DateTime.Today.AddDays(-3) && serv.Status == "running") if (serv.Services.Count == 0 && serv.BackupLastModified > DateTime.Today.AddDays(-3) && serv.Status == "running")
{ {
serv.ServerStatus = Brushes.Transparent; serv.ServerStatus = Brushes.Transparent;
}else
{
serv.ServerStatus = Brushes.Red;
} }
} }
} }
@ -92,11 +95,57 @@ public class CheckMKService: IServerService
public void DoReScan(Server serv) public void DoReScan(Server serv)
{ {
doScan(serv); doScan();
} }
async private void doScan(Server serv) async private void doScan()
{ {
var settings = new CheckMKSettings();
_settingsManager.LoadPluginSettings("CheckMKSettings", settings);
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/ld+json"));
httpClient.DefaultRequestHeaders.Add("User-Agent", "PSC Client");
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes($"{settings.Username}:{settings.Password}")));
try
{
foreach (var serv in _server.SourceCache.Items)
{
serv.Services.Clear();
}
var stringPlugins =
httpClient.GetStringAsync("https://check.thomas-peterson.de/cmk/check_mk/view.py?view_name=svcproblems&output_format=json");
var msg = await stringPlugins;
JArray pluginMsg = JArray.Parse(msg);
foreach (var token in pluginMsg)
{
if (token[0].ToString() != "service_state")
{
var serv = _server.SourceCache.Items.FirstOrDefault(e => e.Name.ToLower().Contains(token[1].ToString().ToLower()));
if (serv != null)
{
serv.Services.Add(new Models.Service(token[0].ToString(), token[4].ToString()));
}
}
}
foreach (var serv in _server.SourceCache.Items)
{
if (serv.Services.Count == 0 && serv.BackupLastModified > DateTime.Today.AddDays(-3) && serv.Status == "running")
{
serv.ServerStatus = Brushes.Transparent;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
} }
} }

View File

@ -331,6 +331,58 @@ public class ServerService: IServerService
} }
} }
if (serv.Domains.Count == 0)
{
command = client.RunCommand("docker inspect psc-web-1");
if (command.ExitStatus == 0)
{
JArray web = JArray.Parse(command.Result);
var hostConfigArray = web[0]["HostConfig"];
if (hostConfigArray["RestartPolicy"]["Name"].ToString() == "always")
{
serv.IsRestartAlways = true;
}
var webEnvArray = web[0]["Config"]["Env"];
foreach (String entry in webEnvArray)
{
var webExploded = entry.Split("=");
if (webExploded[0] == "LETSENCRYPT_HOST")
{
var webHosts = webExploded[1].Split(",");
serv.Domains.Clear();
foreach (String dom in webHosts)
{
serv.Domains.Add(new Domain(dom));
}
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/ld+json"));
httpClient.DefaultRequestHeaders.Add("User-Agent", "PSC Client");
try
{
var stringTask =
httpClient.GetStringAsync("https://" + webHosts[0] +
"/apps/api/system/version");
var msg = await stringTask;
JObject versionMSg = JObject.Parse(msg);
serv.Datum = versionMSg["datum"].ToString();
serv.Release = float.Parse(versionMSg["release"].ToString());
}
catch (Exception ex)
{
}
}
}
}
}
if (serv.PscApiKey != "" && serv.Domains.Count > 0) if (serv.PscApiKey != "" && serv.Domains.Count > 0)
{ {
var httpClient = new HttpClient(); var httpClient = new HttpClient();
@ -392,6 +444,15 @@ public class ServerService: IServerService
serv.IsGoodColor = Brushes.Green; serv.IsGoodColor = Brushes.Green;
} }
if (serv.Services.Count == 0 && serv.BackupLastModified > DateTime.Today.AddDays(-3) && serv.Status == "running")
{
serv.ServerStatus = Brushes.Transparent;
}
else
{
serv.ServerStatus = Brushes.Red;
}
client.Disconnect(); client.Disconnect();
} }
catch (Exception ex) catch (Exception ex)

View File

@ -180,6 +180,7 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase
if (serv.IsChecked) if (serv.IsChecked)
{ {
ServerService.DoReScan(serv); ServerService.DoReScan(serv);
CheckMKService.DoReScan(serv);
} }
} }
} }

View File

@ -18,7 +18,7 @@
<converter:DateTimeConverter x:Key="DateTimeConverter"></converter:DateTimeConverter> <converter:DateTimeConverter x:Key="DateTimeConverter"></converter:DateTimeConverter>
</UserControl.Resources> </UserControl.Resources>
<Grid ColumnDefinitions="*,4,*"> <Grid ColumnDefinitions="*,4,*">
<Grid Grid.Column="0" Margin="20" RowDefinitions="Auto,Auto,*"> <Grid Grid.Column="0" Margin="20" RowDefinitions="Auto,Auto,Auto,*">
<StackPanel Grid.Row="0" Margin="0 0 0 5"> <StackPanel Grid.Row="0" Margin="0 0 0 5">
<TextBlock Margin="0 5" >Suchtext</TextBlock> <TextBlock Margin="0 5" >Suchtext</TextBlock>
<TextBox Text="{Binding SearchText}"></TextBox> <TextBox Text="{Binding SearchText}"></TextBox>
@ -29,10 +29,10 @@
<Button Content="Reboot" Command="{Binding Reboot}"></Button> <Button Content="Reboot" Command="{Binding Reboot}"></Button>
<Button Content="Select ALL" Command="{Binding SelectAll}"></Button> <Button Content="Select ALL" Command="{Binding SelectAll}"></Button>
<Button Content="DeSelect ALL" Command="{Binding DeSelectAll}"></Button> <Button Content="DeSelect ALL" Command="{Binding DeSelectAll}"></Button>
<!-- <TextBox Grid.Row="1" Text="{Binding Json}"></TextBox>-->
</StackPanel> </StackPanel>
<TextBox Grid.Row="2" Text="{Binding Json}"></TextBox>
<DataGrid Grid.Row="2" ItemsSource="{Binding Server}" <DataGrid Grid.Row="3" ItemsSource="{Binding Server}"
AutoGenerateColumns="False" IsReadOnly="True" AutoGenerateColumns="False" IsReadOnly="True"
GridLinesVisibility="All" CanUserReorderColumns="True" GridLinesVisibility="All" CanUserReorderColumns="True"
CanUserResizeColumns="True" CanUserResizeColumns="True"