Controle des Serveurs
Ce script lit le contenu de votre saplogon.ini sous windows et génére une fenetre
qui affiche l'état des serveurs SAP
Ceci est la premiére version merci d'excuser les lacunes.
use Tk;
use IO::Socket;
use IO::File;
use Env;
use Socket;
use Net::netent;
my($root) = MainWindow->new();
$root->title("controle");
my %Listeserveur=listeserveur();
# widget creation
my($fermer) = $root->Button (
-text => 'Fermer',
-command => sub { exit;},
);
my($rafraichir) = $root->Button (
-text => 'Rafraichir',
-command => [\&controle,(%Listeserveur)]
);
my $ligne=0;
foreach my $serveur (keys %Listeserveur)
{
$ligne=$ligne+1;
my $nom_label = "label_$serveur";
$$nom_label = $root->Label (
-text => $serveur,
);
my $nom_etat = "etat_$serveur";
$$nom_etat = $root->Label (
-text => 'OK',
-background =>'green'
);
$$nom_label->grid(
-in => $root,
-column => '1',
-row => $ligne,
);
$$nom_etat->grid(
-in => $root,
-column => '2',
-row => $ligne,
);
}
$fermer->grid(
-in => $root,
-column => '2',
-row => $ligne+1,
-sticky =>'nesw'
);
$rafraichir->grid(
-in => $root,
-column => '1',
-row => $ligne+1,
-sticky =>'nesw'
);
# Resize behavior management
# container $root (rows)
$root->gridRowconfigure(1, -weight => 0, -minsize => 20);
$root->gridRowconfigure(2, -weight => 0, -minsize => 20);
$root->gridRowconfigure(3, -weight => 0, -minsize => 20);
$root->gridRowconfigure(4, -weight => 0, -minsize => 20);
$root->gridRowconfigure(5, -weight => 0, -minsize => 20);
$root->gridRowconfigure(6, -weight => 0, -minsize => 20);
# container $root (columns)
$root->gridColumnconfigure(1, -weight => 0, -minsize => 20);
$root->gridColumnconfigure(2, -weight => 0, -minsize => 20);
# additional interface code
# end additional interface code
controle(%Listeserveur);
$root->repeat(480000,[\&controle,%Listeserveur]);
Tk::MainLoop;
sub controle {
my %ListeServeur = @_;
foreach my $serveur ( keys %ListeServeur)
{
my $nom_etat = "etat_$serveur";
if (pingsap($ListeServeur{$serveur},0) gt 0 )
{
$$nom_etat->configure(-background=>'red',-text=>'HS');
}
else
{
$$nom_etat->configure(-background=>'green',-text=>'OK');
}
}
}
sub adresse {
my $monserveur = $_[0];
my @Listeadresse =gethostbyname($monserveur);
(my $a ,my $b , my $c , my $d) = unpack('C4',$Listeadresse[4]);
return $a.".".$b.".".$c.".".$d;
}
sub listeserveur {
my $windir = $ENV{WINDIR};
my $nomfichier = "$windir\\saplogon.ini";
my $df = IO::File->new($nomfichier,"r") or die "Fichier non
ouvert $nomfichier";
my $ligne="";
my %serveurs=();
while(<$df>) {
$ligne = $_;
chomp($ligne);
if ($ligne =~ /Server/i) {
$ligne = $df->getline();
while ( $ligne =~ /Item/i)
{
(my $item, my $serveur) =split("=",$ligne);
chomp($serveur);
my $adresseServeur = adresse($serveur) ;
$serveurs{$serveur} = $adresseServeur ;
$ligne = $df->getline();
}
}
}
$df->close;
return %serveurs
}
sub pingsap {
my $hote = $_[0];
my $Sysnr = $_[1];
my $erreur= 0;
my $socket = new IO::Socket::INET(
PeerAddr => $hote,
PeerPort => 3200+$Sysnr,
Proto => "tcp",
Type =>SOCK_STREAM);
if ($@)
{
$erreur = 1;
}
close($socket);
return $erreur;
}