Webseiten-Werkzeuge

Benutzer-Werkzeuge




Überwachung Konverter/Gateway-Service

Anforderung

Beim Betrieb grösserer convert4print-Installationen kommt bei dem einen oder anderen Administrator der Wunsch auf, darüber informiert zu werden, wenn einer der Drucker oder eines der Gateways in einen Zustand gerät, der ein manuelles Eingreifen erforderlich macht, wie im einfachsten Fall ein Papierstau oder fehlender Toner.

Im Kontrollfeld des Konverter/Gateway-Services sind diese Informationen sichtbar, aber das Kontrollfeld kann aus technischen Gründen nicht von einem anderen Rechner aus aufgerufen werden. Von daher ergibt sich die Frage, ob und wie eine Benachrichtigung z.B. via E-Mail realisiert werden kann.

Realisierung

Beginnend mit dem Build 123 des eigentlichen Services (der Datei c4pServer.exe) wird ein Teil eines Überwachungs­mechanismus unterstützt, dessen vollständige Realisation erst in einer späteren Version von convert4print enthalten sein kann.

Dieser Überwachungsmechanismus prüft alle 30 Sekunden den Zustand der aktuell konfigurierten Konverter und Gateways. Alle Zustände, die nicht als normaler Betriebszustand (Angehalten, Bereit, Druckt) angesehen werden, werden in Form eines Ereignisses 1013 gemeldet, welches in das Ereignisprotokoll Anwendung des Windows-Systems eingetragen wird.

Dabei wird nicht jeder Fehlerzustand einzeln gemeldet, sondern es wird eine Fehlerliste für den gesamten Konverter/Gateway-Service erstellt. Erst wenn sich der Zustand mindestens eines Konverters oder Gateways ändert, wird wieder das Ereignis ausgelöst. Das bedeutet auch, dass die Behebung des einzigen oder letzten Fehlerzustands ein Ereignis (mit einer leeren Fehlerliste) erzeugt.

Zusammen mit der Möglichkeit, beim Eintritt eines Ereignisses im Windows-System ein Programm oder Skript zu starten, kann damit eine effektive, weil automatische Überwachung realisiert werden.

Wie mit dem Eintritt eines bestimmten Ereignisses ein Programm oder Skript gestartet wird, ist ausführlich im Tip Überwachung convert4print II (für Windows 8, 8.1, 10, Windows Server 2012/2016/2019 für genau diesen Fall) beschrieben. Hier soll nur gezeigt werden, wie konkret auf das Ereignis 1013 des Konverter/Gateway-Services reagiert werden kann.

Fehlerliste

Wie bereits angesprochen, erzeugt der Konverter/Gateway-Service eine Fehlerliste, die Bestandteil der Nachricht ist, die mit dem Ereignis 1013 mitgeliefert wird. Schaut man sich solch ein Ereignis in der Windows Ereignisanzeige an, ist die Fehlerliste der Text, der mit dem Wort Statusaenderung: beginnt.

Sind mehrere Konverters oder Gateways betroffen, enthält die Liste entsprechend viele Zeilen.

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 Konverters oder des Gateways, so wie er auch im Kontrollfeld angezeigt wird.

Skript

Mit Hilfe eines sehr überschaubaren Skripts kann diese Fehlerliste in eine für jedermann verständliche E-Mail umgesetzt werden. Im Skript wird dazu das Ereignisprotoll ausgelesen und nach dem letzten Ereignis 1013 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').

c4pEvents.pl
#!/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 .= "<tr><td>" . $Status . "</td><td>" . $1 . "</td></tr>\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.

Mail.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title>Statusänderung Konverter/Gateway-Service</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  </head>
 
  <body style="font-size: 70%; font-family: Verdana, Arial, Helvetica, MS Sans Serif; padding: 0px; margin: 0px;">
 
    <div style="width: 55em; margin: 0px; float: left;
                background-repeat: no-repeat; background-color: white;">
 
      <div style=" margin-left: 15px;">
 
        <h1 style="color: #333399; font-size: 110%; margin-top: 1em; margin-bottom: 2em;">
          Statusänderung Konverter/Gateway-Service
        </h1>
 
        <p>Sehr geehrte Damen und Herren,</p>
 
        <p>Mit dieser automatisch erzeugten Nachricht erhalten Sie eine Liste der Konverter und/oder Gateways, deren Status aktuell eine Handlung des Administrators notwendig macht.</p>
 
        <table cellpadding="4" cellspacing="0" border="0" 
               style="font-size: 100%; margin: 2em; border-collapse: collapse;">
          <tr bgcolor="#EEEEEE">
            <td height="15" width="120"><b>Status</b></td>
            <td height="15"><b>Drucker / Gateway</b></td>
          </tr>
 
          [% Tabelle %]
 
        </table>     
      </div>
    </div>
  </body>
</html>


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.


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 convert4print 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.
convert4print/tips/tip46.txt · Zuletzt geändert: 2020-03-16 18:13 (Externe Bearbeitung)