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;
}