#!/usr/bin/perl
use Win32::EventLog;
use MIME::Lite::TT::HTML;
use strict;
my $Tabelle = "";
#---------------------------------------------------------------------------#
sub GetEvents
{
my ($recs, $base, $off, $hashRef, $Event, $Status);
my $handle=Win32::EventLog->new("Application", $ENV{ComputerName});
$handle->GetNumber($recs);
$handle->GetOldest($base);
$off = $recs - 1;
while ($off >= 0)
{
$handle->Read(EVENTLOG_BACKWARDS_READ | EVENTLOG_SEEK_READ,
$base + $off,
$hashRef);
if ($hashRef->{Source} eq "c4pServer")
{
Win32::EventLog::GetMessageText($hashRef);
my $Msg = $hashRef->{Message};
my $Event = $hashRef->{EventID} & 1073741823;
if ($Event == 1013)
{
my @lines = split /\n/, $Msg;
open (MAIL, ">Mail.txt");
foreach my $line (@lines)
{
if ($line =~ /^[A-Z]{3}/)
{
$Status = "";
if ($line =~ /ERR (.*)./) { $Status = 'Fehler'; }
elsif ($line =~ /LIC (.*)./) { $Status = 'Lizenzfehler'; }
elsif ($line =~ /PRT (.*)./) { $Status = 'Druckerfehler'; }
elsif ($line =~ /SPC (.*)./) { $Status = 'Debug'; }
elsif ($line =~ /INT (.*)./) { $Status = 'Eingriff erforderlich'; }
elsif ($line =~ /JAM (.*)./) { $Status = 'Papierstau'; }
elsif ($line =~ /PAP (.*)./) { $Status = 'Kein Papier'; }
elsif ($line =~ /TON (.*)./) { $Status = 'Tonerstand niedrig'; }
elsif ($line =~ /OFL (.*)./) { $Status = 'Nicht betriebsbereit'; }
elsif ($line =~ /COV (.*)./) { $Status = 'Abdeckung offen'; }
elsif ($line =~ /NET (.*)./) { $Status = 'Netzwerkfehler'; }
elsif ($line =~ /FUL (.*)./) { $Status = 'Ausgabefach voll'; }
if ($Status ne "")
{
$Tabelle .= "" . $Status . " " . $1 . " \n";
printf MAIL "%-21.21s %s\n", $Status, $1;
}
}
}
close (MAIL);
return ($Tabelle eq "") ? 0 : 1;
}
}
$off--;
}
return 0;
}
#---------------------------------------------------------------------------#
chdir ("C:\\Users\\Public\\Documents\\SPE Systemhaus GmbH\\convert4print\\c4pScript");
if (GetEvents ())
{
my %params = (Tabelle => $Tabelle);
my %options = (die_on_bad_params => 0);
my $msg = MIME::Lite::HT::HTML->new(From => 'c4p@spe-systemhaus.de',
To => 'spe@spe-systemhaus.de',
Subject => 'Statusänderung Konverter / Gateway-Service',
Encoding => 'quoted-printable',
Template => {
html => "Mail.html",
text => "Mail.txt"
},
Charset => 'iso8859-1',
TmplOptions => \%options,
TmplParams => \%params);
MIME::Lite->send('smtp', "10.1.1.9", Timeout=>60);
$msg->send;
}
exit 0;
\\
Zum Senden der E-Mail wird das Paket //%%MIME%%::Lite::TT::%%HTML%%// verwendet, welches eine E-Mail mit einem Text-Teil und einem %%HTML%%-Teil erzeugen kann. Dabei können im %%HTML%%-Teil Textersetzungen für variable Bestandteile der E-Mail vorgenommen werden.
Der %%HTML%%-Teil der E-Mail besteht aus der unten abgebildeten Datei //Mail.html//. In diesem Fall hier wird die Tabelle mit den Druckern und deren Stati eingesetzt (an Stelle des Tags '[% Tabelle %]').
Die Absender- und Empfängeradresse für die E-Mail, das Arbeitsverzeichnis sowie der Zugriff auf den eigenen E-Mail-Server sind selbstredend an die eigenen Bedürfnisse anzupassen.
\\
\\
Statusänderung Konverter/Gateway-Service
Statusänderung Konverter/Gateway-Service
Sehr geehrte Damen und Herren,
Mit dieser automatisch erzeugten Nachricht erhalten Sie eine Liste der Konverter und/oder Gateways, deren Status aktuell eine Handlung des Administrators notwendig macht.
Status
Drucker / Gateway
[% Tabelle %]
\\
Ein Beispiel für die so erzeugten E-Mails zeigt die nachfolgende Abbildung. Aufgrund der einfachen Konstruktion mit der externen %%HTML%%-Datei als Vorlage für das E-Mail kann das Aussehen der E-Mail praktisch beliebig formatiert und an die persönlichen Bedürfnisse angepasst werden.
\\
\\
{{convert4print:tips:0046-1.png}}
\\
==== Ereignisse ====
Nachfolgend eine Liste der Ereignisse, die vom Konverter/Gateway-Service in das Ereignisprokoll eingetragen werden. Der Code ''%1'' bedeutet, dass an diesen Stellen ergänzende, an die jeweilige Situation angepasste Informationen eingeblendet werden.
^ Typ ^ Ereignis ^ Bedeutung ^
| Information | 1000 | Der convert4print Service wurde erfolgreich installiert. |
| Information | 1001 | Der convert4print Service wurde deinstalliert. |
| Information | 1002 | Der convert4print Service wurde erfolgreich gestartet. |
| Information | 1003 | Der convert4print Service wurde beendet. |
| Fehler | 1004 | Der convert4print Service meldet den Fehler: %1. |
| Fehler | 1005 | Die convert4print Installation ist inkonsistent. Ein sicherer Betrieb ist nicht moeglich (%1). |
| Fehler | 1006 | Der convert4print Service kann eine Anfrage nicht ausfuehren. |
| Fehler | 1007 | Der convert4print Service hat den/das Konverter/Gateway [%1] neu gestartet. |
| Fehler | 1008 | Der convert4print Service kann den/das Konverter/Gateway [%1] nicht starten. |
| Information | 1009 | Der convert4print Service meldet den benutzerdefinierten Kode %1. |
| Information | 1010 | Mindestens eine der Konsolen kann im Netzwerk erreicht werden und ist betriebsbereit. |
| Fehler | 1011 | Mindestens eine Management Konsole benoetigt einen Eingriff. Die Konsole ist im Netzwerk nicht erreichbar oder sie ist nicht betriebsbereit. Der Fehlercode ist %1. |
| Fehler | 1012 | Der Status der Konsole(n) ist betriebsbereit. Es gibt aber einen zusaetzlichen Statuscode '%1'. |
| Warnung | 1013 | Statusaenderung: %1 |
| Fehler | 1014 | Der SNMP-Server wurde unerwartet beendet. Er meldet den Fehlerkode %1. |
\\
\\
==== Hinweise ====
* Die Erzeugung des Ereignisses 1013 ist davon abhängig, ob in der Registry von (c4p) das DWORD mit dem Namen 'Event' unter 'HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SPE Systemhaus GmbH\convert4print\c4pServer' existiert und den Wert 1 hat. Nur dann wird das Ereignis ausgelöst. Das vermeidet, dass die Ereignis(-)anzeige unnötig gefüllt wird, obwohl gar keine automatische Auswertung gewünscht ist.
* In dem %%Perl%%-Skript befindet sich eine Fallunterscheidung für die einzelnen Druckerstati. Diese Liste ist vollständig. Falls ein bestimmter Druckerstatus nicht gemeldet werden soll, genügt es, einfach den entsprechenden Fall auszukommentieren. Damit können Meldungen ganz einfach nach den persönlichen Bedürfnissen gefiltert werden.
* Das Skript erzeugt in der dargestellten Form keine E-Mail, wenn kein Konverter gelistet ist. Falls es von Interesse ist, auch mitzubekommen, dass das letzte Problem behoben worden ist, kann einfach die Zeile ''return ($Tabelle eq "") ? 0 : 1;'' auf ''return 1;'' geändert werden.
* Bei der Einrichtung dieser Überwachung ist darauf zu achten, dass für die Zwischenspeicherung der Dateien //Mail.txt// und //Mail.html// Verzeichnisse gewählt werden, auf die die //Aufgabenplanung// Zugriffsrechte zum Schreiben hat.