Software- und Organisations-Service GmbH MONITORING JOB SCHEDULER JOB SCHEDULER zur Server-Automation Technische Beschreibung Januar 2006 Software- und Organisations-Service GmbH · Giesebrechtstr. 15 · D-10629 Berlin · Telefon (030) 86 47 90-0 · Telefax (030) 8 61 33 35 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 2 Inhaltsverzeichnis 1 2 3 4 5 6 Zielsetzung Lizenzierung, Download, Dokumentation Anmeldung Startseite Menü Job Scheduler Aufträge für Managed Jobs 6.1 Jobs in Job-Ketten 6.2 Job/ Job-Kette Launch Backups 6.2.1 Job in der Job-Kette Launch Backups definieren 6.2.2 Aufträge für den Job Launch Backups definieren 6.3 Job-Kette Launch Custom Reports 6.3.1 Job in der Job-Kette Launch Custom Reports definieren 6.3.2 Aufträge für die Job-Kette Launch Custom Reports definieren 7 Datenbankverbindungen bereitstellen 8 Job- und Auftragstypen erstellen Software- und Organisations-Service GmbH 3 3 4 4 6 9 10 10 11 12 16 16 19 25 26 Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 1 3 Zielsetzung Der MONITORING JOB SCHEDULER ist die Implementierung des JOB SCHEDULERS für regelmäßig wiederkehrende Aufgaben der Systemadministration, die sich standardisieren lassen, z.B. Überwachen mehrerer verbundener Job Scheduler Zentrale Verwaltung von Aufträgen für mehrere Job Scheduler Überwachung der zur Verfügung stehenden Systemkapazität (Memory, Disk Space) eines Servers Löschen temporärer Dateien Logfile Verwaltung Backups der Datenbank und des File Systems Database Maintenance, z.B. Reorganisation von Indizes Erstellung und Versand von Reports Ausführung von kundenspezifischen Skripten Für diese wiederkehrenden Aufgaben wird der MONITORING JOB SCHEDULER mit sofort einsatzbereiten Standard-Jobs ausgeliefert, die lediglich für die eigene Umgebung konfiguriert bzw. für besondere Anwendungen angepasst werden müssen. Die JOB SCHEDULER Dokumentation sowie die Dokumentation der MANAGED JOBS wird an dieser Stelle vorausgesetzt. 2 Lizenzierung, Download, Dokumentation Der JOB SCHEDULER steht als Open Source Software unter der GNU-Lizenz GPL zur Verfügung. Download, Dokumentationen sowie weitere Hinweise finden Sie unter http://www.sos-berlin.com/scheduler bzw. unter http://sourceforge.net/projects/jobscheduler. Die Auslieferung des MONITORING JOB SCHEDULERS wird von SOS GmbH nach den Bedürfnissen individueller Kundenkreise angepasst. Wir senden auf Anfrage Installationspakete für Windows, Linxu und Solaris mit den entsprechenden Job-Implementierungen zu bzw. übernehmen die Installation. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 3 4 Anmeldung Nach der Installation ist der MONITORING JOB SCHEDULER unter der URL http://<hostname>/sos_scheduler/scheduler_login.php zu erreichen, Sie können sich zunächst mit dem Mandanten sos und dem Benutzernamen admin anmelden – ohne Kennwort: 4 Startseite Nach der Anmeldung sehen Sie im linken Frame ein Menü mit den zentralen Funktionen, im Frame rechts läuft die Web-Oberfläche zum Monitoring eines JOB SCHEDULERs. Sie können beliebig viele Job Scheduler gleichzeitig registrieren und über diese Oberfläche überwachen. Ein blauer Header-Balken steht jeweils für einen Job Scheduler, weist dessen ID, Port und Status aus. Um einen Job Scheduler für die Überwachung durch den MONITORING JOB SCHEDULER zu registrieren, muss in der XML Konfigurationsdatei des überwachten Job Schedulers folgender Eintrag vorhanden sein: <config main_scheduler Software- und Organisations-Service GmbH = "localhost:4444"> Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 5 Mit dem Eintrag wird vereinbart, dass der überwachte Job Scheduler sich beim MONITORING JOB SCHEDULER an Host localhost auf Port 4444 registriert. Der überwachte Job Scheduler baut automatisch die Verbindung auf bzw. stellt sie automatisch wieder her, falls der MONITORING JOB SCHEDULER neu gestartet wurde. Es können beliebig viele Job Scheduler registriert werden. Falls mehrere Job Scheduler überwacht werden, kann mit den Symbolen nen Job Scheduler minimiert bzw. wiederhergestellt werden. Per Klick auf das Fenster für jeweils ei- wird ein Job Scheduler in einem eigenen Fenster geöffnet. Bei aktivierter Checkbox kunden aktualisiert. wird die Monitor-Oberfläche eines Job Schedulers alle 5 Se- Per Klick auf den menu-Link werden für diesen Job Scheduler alle Funktionen zum Starten, Stoppen und Anhalten angeboten: Der MONITORING JOB SCHEDULER hat eine eigene Benutzerverwaltung, in der Sie Benutzergruppen, Benutzer sowie deren Rollen und Rechte einrichten können: Dokumentationen stehen unter dem Menüpunkt Dokumentation in verschiedenen Formaten (HTM, PDF, XML) zur Verfügung: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 5 6 Menü Job Scheduler Im Menü Job Scheduler stehen 4 Funktionen zur Verfügung: Mit Job-Kontrolle Verarbeitung erreichen Sie die klassische Web-Oberfläche zur Kontrolle der Jobs des überwachenden Job Schedulers. Falls weitere Job Scheduler registriert sind, die überwacht werden sollen, werden diese hier mit ID und Port aufgeführt. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 7 Unter dem Menüpunkt Job-Auslastung sehen Sie eine Übersicht der MANAGED JOBS. Es wird jeweils die Anzahl offener Aufträge, Eingangs-, Ausgangs- und Fehlerstatus dargestellt. Ein Klick auf den Job-Link startet den Job. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 8 Die Job-Historie bündelt die Protokolle aller Jobs in einer Übersicht. Protokolle können zu bestimmten Jobs oder aus einem bestimmten Zeitraum gesucht werden. Werden keine Jobs explizit über die Listbox ausgewählt, dann werden Protokolle aller Jobs aus dem angegebenen Zeitraum dargestellt, die aktuellsten zuerst. Das Symbol öffnet das Protokoll, mit dem Symbol kann das Protokoll aus der Historie entfernt werden. Der Menüpunkt Monitoring öffnet die Monitor-Oberfläche – diese Ansicht ist beim Aufruf von http://<hostname>/sos_scheduler/scheduler_login.php nach der Anmeldung per Default aktiviert. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 6 9 Aufträge für Managed Jobs MANAGED JOBS werden nicht wie üblich über die XML-Konfigurationsdatei des Job Schedulers konfiguriert, sondern können über die Web-Oberfläche definiert werden. Alle für die Ausführung notwendigen Informationen werden in einer Datenbank gehalten und können zur Laufzeit des Job Schedulers über die Web-Oberfläche aktualisiert werden. Bitte beachten Sie zu technischen Details die Dokumentation MANAGED JOBS . Für zentrale Aufgaben wird eine Reihe vordefinierter Jobs ausgeliefert: Job Aufgabe Launch Backups Skripte zur partiellen Sicherung oder Vollsicherung von Datenbank oder File System ausführen Launch Database Statements SQL-Statements oder SQL-Prozeduren in einer Datenbank ausführen Launch Database Reports per SQL Daten aus einer Datenbank auslesen, diese als Report aufbereiten und als eMail versenden Launch Custom Reports per SQL Daten aus einer Datenbank auslesen, diese als Report aufbereiten und als eMail versenden Launch Executable Files Ausführbare Dateien auf dem Server starten Jeder Job kann für ähnliche Aufgaben mehrere Aufträge des gleichen Typs enthalten. Aufträge können eine eigene Startzeit-Konfiguration besitzen, also unabhängig von einander zeitgesteuert gestartet werden. Da nur Jobs innerhalb von Job-Ketten Aufträge verarbeiten, ist für jeden Job eine Job-Kette definiert, die nur diesen einen Job enthält. Die Job-Kette ist in diesem Fall ein Container für einen einzelnen Job, dem beliebig viele Aufträge der gleichen Art zugeordnet sein können. Die Art des Auftrags wird durch den Job- bzw. Auftragstyp festgelegt und gilt damit für alle Aufträge in einer Job-Kette. Im Menü Workflow werden die Job-Ketten, ihre Jobs und Aufträge sowie die Art der Jobs und Aufträge definiert. Außerdem können an dieser Stelle unterschiedliche Datenbankverbindungen für die Jobs, die diese benötigen, bereitgestellt werden. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 10 6.1 Jobs in Job-Ketten Wählen Sie aus dem Menü Workflow den Eintrag Job-Ketten/ Jobs/ Aufträge – Sie sehen eine Liste mit den bereits definierten Job-Ketten für die bereitgestellten MANAGED JOBS: Die ausgelieferten Job-Ketten enthalten jeweils einen Job gleichen Namens: Job-Kette Job Launch Backups Launch Database Statements Launch Database Reports Launch Custom Reports Launch Executable Files Launch Backup Launch Database Statement Launch Database Report Launch Customized Report Launch Executable File Neben den ausgelieferten Job-Ketten können Sie mit dem Link neue Job-Kette selbst Job-Ketten definieren. Sie haben auch die Möglichkeit, mit der Web-Oberfläche Standard-Jobs zu erstellen, die von einer Job-Kette unabhängig sind. Die Konfiguration eines auf diese Weise erstellten Standard-Jobs wird ebenfalls in der Datenbank gespeichert ist dem Job Scheduler anschliessend bekannt. Im folgenden wird am Beispiel der Job-Kette Launch Backups der Zusammenhang von Job-Kette, Job und Aufträgen erläutert. 6.2 Job/ Job-Kette Launch Backups Die Job-Kette Launch Backups enthält Aufträge zum Sichern von Datenbank und File System. Öffnen Sie die Job-Kette Launch Backups: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 11 Die Job-Kette hat einen internen Namen, einen Titel für die Web-Oberfläche und ggf. eine Beschreibung. Eine Job-Kette kann gesperrt werden, der zugehörige Job bzw. die Aufträge werden nicht mehr ausgeführt. Bedeutung der Buttons: Speichern ... unter ... unter mit Baum Neustarten Abbrechen Zurücksetzen Entfernen Aufträge entfernen Geänderte Definition der Job-Kette in der Datenbank speichern Definition der Job-Kette unter einem anderen Namen in der Datenbank speichern Definition der Job-Kette mit allen Jobs und Aufträgen in der Datenbank speichern Speichern und Job-Kette mit geänderter Konfiguration neu starten Bearbeiten abbrechen Änderungen seit dem letzten Speichern zurücknehmen Job-Kette entfernen Alle Aufräge einer Job-Kette entfernen Die Bedeutung der Buttons gilt im wesentlichen auch für Jobs und Aufträge, Besonderheiten werden im Folgenden erwähnt. Unterhalb der Job-Kette gibt es ein Ordner-Symbol für Aufträge und ein Ordner-Symbol für Jobs. 6.2.1 Job in der Job-Kette Launch Backups definieren Der Ordner Jobs enthält den einzigen Job der Job-Kette Launch Backups. Eine Job-Definition verfügt über Titel, Beschreibung und einen Job-Typ. Abhängig vom Job-Typ werden weitere Parameter, d.h. Formularfelder in der Web-Oberfläche zur Verfügung gestellt. Zuweisung des Job-Typs Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 12 Einem Job wird ein Job-Typ aus der Liste der verfügbaren Job-Typen zugewiesen: Details zu den Job-Typen siehe Dokumentation MANAGED JOBS. Da für die Aufträge zum Sichern von Datenbank oder File System Skripte aufgerufen werden, ist der Job Launch Backups vom Typ Executable File. Ein Job kann eine eigene Startzeit-Konfiguration (run time) haben. Da die explizite Startzeit individuelll für jeden Auftrag dieses Jobs festgelegt wird, ist an dieser Stelle nur die Zeit definiert, innerhalb der Job überhaupt laufen darf: <run_time let_run = "yes" begin = "00:00" end = "24:00"/> D.h. der Job kann jederzeit laufen. Ein Job kann gesperrt werden, dann werden keine Aufträge dieses Jobs mehr verarbeitet. Für jeden Job kann die Anzahl der Prozesse festgelegt werden, die der Job Scheduler parallel zur Verfügung stellt, wenn Aufträge gleichzeitig eintreffen, im Beispiel sind 2 Prozesse eingestellt. Sollten ggf. zwei Aufträge zur Datensicherung die gleiche Startzeit haben, können sie auf diese beiden Prozesse verteilt werden. Sollen Aufträge gleicher Startzeit dieses Jobs nicht parallel, sondern nacheinander ausgeführt werden, darf nur 1 Prozess zugelassen werden. Die max. Leerlaufzeit enthält die Dauer in Sekunden nach der Job sich beendet, wenn keine weiteren Aufträge anstehen. Der Job wird zur Startzeit eines neuen Auftrags automatisch wieder gestartet. Die Angabe 0 vereinbart, dass sich der Job nach Abarbeitung der anstehenden Aufträge sofort beendet. Die max. Verarbeitungszeit enhält die Dauer in Sekunden, die ein Job höchstens verbrauchen darf. Die Angabe 0 erlaubt eine beliebig lange Verarbeitungszeit. Jobs in Job-Ketten haben üblicherweise einen Eingangs- und einen Ausgangsstatus – dabei ist der Ausgangsstatus des einen Jobs der Eingangsstatus für den nächsten Job. In den hier ausgelieferten Jobs spielt das keine Rolle, weil hier Job-Ketten lediglich einen Job haben. Per Definition ist bei allen Jobs dieser Art der Eingangsstatus auf 0 und der Ausgangsstatus auf 100 festgelegt. Der Fehlerstatus ist der Ausgangsstatus + 1000, also 1100. Gegebenenfalls können Jobs über eigene Aufrufparameter und Skripte verfügen, die mit der Funktion Parameter verwaltet werden. 6.2.2 Aufträge für den Job Launch Backups definieren Der Ordner Aufträge enthält alle Aufträge, die für den Job Launch Backups erstellt wurden: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 13 Jeder Auftrag hat den gleichen Auftragstyp wie der Job-Typ des Jobs Launch Backups: Executable File. Das heisst, die Definition des Auftrags- bzw. Job-Typs erfolgt nur einmal an zentraler Stelle. Konkret sind im Beispiel verschiedene Aufträge für partielle und volle Sicherung verschiedener Datenbankobjekte sowie partielle und volle Sicherung des Dateisystems für verschiedene Mandanten eingerichtet. Jeder Job kann einen eigenen Skriptaufruf, eigene Auftragsparameter und eine eigene Startzeit haben. Dies wird am Beispiel der Einstellungen für den Job Oracle Full Export: DOD erläutert: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 14 Jeder Auftrag hat immer einen Namen, einen Titel und einen Auftragstyp, der aus der Liste der vorhandenen Auftragstypen gewählt werden kann. Da es sich beim Auftrag, eine Datenbanksicherung auszuführen, um einen Auftrag vom Typ Executable File handelt, steht ein Formularfeld für den Programmaufruf zur Verfügung, in diesem Fall der Name des auszuführenden Skripts. Für den Auftrag wird die Startzeit für eine Vollsicherung festgelegt, z. b. jeden Sonnabend um 21:00 <run_time> <weekdays> <day day="6"> <period single_start = "21:00"/> </day> </weekdays> </run_time> Bedeutung der Buttons: ... und anwenden ... und starten testen Konfiguration in der Datenbank speichern und dem Job Scheduler übergeben Speichern, anwenden und Auftrag starten Auftrag ohne Speichern mit dieser Konfiguration starten Mit dem Button Bearbeiten erhalten Sie ein Formular mit den Auftragsparametern: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 15 Für jeden Auftrag können Parameter aus den zentralen Einstellungen (settings) für diesen Auftragstyp frei an dieser Stelle einstellbare Parameter (nicht aus settings) festgelegt werden. Hilfetexte zur Verfügung. Für die Parameter aus den Einstellungen stehen mit dem Link Aufträge für den Job Launch Backups haben keine weiteren lokalen Parameter. In der Regel müssen die Parameter-Werte der Standard-Auslieferung an dieser Stelle nicht geändert werden. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 16 6.3 Job-Kette Launch Custom Reports 6.3.1 Job in der Job-Kette Launch Custom Reports definieren Der Job Launch Customized Report in der Job-Kette Launch Custom Reports führt SQL-Statements für eine angegebene Datenbankverbindung aus und bereitet das Ergebnis im XML-Format auf. Aus dem XML-Format wird ein Report im HTML-Format erstellt und per eMail an ggf. mehrere Empfänger versendet. Aufträge für diesen Job basieren im Prinzip auf dem gleichen SQL-Statement, unterscheiden sich aber durch den Zeitraum, über den ein Report erstellt werden soll: tägliche Statistik, monatliche Statistik, Jahresstatistik. Der Job-Typ ist in diesem Fall Customized Report. Da SQL ausgeführt werden soll, muss eine Datenbankverbindung gewählt werden (siehe hierzu auch das Kapitel Datenbankverbindungen bereitstellen). Hinweis: die hier gewählte Verbindung muss mit einem Datenbankbenutzer erfolgen, der ausreichende Rechte hat – u.a. Tabellen lesen, erstellen und entfernen (es werden temporäre Tabellen erstellt, die nach Fertigstellen des Reports wieder gelöscht werden). Das auszuführende SQL für die Reporterstellung steht im Formularfeld SQL-Statement. Der Code wird am besten mit einem Editor bearbeitet, getestet und anschließend hier eingefügt. Es folgt das vollständige Code-Beispiel für einen Report mit dem Datenbanksystem Oracle: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 17 ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; DECLARE c number; BEGIN SELECT COUNT(*) INTO c FROM USER_TABLES WHERE "TABLE_NAME"='TMP_REPORT_SETTINGS'; IF c = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TMP_REPORT_SETTINGS ("DATE_FROM" DATE, "DATE_TO" DATE) '; END IF; END; / DELETE FROM TMP_REPORT_SETTINGS; INSERT INTO TMP_REPORT_SETTINGS ("DATE_FROM", "DATE_TO") VALUES (NULL, NULL); UPDATE TMP_REPORT_SETTINGS SET "DATE_FROM" = (SELECT NVL(MIN("CREATION_DATE"), CURRENT_DATE) FROM ORDERS WHERE TRUNC("CREATION_DATE") >= TRUNC(${scheduler_order_report_date_from}) AND TRUNC("CREATION_DATE") <= TRUNC(${scheduler_order_report_date_to})), "DATE_TO" = (SELECT ${scheduler_order_report_date_to} from dual); SELECT TO_CHAR("DATE_FROM", 'dd.mm.yyyy') AS "DATED_FROM", TO_CHAR("DATE_TO",'dd.mm.yyyy') AS "DATED_TO" FROM TMP_REPORT_SETTINGS; /* variable dated */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable count_orders */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "PRIORITY"='URGENT' AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable urgent_orders */ SELECT "REQUESTER_ID", COUNT(*) AS "COUNT" FROM ORDERS WHERE "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS) GROUP BY "REQUESTER_ID"; /* variable requesters */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "ORDER_STATE"=500 AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable delivered_orders */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "ORDER_STATE"=800 AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable booked_orders */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "ORDER_STATE">1000 AND "ORDER_STATE"<2000 AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable failed_orders */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "ORDER_STATE">2000 AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable delayed_orders */ Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 18 SELECT "REJECTED_REASON", SUBSTR("REJECTED_REASON", 1, INSTR("REJECTED_REASON", '->', 1, 1)-1) AS "REJECTED_CODE", COUNT(*) AS "COUNT" FROM ORDERS WHERE "ORDER_STATE">1000 AND "ORDER_STATE"<2000 AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS) GROUP BY "REJECTED_REASON", SUBSTR("REJECTED_REASON", 1, INSTR("REJECTED_REASON", '->', 1, 1)-1) ORDER BY SUBSTR("REJECTED_REASON", 1, INSTR("REJECTED_REASON", '->', 1, 1)-1); /* variable rejected_reasons */ SELECT "REQUESTER_GROUP", COUNT(*) AS "COUNT" FROM ORDERS WHERE "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS) GROUP BY "REQUESTER_GROUP" ORDER BY "REQUESTER_GROUP"; /* variable requester_groups */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "POSTAL_COUNTRY"='DE' AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable german_orders */ SELECT COUNT(*) AS "COUNT" FROM ORDERS WHERE "POSTAL_COUNTRY"<>'DE' AND "CREATION_DATE" >= (SELECT "DATE_FROM" FROM TMP_REPORT_SETTINGS) AND "CREATION_DATE" <= (SELECT "DATE_TO" FROM TMP_REPORT_SETTINGS); /* variable foreign_orders */ DROP TABLE TMP_REPORT_SETTINGS; Das SQL-Grundgerüst für alle Aufträge befindet sich an zentraler Stelle der Job-Definition. Jeder der Aufträge für den Job führt diesen Code aus, allerdings mit unterschiedlichen Werten für die lokalen Auftragsparameter scheduler_order_report_date_from scheduler_order_report_date_to Auftragsparameter werden in SQL-Scripten in der Form ${parameter} verwendet, hier z.B. ${scheduler_order_report_date_from}. Sie werden automatisch zum Zeitpunkt der Job-Ausführung substituiert. Aus den Parametern des Beispieles wird der Berichtszeitraum im SQL-Statement auftragsspezifisch zusammengesetzt: tägliche Statistik scheduler_order_report_date_from scheduler_order_report_date_to CURRENT_DATE CURRENT_DATE monatliche Statistik scheduler_order_report_date_from scheduler_order_report_date_to TRUNC(ADD_MONTHS(CURRENT_DATE,-1),'MONTH') LAST_DAY(ADD_MONTHS(CURRENT_DATE,-1)) Jahresstatistik scheduler_order_report_date_from scheduler_order_report_date_to TO_DATE(TO_CHAR(CURRENT_DATE, 'yyyy') || '-01-01', 'yyyy-mm-dd') TO_DATE(TO_CHAR(CURRENT_DATE, 'yyyy') || '-12-31', 'yyyy-mm-dd') Das Ergebnis der jeweiligen Abfragen des Reports wird automatisch auf Variablen zur Verfügung gestellt, die im der SQL-Abfrage in der Form /* variable variable_name */ eingefügt werden. Die Namen der Variablen können frei vergeben werden, sie werden mit diesen Namen im HTML-Muster des Reports angesprochen. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 6.3.2 19 Aufträge für die Job-Kette Launch Custom Reports definieren Die Job-Kette Launch Custom Reports enthält ähnliche Aufträge des gleichen Auftragstyps Customized Reports: Als Beispiel die Konfiguration des Auftrags Monthly Order Report SBB: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 20 Der Auftrag soll jeweils am Monatsersten gestartet werden, deshalb wird die Startzeit wie folgt konfiguriert: <run_time> <monthdays> <day day="1"> <period single_start = "07:00"/> </day> </monthdays> </run_time> Es muss eine Datenbankverbindung für einen Benutzer mit ausreichenden Rechten gewählt werden, da eine temporäre Tabelle erstellt und ansschliessend gelöscht werden muss. Über den Button Bearbeiten erreichen Sie die Auftragsparameter. Im oberen Teil des Formulars stehen die Parameter aus den zentralen Einstellungen für den Auftrags- bzw. Job-Typ, die durch -Symbole dokumentiert sind: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 21 Insbesondere werden hier Angaben zur eMail, dem Inhalt und Betreff, der eMmail-Adresse, CC-Adresse und BCC-Adresse gespeichert. Die Aufbereitung der XML-Daten eines Reports im HTML-Format erfolgt über einen Mustertext (template), dessen Pfad im Feld scheduler_order_report_template angegeben werden kann. Der HTML-Report kann im Body der eMail oder als Anhang versendet werden. Sie können einstellen, ob im Fall fehlender Ergebnisse überhaupt eine Report-eMail gesendet werden soll. Im unteren Teil des Formulars stehen die Auftragsparameter, die nicht aus den Einstellungen für den Job-Typ stammen: die hier vergegebenen Namen werden im SQL-Statement des Jobs mit den hier angegebenen Werten substituiert – in der Folge kann für jeden Auftrag das gleiche SQL ausgeführt werden, parametrisiert mit den Werten für den Berichtszeitraum. Die Gestaltung des Mustertextes für den Report kann mit einem beliebigen HTML-Editor erfolgen. Der Mustertext kann Variablen enthalten, die zur Ausführungszeit des Jobs substituiert werden bzw. mit einer ScriptSprache, hier JavaScript, verarbeitet werden: • Variablen werden in der Form $(variable) im laufenden HTML-Markup verwendet • Script-Bestandteile werden mit den Zeichen <% und %> geklammert. Innerhalb dieser Zeichen kann mit JavaScript bedingte Verarbeitung bzw. die Ausgabe der Abfrageergebnisse in Schleifen programmiert werden. Es folgt das Beispiel eines Standard-Reports für die im vorigen Kapitel vorgestellte Abfrage: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> <title>DOD Order Report</title> <style type="text/css"> BODY { font-family: "Arial" sans-serif; width: from-canvas; height: from-canvas; margin: 0.5em 0; } H2 { margin: 5 0 5 0; } P { font-size: 10pt; font-family: "Arial", "sans-serif"; font-weight: normal; } TABLE.report { font-family: "Arial", "sans-serif"; font-size: 10pt; background-color:#FFFFFF; border: thin solid #A8C0D7; border-style: ridge; border-width: 2px; border-collapse: collapse; } TH.report { background-color: #A8C0D7; color: #FFFFFF; } </style> </head> <body> <% var i = 0; %> <table width="100%" border="0"> <tr> <td width="5%">&nbsp;</td> <td width="90%"> <h2>$(scheduler_order_report_subject)</h2> Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 22 <p><strong>Bestellungen von $(dated[0]["dated_from"]) bis $(dated[0]["dated_to"])</strong></p> <table width="100%" class="report" border="1px" cellpadding="5" cellspacing="1"> <tr> <th class="report" align="left" colspan="2">DOD Bestellungen</th> </tr> <tr> <td width="30%">Anzahl Bestellungen</td> <td width="70%">$(count_orders[0]["count"])</td> </tr> <tr> <td>davon: Eilbestellungen</td> <td>$(urgent_orders[0]["count"])</td> </tr> <% for(i=0; i<requesters.length; i++ ) { %> <tr> <td>Zugangssystem: $(requesters[i]["requester_id"])</td> <td>$(requesters[i]["count"])</td> </tr> <% } %> <tr> <td>Gelieferte Bestellungen</td> <td>$(delivered_orders[0]["count"])</td> </tr> <tr> <td>Gebuchte Bestellungen</td> <td>$(booked_orders[0]["count"])</td> </tr> </table> <p>&nbsp;</p> <table width="100%" class="report" border="1px" cellpadding="5" cellspacing="1"> <tr> <th class="report" align="left" colspan="2">Fehlerhafte Bestellungen</th> </tr> <tr> <td width="30%">negative quittierte</td> <td width="70%">$(failed_orders[0]["count"])</td> </tr> <tr> <td width="30%">zur&uuml;ckgestellte</td> <td width="70%">$(delayed_orders[0]["count"])</td> </tr> <% for(i=0; i<rejected_reasons.length; i++ ) { %> <tr> <td width="30%">davon: Abweisungsgrund $(rejected_reasons[i]["rejected_code"])</td> <td width="70%">$(rejected_reasons[i]["count"])&nbsp;&nbsp;&nbsp;<font style="font-size: 8pt;">($(rejected_reasons[i]["rejected_reason"]))</font></td> </tr> <% } %> </table> <p>&nbsp;</p> <table width="100%" class="report" border="1px" cellpadding="5" cellspacing="1"> <tr> <th class="report" align="left" colspan="2">Aufgeschl&uuml;sselte Bestellungen</th> </tr> <% for(i=0; i<requester_groups.length; i++ ) { %> <tr> <td width="30%">Bestellungen Kundengruppe $(requester_groups[i]["requester_group"])</td> <td width="70%">$(requester_groups[i]["count"])</td> </tr> <% } %> <tr> <td width="30%">Inlandsbestellungen</td> <td width="70%">$(german_orders[0]["count"])</td> </tr> <tr> <td width="30%">Auslandsbestellungen</td> <td width="70%">$(foreign_orders[0]["count"])</td> </tr> </table> </td> Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 23 <td width="5%">&nbsp;</td> </tr> </table> </body> </html> Die in der SQL-Abfrage des vorigen Kapitels enthaltenen Variablen /* variable variable_name */ enthalten jeweils das Abfrageergebnis in Form eines zweidimensionalen JavaScript-Arrays: die erste Dimension enthält die jeweiligen Sätze des Abfrageergebnisses, die zweite Dimension enthält die Feldnamen in Kleinschreibung. Bspw. wird auf ein Feld count_orders der Abfrage für die Gesamtzahl der Bestellungen in der Form $(count_orders[0]["count"]) zugegriffen. Die Abfrage liefert immer nur einen Satz, daher wird konstant das erste (=0) Element des JavaScript-Arrays verwendet. Liefert eine Abfrage mehrere Ergebnissätze, dann werden diese in Form von Schleifen mit HTML-Markup ausgegeben. Bspw. wird mit der Script-Sequenz <% for(i=0; i<rejected_reasons.length; i++ ) { %> <tr> <td width="30%">davon: Abweisungsgrund $(rejected_reasons[i]["rejected_code"])</td> <td width="70%">$(rejected_reasons[i]["count"])&nbsp;&nbsp;&nbsp;<font style="font-size: 8pt;">($(rejected_reasons[i]["rejected_reason"]))</font></td> </tr> <% } %> über die Ergebnissätze der ersten Dimension des JavaScript-Arrays iteriert, um jeweils die Anzahl zurückgewiesenen Bestellungen aufgeschlüsselt nach Abweisungsgrund auszugeben. Der Mustertext des HTML-Reports wird im Dateisystem abgelegt, und der Dateiname mit Pfad in der Einstellung scheduler_order_report_template angegeben. Dateinamen können relativ zum Installationsverzeichnis des MONITORING JOB SCHEDULERS angegeben werden. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 24 Das Ergebnis des vorgestellten HTML-Reports sieht folgendermaßen aus: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 7 25 Datenbankverbindungen bereitstellen Mit dem Menü Workflow->Datenbankverbindungen der Web-Oberfläche erhalten Sie folgendes Formular zur Verwaltung der Datenbankverbindungen: Im Formular können vorhandene Datenbankverbindungen aus der Liste ausgewählt, bearbeitet und übernommen werden. Neue Datenbankverbindungen geben Sie in das Formular ein und wählen die Funktion Übernehmen. Die Datenbankverbindungen werden nur einmal an zentraler Stelle erfasst und können den einzelnen Jobs und Aufträgen anschließend zugeordnet werden. Die Auswahlliste der Datenbankverbindungen steht in den Formularen der Job- und Auftragsdefinition zur Verfügung. Änderungen an Datenbankverbindungen wirken sich sofort aus ohne dass die einzelnen Job- oder Auftragsdefinitionen nochmals aufgerufen oder gespeichert werden müssten. Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation 8 26 Job- und Auftragstypen erstellen Der MONITORING JOB SCHEDULER enthält eine Reihe vordefinierter Job- und Auftragstypen, deren Implementierung in der Auslieferung enthalten ist. Sie erreichen sie über das Menü Workflow->Auftragstypen: Die Auftragstypen werden an zentraler Stelle erfasst und den einzelnen Jobs und Aufträgen anschließend zugeordnet. Die Auswahlliste der Auftragstypen steht in den Formularen der Job- und Auftragsdefinition zur Verfügung. Im Formular können vorhandene Auftragstypen aus der Liste ausgewählt, bearbeitet und übernommen werden. Neue Auftragstypen geben Sie in das Formular ein und wählen die Funktion Übernehmen. Für einen neuen Auftragstypen muss eine Implementierung in Form eines Scripts angegeben werden, das in den Sprachen Java, JavaScript, Perl oder VBScript realisiert ist. In der Abbildung ist das Beispiel einer Java-Klasse aufgenommen, die Teil der Auslieferung ist. Eigene Java-Klassen können beliebig implementiert und hier zugewiesen werden. Das Java-Archiv (.jar), in dem die Klasse aufgenommen ist, muss dem Job Schedulers zum Startzeitpunkt in der Konfigurationsdatei config/factory.ini bekanntgegeben werden, z.B. für das Archiv /mypath/sample.jar in der Form: [java] class_path = /mypath/sample.jar;/scheduler/lib/sos.connection.jar;… Änderungen an Auftragstypen wirken sich erst nach dem Speichern der einzelnen Jobs oder Aufträge bzw. nach Neustart des Job Scheduler aus. Folgende Auftragstypen sind in der Auslieferung enthalten: Software- und Organisations-Service GmbH Februar 2006 MONITORING JOB SCHEDULER – Job Scheduler zur Server-Automation • 27 Auftragstyp: Executable File Der Typ wird zum Starten ausführbarer Programme und Scripte (shell) verwendet. Bei Verwendung dieses Typs muss lediglich der Name des auszuführenden Programms im Job oder Auftrag angegeben werden. • Auftragstyp: Database Statement Der Typ dient zum Ausführen von SQL-Statements in einer Datenbank; dies kann den Aufruf von Datenbank-Prozeduren oder beliebigem SQL-Statements beinhalten. Jobs oder Aufträge dieses Typs muss lediglich der Inhalt der SQL-Statements übergeben werden. • Auftragstyp: Database Report Der Typ erzeugt standardisierte Datenbank-Reports aus SQL-Statements. Jobs oder Aufträge dieses Types wird ein SQL-Statement übergeben, dessen Ergebnis in einem Standardformat (HTML) erzeugt und ggf. per Mail übersendet wird. • Auftragstyp: Customized Report Der Typ erweitert den Database Report um die Möglichkeit, eigene Layouts für Reports zu definieren. • Auftragstyp: File Transfer: Send Der Typ wird für den automatisierten Versand von Dateien per FTP verwendet. • Auftragstyp: File Transfer: Receive Der Typ wird für die automatisierte Annahme von Dateien per FTP verwendet. Software- und Organisations-Service GmbH Februar 2006