Compare commits

..
2 Commits
Author SHA1 Message Date
nlang 70b5678d13 Changement du mode de calcul 2025-06-10 17:59:15 +02:00
nlang 088ae75339 Correction erreur sur retour fonction 2025-06-10 16:34:31 +02:00
2 changed files with 57 additions and 22 deletions
+10 -1
View File
@@ -4,7 +4,16 @@ Ce script Powershell permet de créer un point d'écoute pour permettre un check
Le script calcule automatiquement le poids de la machine sur lequel il tourne en vérifiant l'usage RAM et / ou CPU selon des critères de facteur d'importance, de valeur de réference pour le calcul ou de limite haute forçant le mode drain (aucune nouvelle connexion depuis haproxy)
# Fonctionne sur
Testé en fonctionnement dans les environnements suivants ;
## OS
Windows 11
## Version powershell
Powershell 5.1
Powershell 7.4
# Fonctionnement
@@ -12,7 +21,7 @@ Ce script créé un point d'écoute TCP sur un port donné.
Lorsqu'un client s'y connecte, il lance le calcul du poids puis renvoie l'information sous un format de tableau de bytes suivi d'un retour à la ligne
Lorsqu'un calcul RAM ou CPU dépasse la limite définie dans CPU_THRESHOLD ou RAM_THRESHOLD, il envoie l'information "drain 0%`n" au serveur HAProxy. Dès que la valeur revient sous la limite, elle envoie une valeur calculée toujours précédée de up (ex : "up 12%`n")
Lorsqu'un calcul RAM ou CPU dépasse la limite définie dans CPU_THRESHOLD ou RAM_THRESHOLD, il envoie l'information "drain 0%" au serveur HAProxy. Dès que la valeur revient sous la limite, elle envoie une valeur calculée toujours précédée de up (ex : "up 12%")
# Fichier de configuration
+47 -21
View File
@@ -1,7 +1,7 @@
$VerbosePreference = 'Continue'
$configfilepath = "C:\temp\config.xml"
try {
$configfile = Import-clixml $configfilepath -ErrorAction Stop
$config = Import-clixml $configfilepath -ErrorAction Stop
}
catch {
Write-host "Aucun fichier de configuration"
@@ -54,7 +54,7 @@ if ($config.RAM_VALUE -as [int] -is [int] -and ($config.RAM_ENABLED -eq 1))
{
if ($config.RAM_VALUE -eq 0)
{
Write-host "Valeur RAM_VALUE absente, incorrecte ou à 0, désactivation"
Write-host "Value RAM_VALUE missing, incorrect or at 0, CPU CHECK disabled"
$config.RAM_ENABLED = 0
}
@@ -65,7 +65,7 @@ if ($config.RAM_THRESHOLD -as [int] -is [int] -and ($config.RAM_ENABLED -eq 1))
{
if ($config.RAM_THRESHOLD -eq 0)
{
Write-host "Valeur RAM_THRESHOLD absente, incorrecte ou à 0, désactivation"
Write-host "Value RAM_THRESHOLD missing, incorrect or at 0, RAM CHECK disabled"
$config.RAM_ENABLED = 0
}
@@ -87,7 +87,8 @@ if ($config.CPU_VALUE -as [int] -is [int] -and ($config.CPU_ENABLED -eq 1))
{
if ($config.CPU_VALUE -eq 0)
{
Write-host "Valeur CPU_VALUE absente, à 0 ou incorrecte. Désactivation check CPU"
Write-host "Value CPU_VALUE missing, on 0 or wrong. Disabled check CPU"
$config.CPU_ENABLED = 0
}
}
@@ -95,11 +96,13 @@ if ($config.CPU_THRESHOLD -as [int] -is [int] -and ($config.CPU_ENABLED -eq 1))
{
if ($config.CPU_THRESHOLD -eq 0)
{
Write-host "Valeur CPU_THRESHOLD absente, à 0 ou incorrecte. Désactivation check CPU"
Write-host "Value CPU_THRESHOLD missing, at 0 or incorrect. Disabled check CPU"
$config.CPU_ENABLED = 0
}
}
$endpoint = New-Object System.Net.IPEndPoint([ipaddress]::Any,8000)
$listener = $null
$listener = New-Object System.Net.Sockets.TcpListener $endpoint
$listener.Start()
@@ -114,42 +117,55 @@ function Get-ServerHAProxyLoad()
# Threshold : Si une valeur dépasse, on passe à true et force l'usage à 0 après les calculs (drain mode)
$threshold = $false
$ram = 0
$cpuusage = 0
if ($config.RAM_ENABLED -eq 1)
{
$raminfos = Get-WmiObject -Class WIN32_OperatingSystem
$ram = [math]::Floor( 100 - ($raminfos.FreePhysicalMemory / $raminfos.TotalVisibleMemorySize) * 100)
# usage - ( ( pourcentage de ram libre / limite de ram ) * IF )
$usage = [math]::Floor($usage - (( $ram / $Config.RAM_VALUE ) * $config.RAM_IMPORTANCEFACTOR ) )
Write-verbose "Ram : $ram`n`tUsage : $usage"
Write-verbose "Ram used : $ram"
$ramscore = [math]::Floor( ( $ram / $Config.RAM_VALUE ) * $config.RAM_IMPORTANCEFACTOR )
Write-Verbose "Ram score : $ramscore"
if ($ram -ge $config.RAM_THRESHOLD)
{
$threshold = $true
Write-verbose "Limite THRESHOLD sur RAM"
Write-verbose "Limit THRESHOLD on RAM"
}
}
}
if ($config.CPU_ENABLED -eq 1)
{
$cpuusage = $(Get-WmiObject -Class Win32_Processor).loadpercentage
$usage = [math]::Floor( $usage - (( $cpuusage / $config.CPU_VALUE ) * $config.CPU_IMPORTANCEFACTOR) )
Write-verbose "CPU : $cpuusage`n`tUsage : $usage"
Write-verbose "CPU used : $cpuusage"
$cpuscore = [math]::Floor( ( $cpuusage / $config.CPU_VALUE ) * $config.CPU_IMPORTANCEFACTOR )
Write-verbose "CPU score : $cpuscore"
if ($cpuusage -ge $config.CPU_THRESHOLD)
{
$threshold = $true
Write-verbose "Limite THRESHOLD sur CPU"
Write-verbose "Limit THRESHOLD on CPU"
}
}
## Calcul des scores
## RAM
#
if ($threshold -or $usage -lt 0)
$usage = [math]::Floor( $usage - $ramscore )
Write-Verbose "Score post RAM : $usage"
## CPU
$usage = [math]::Floor( $usage - $cpuscore )
Write-Verbose "Score post CPU : $usage"
if ($threshold -or $usage -le 0)
{
$usage = "drain 0"
return "drain 0"
}
else
{
return "ready $usage"
}
return "ready $usage"
}
@@ -170,4 +186,14 @@ while ($true)
$tcpnetworkstream.close()
}
}
Write-Verbose "Fin"
$tcpnetworkstream.Close()
$tcpnetworkstream.Dispose()
$listener.Server.Shutdown()
$listener.Server.Close()
$listener.Server.Dispose()
$listener.Stop()
$listener.Dispose()