Dataprotector – kontrola vložení pásek
Pro dobře fungující zálohování je třeba minimálně 1x týdně vyměnovat média (na které se provádí zálohy) a odvážet je do jiné lokality (abychom nepřišli o data např při krádeži, požáru apod). Nyní jsem řešil problém, že náš zákazník má 5 poboček, na každé zálohovací mechaniku (LTO3) a nasinstalován HP DataProtector. Na pobočkách žádný IT človíček není, pásky vyměňují zaměstnanci bez IT vzdělání dle rozpisu v XLS. Pokud by vše dělali dle pokynů, žádný problém by nenastal nicméně jak je tu lidský faktor, problémy nastávají (uživatelka, co mění pásky, má dovolenou, jde dříve z práce a nebo zapomene apod).
Proto jsem vytvořil jednoduché scripty, který zjistí jaké pásky jsou vložené v jednotlivých mechanikách, zda mají retenci a poté případně pošle email.
Základ je PERL script na checkování retence pásek v mechanikách – kontrola_pasek.pl:
##### KONFIGURACE #######
@pooly = ("CZ","HU","PL","RO","SK"); #konfigurace poolu v DP vždy obsahuje dané písmena - pro každou lokalitu vlasní pool
@mechaniky = ("cze","hun","pol","rom","svk"); #páskové mechaniky jsou pojmenovány také dle lokalit
$pocet_lokalit = 5; #nebyl čas dohledat fci v perlu na počet prvků v poli
#########################
$zapsat=''; #inicializace promenne kam se zapisuje vystup
$pocet_lokalit--; #pole je od 0 takze jednu odecteme
#projdeme vsechny lokality
for ($i=0;$i<=$pocet_lokalit;$i++) {
#vylistujeme to, co je v mechanice, radek jen kde je mechanika
$exec = "\"C:\\Program Files\\OmniBack\\bin\\omnimm.exe\" -repository_update \"HP:Ultrium 3-SCSI_".$mechaniky[$i]."win60ent00\""; #název serveru je dle konceptu, tzn doplňují se jen posledni písmenka
#print "$exec\n"; #debug
$vystup=`$exec`;
#z vystupu potřebujeme jen název pásky, která je v mechanice
@sekanec = split("Data Protector medium \"", $vystup);
@sekanec = split("\" found.", $sekanec[1]);
$sekanec = $sekanec[0];
$sekanec =~ s/ //g; #regularnim vyrazem smazeme mezery
#print $sekanec; #debug
#zjistime z poolu jake maji retence
$exec = "\"c:\\Program Files\\OmniBack\\bin\\omnimm.exe\" -list_pool \"Acc_".$pooly[$i]."\" | find \"$sekanec\""; #jak jsem psal výše, pooly jsou nazvané dle konceptu
$vystup=`$exec`;
#print $vystup; #debug
#print length($sekanec); #debug
#pokud je v řetezci dvojtečka, je uveden čas (oáska má retenci). Dále musíme zjistit, zda to vůbec našlo pásku - dle počtu znaků řetezce s páskou
$je_uvedena_retence = index($vystup, ':');
if ( ($je_uvedena_retence>0) or (length($sekanec)<1) ) {
if (length($sekanec)<1) { $sekanec = "NENÍ VLOŽENA PÁSKA"; }
$zapsat .= "ERROR - PASKA:\"$sekanec\", MECHANIKA:\"HP:Ultrium 3-SCSI_".$mechaniky[$i]."win60ent00\"\n";
} else {
$zapsat .= "OK - PASKA:\"$sekanec\", MECHANIKA:\"HP:Ultrium 3-SCSI_".$mechaniky[$i]."win60ent00\"\n";
}
}
#print "\n\n\n".$zapsat; #debug
#nakonec výstup zapíšeme do souboru (pro zaslání emailem)
open (MYFILE, '>c:\scripts\PIKOpasky.txt');
print MYFILE $zapsat;
close (MYFILE);
Dále je nutné mít mechanismus, který daný soubor zašle na email. Použivám již delší dobu jednoduchý VBS script – pikosendmail.vbs
Sub SendMail ()
Dim objEmail, iAttachmenCount, aAttachment
Const sSMTPserver = "666.666.666.666"
aAttachment = Split(MailAttachment,";",-1,1)
Set objEmail = CreateObject("CDO.Message")
objEmail.To = "PRIJEMCE@DOMENA.CZ"
objEmail.ReplyTo = "ODESILATEL@DOMENA.CZ"
objEmail.Sender = "ODESILATEL@DOMENA.CZ"
objEmail.AddAttachment "c:\scripts\PIKOpasky.txt" #p
objEmail.Subject = "List of media"
objEmail.Textbody = "Kontrolo vlozenych pasek"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = sSMTPserver
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
End Sub
Call SendMail ()
No a zbývá nám udělat např. BATku, která spustí nejdříve kontrola_pasek.pl a poté pikosendmail.vbs, kterou následně nashedulujeme – piko_kontrola_pasek.bat
"C:\Program Files\OmniBack\bin\perl.exe" "C:\Program Files\OmniBack\bin\kontrola_pasek.pl"
cscript.exe C:\scripts\pikosendmail.vbs
