Analyse de la charge processeur via VBS

Le
Dom
Bonjour à tous,

Je souhaite tester la charge processeur de mes serveurs via WSH.
Je compte procéder ainsi:
le script va tester pendant 5 mn si la charge processeur est supérieure à un
seuil donné par intervalles de x secondes. Pour se faire, j'ai ecrit en
m'inspirant du scriptcenter le code ci dessous. J'ai lancé un DivX pour que
mon processeur soit constamment au dessus de la valeur seuil codé.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "ootcimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objProcessor = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet
objRefresher.Refresh

a=1
b=1
c = DateAdd("n", 5, Time) 'Ajoute 5 mn à l'heure actuelle
WScript.echo Time
WScript.Echo c
Do While Time < c 'Test de la charge processeur pdt 5 mn

For Each intProcessorUse In objProcessor
If intProcessorUse.PercentProcessorTime > 30 Then 'Seuil: 30%.
Valeur de test.
WScript.Echo "Charge processeur anormale"
a=a+1 'Compteur de dépassement de seuil
End If
Next
Wscript.Sleep 6000 'J'attends 6 secondes et je recommence mon test
objRefresher.Refresh
b=b+1 'Compteur de passage
Loop

WScript.Echo "Sortie de boucle"
WScript.Echo "Nbre de tests: " & a
WScript.Echo "Nbre de passages: " & b

Voici ce qui cloche:
Alors que mon DivX tourne, mon processeur est constamment au dessus de 30%
d'utilisation (valeur de test). En toute logique, 1 passage dans ma boucle =
1 notification de dépassement de seuil. Mais, en déboggage, je vois que mon
compteur de passage indique 51 (valeur b) alors que mon compteur de
dépassement de seuil indique 99 (compteur a). Quelquechose ne va donc pas ds
mon code puisque les 2 valeurs auraient du être identiques. J'ai en plus,
plus de valeurs mesurées que de passage ds ma boucle de test
J'imagine que c'est ma sous boucle For Each Next qui pose pb mais ne
maitrisant pas bien la méthode utilisée ici, ce n'est pas très clair pour
moi.
In fine, je souhaiterai qu'une alerte en provenance des serveurs me soit
renvoyée si pendant 5 mn (par exemple) toutes les valeurs de charge
processeur sont au dessus du seuil d'alerte (disons 90%).

Une idée de là ou ca coince ds mon code ?

Merci

Dom
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Méta-MCI
Le #550095
Bonsoir !

Je ne répond pas directement.

Mais, pour un besoin similaire, j'ai adopté Samurize
(http://www.samurize.com)
Bonne surprise : Samurize est scriptable, via Active-Scripting. Du coup, on
peut utiliser VBscript, JScript, LuaScript, mais aussi Python (le mieux pour
moi).

@-salutations
--
Michel Claveau
jbongran
Le #550092
Dom wrote:
Bonjour à tous,

Je souhaite tester la charge processeur de mes serveurs via WSH.
Je compte procéder ainsi:
le script va tester pendant 5 mn si la charge processeur est
supérieure à un seuil donné par intervalles de x secondes. Pour se
faire, j'ai ecrit en m'inspirant du scriptcenter le code ci dessous.
J'ai lancé un DivX pour que mon processeur soit constamment au dessus
de la valeur seuil codé.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer &
"rootcimv2") set objRefresher > CreateObject("WbemScripting.Swbemrefresher") Set objProcessor =
objRefresher.AddEnum _
(objWMIService,
"Win32_PerfFormattedData_PerfOS_Processor").objectSet
objRefresher.Refresh
a=1
b=1
c = DateAdd("n", 5, Time) 'Ajoute 5 mn à l'heure actuelle
WScript.echo Time
WScript.Echo c
Do While Time < c 'Test de la charge processeur pdt 5 mn

For Each intProcessorUse In objProcessor
If intProcessorUse.PercentProcessorTime > 30 Then 'Seuil: 30%.
Valeur de test.
WScript.Echo "Charge processeur anormale"
a=a+1 'Compteur de dépassement de seuil
End If
Next
Wscript.Sleep 6000 'J'attends 6 secondes et je recommence mon test
objRefresher.Refresh
b=b+1 'Compteur de passage
Loop

WScript.Echo "Sortie de boucle"
WScript.Echo "Nbre de tests: " & a
WScript.Echo "Nbre de passages: " & b

Voici ce qui cloche:
Alors que mon DivX tourne, mon processeur est constamment au dessus
de 30% d'utilisation (valeur de test). En toute logique, 1 passage
dans ma boucle = 1 notification de dépassement de seuil. Mais, en
déboggage, je vois que mon compteur de passage indique 51 (valeur b)
alors que mon compteur de dépassement de seuil indique 99 (compteur
a). Quelquechose ne va donc pas ds mon code puisque les 2 valeurs
auraient du être identiques. J'ai en plus, plus de valeurs mesurées
que de passage ds ma boucle de test ... J'imagine que c'est ma sous boucle
For Each ... Next qui pose pb mais
ne maitrisant pas bien la méthode utilisée ici, ce n'est pas très
clair pour moi.
In fine, je souhaiterai qu'une alerte en provenance des serveurs me
soit renvoyée si pendant 5 mn (par exemple) toutes les valeurs de
charge processeur sont au dessus du seuil d'alerte (disons 90%).

Une idée de là ou ca coince ds mon code ?

Merci

Dom


Deux processeurs ou un en hyperthreading ?

Publicité
Poster une réponse
Anonyme