Statusaenderung:
PRT Systemdrucker
PAP Produktion/Halle 1
PAP Produktion/Halle 2
Dabei ist der konkrete Fehlerzustand in Form eines mnemonischen Kürzels aus drei Grossbuchstaben am Anfang der Zeile kodiert. Dahinter folgt, mit einer Leerstelle abgetrennt, der Name des Clients oder des Gateways, so wie er auch im Kontrollfeld angezeigt wird. Eventuell in Subcontainer abgelegte Drucker erscheinen mit ihrem kompletten Pfad.
\\
\\
==== Skript ====
Mit Hilfe eines sehr überschaubaren Skripts kann diese Fehlerliste in eine für jedermann verständliche E-Mail konvertiert werden. Im Skript wird dazu das Ereignisprotoll ausgelesen und nach dem letzten Ereignis 1018 gesucht. Dessen Fehlerliste wird Zeile für Zeile abgearbeitet. Die Kürzel aus der Fehlerliste werden in Klartext übersetzt (Liste im Skript ist vollständig). Ergebnis der Bearbeitung ist zum einen eine Zeichenkette mit dem Klartext (in der Datei 'Mail.txt') und eine %%HTML%%-Tabelle (in der globalen Variablen '$Tabelle').
\\
\\
#!/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 "p2fService")
{
Win32::EventLog::GetMessageText($hashRef);
my $Msg = $hashRef->{Message};
my $Event = $hashRef->{EventID} & 1073741823;
if ($Event == 1018)
{
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\\print2forms\\p2fScript");
if (GetEvents ())
{
my %params = (Tabelle => $Tabelle);
my %options = (die_on_bad_params => 0);
my $msg = MIME::Lite::TT::HTML->new(From => 'p2f@spe-systemhaus.de',
To => 'spe@spe-systemhaus.de',
Subject => 'Statusänderung Client / 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 das E-Mail, das Arbeitsverzeichnis sowie die Angaben zum eigenen E-Mail-Server sind selbstredend an die eigenen Bedürfnisse anzupassen.
\\
\\
Statusänderung Client/Gateway-Service
Statusänderung Client/Gateway-Service
Sehr geehrte Damen und Herren,
Mit dieser automatisch erzeugten Nachricht erhalten Sie eine Liste der Drucker 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.
\\
\\
{{print2forms:tips:0046-1.png}}
\\
==== Ereignisse ====
Nachfolgend eine Liste der Ereignisse, die vom Client/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 print2forms Service wurde erfolgreich installiert. |
| Information | 1001 | Der print2forms Service wurde deinstalliert. |
| Information | 1002 | Der print2forms Service wurde erfolgreich gestartet. |
| Information | 1003 | Der print2forms Service wurde beendet. Waren bei der Anforderung zum Beenden des Service noch Clients und Gateways aktiv wurden diese zwangsweise beendet, was eventuell zu Datenverlusten geführt haben kann. |
| Fehler | 1004 | Der print2forms Service meldet den Fehler: %1. |
| Fehler | 1005 | Die print2forms Installation ist inkonsistent. Ein sicherer Betrieb ist nicht möglich (%1). Eine oder mehrere Komponenten des print2forms Systems sind entweder modifiziert oder umbenannt worden, was dazu führt, dass die eingebetteten Zertifikate ungültig geworden sind. |
| Fehler | 1006 | Der print2forms Service kann eine Anfrage nicht ausführen. |
| Fehler | 1007 | Der print2forms Service hat den/das Client/Gateway [%1] neu gestartet. Der Client oder das Gateway ist abnormal beendet worden. Der Service wurde so konfiguriert, dass solche Clients und Gateways automatisch neu gestartet werden. |
| Fehler | 1008 | Der print2forms Service kann den/das Client/Gateway [%1] nicht starten. |
| Information | 1009 | Der print2forms Service startet mit Status %1. |
| Information | 1010 | Der print2forms Service meldet den benutzerdefinierten Kode %1. |
| Fehler | 1011 | Der print2forms Service kann das Service-Objekt nicht finden. Eventuell wurde der Service gestartet, bevor ein Service-Objekt ausgewählt wurde. Ein Service-Objekt auswählen und dann den Dienst noch einmal neu starten. |
| Information | 1012 | Der print2forms Service hat eine Sicherungsdatei auf dem print2forms Server erstellt. Eine eventuell vorhandene ältere Sicherungsdatei ist dabei überschrieben worden. |
| Fehler | 1013 | Der print2forms Service kann keine Sicherungsdatei auf dem Server erstellen. Entweder kann die Verbindung zum print2forms Server nicht hergestellt werden, oder der Service kann keine lokale Datei mit den Sicherungsdaten im Verzeichnis Anwendungsdaten erzeugen. |
| Information | 1014 | Der print2forms Service muss keine neue Sicherungsdatei erstellen, weil in der Konfiguration des Service seit der letzten Sicherung keine Änderungen vorgenommen worden sein. |
| Information | 1015 | Die Management Konsole(n) ist/sind im Netzwerk erreichbar und ist/sind betriebsbereit. |
| Fehler | 1016 | Mindestens eine Management Konsole ist nicht via Netzwerk erreichbar oder ist nicht betriebsbereit. Die zusaetzliche Statusmeldung des Services ist '%1'. |
| Fehler | 1017 | Die Management Konsole(n) sind funktionsfaehig, aber es gibt folgende Zusatzinformation '%1'. |
| Warnung | 1018 | Statusaenderung: %1 |
| Fehler | 1019 | Der Web-Server kann nicht gestartet werden. Die Fehlernummer ist %1. |
\\
\\
==== Hinweise ====
* 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 Drucker 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.
* Bei alten Betriebssystemen (Windows XP, Server 2003) existieren keine komfortablen Dialoge zur Einrichtung der Überwachung. Es existiert stattdessen ein Kommando //eventtriggers//, welches diese Aufgabe von der Kommandozeile aus erledigt (die Pfade zu Perl und zum Skript müssen natürlich angepasst werden):\\ \\ eventtriggers /create /tr p2fService /l application /so "p2fService" /eid 1018 /tk "C:\perl\bin\perl.exe \"C:\Dokumente und Einstellungen\All Users\Dokumente\SPE Systemhaus GmbH\print2forms\p2fScript\p2fEvents.pl\""