Seite wählen

NETWAYS Blog

Jasper Reporting – Zusammenfassung

Jasper-ReportingIn den letzten Wochen habe ich mich an dieser Stelle ausführlich mit Jasper-Report beschäftigt. Da wir Jasper stark zunehmend in unseren Kundenprojekten einsetzen auch im Bereich Managed Service  darauf zurückgreifen, lag die Serie sehr nah und ich hoffe soweit die wichtigsten Kernaspekte getroffen zu haben.
Hier nochmals die verschiedenen Posts zum Thema im Überblick:

An dieser Stelle Danke für das positive Feedback und dem starken Interesse an der Serie und dem Thema Reporting. Hier sei auch nochmals auf die NETWAYS Reports auf netways.org hingewiesen. Sollten Fragen offen geblieben sein, so freue ich mich über Kommentare oder Gespräche auf der Open Source Monitoring Conference nächste Woche.
Alle Beispielreports befinden sich auch auf dem Demo-System und können dort gegen unser Nagios-Demo-System gestartet werden.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.

Jasper Reporting – Dynamische Parameter

Jasper-ReportingSeinen Report mit Parametern zu versehen hat mehrere Vorteile. Zum einen kann man die gleiche Vorlage für verschiedene Kunden und Objekte einsetzen, zum anderen hat der Endanwender die Möglichkeit der Interaktivität. Wer auf viele Parameter setzt sollte jedoch immer für eine hohe Quote an vordefinierten Reports sorgen, da die Hürde zur Ausführung nicht zu hoch liegen sollte.
Gerade beim Vergleich von Text in einem Statement muss der eingegebene Parameter exakt übereinstimmen, da sonst keine Daten ermittelt werden können. Bei etwas längeren Attributen wie Host- oder Servicegruppen ist dies einfach zu fehleranfällig. Hier können dynamische Parameter Abhilfe schaffen, da sie dem Benutzer quasi die Summe aller Möglichkeiten anbieten und man nur noch aus dieser Menge auswählen kann.
post11_screen1Die Definition erfolgt wieder direkt auf dem JasperServer durch Anlage eines neuen „Input Controls“. Bei Eingabe des Namens bitte dringend auf die richtige Schreibweise achten, da dies im Support Fehler Nummer 1 ist, wenn der Wert nicht angenommen wird und ein Default-Wert existiert.
post11_screen2Bei der Eingabe der „Input Control Details“ ist der Type Single Select Query zu wählen. Anschließend kann entweder eine globale Query aus dem Repository oder eine lokale (unser Beispiel) verwendet werden. In unserem Fall ist der Wert zur Anzeige auch der Wert zur Übergabe. Wenn z.B. Namen ausgewählt, aber Personalnummern übergeben werden sollen, sind mind. zwei Columns zu selektieren.
Das Statement zur Ermittlung der verfügbaren Hostgruppen lautet:
[code lang=“sql“]
select alias from nagios_hostgroups where instance_id = 1
[/code]
post11_screen5post11_screen3post11_screen4Als Datasource übernehmen wir auch hier wieder die lokale Definition. Anschließend muss wie bereits angedeutet noch das Value und Visible Column hinterlegt werden und die Anlage des Parameters bestätigt werden. Nach Zuordnung des Parameters zum aktiven Report, kann dieser dann auch im Webinterface ausgewählt werden.
Der entsprechende Report findet sich natürlich auch wieder bei netways.org und unserem Demo-System.
Im nächsten Post steigen wir in das Thema Host-Availability ein.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.

Jasper Reporting – Statusanzeige

Jasper-ReportingDa wir uns bisher auf die reine Verarbeitung von Bestandsdaten konzentriert haben, soll dieser Post den Datenumfang etwas erweitern und auch den aktuellen Host-Status der selektierten Objekte ermitteln. Bei Versendung eines solchen mit Hilfe des Schedulers (dazu später mehr) ist darauf zu achten, den versendeten Report auch zu speichern, da eine Reproduktion in der Praxis kaum möglich ist.
Wir beginnen wieder mit der Erweiterung unserer SQL-Abfrage um den aktuellen Hoststatus zu ermitteln.
[code lang=“sql“]
select c.alias,
a.host_object_id,
a.display_name,
a.address,
d.current_state
from nagios_hosts a,
nagios_hostgroup_members b,
nagios_hostgroups c,
nagios_hoststatus d
where a.host_object_id = b.host_object_id
and b.hostgroup_id = c.hostgroup_id
and a.host_object_id = d.host_object_id
and a.instance_id = 1
and b.instance_id = 1
and c.instance_id = 1
and d.instance_id = 1
and display_name like $P{p_hostgroup}
[/code]
post9_screen1Um den Status ähnlich einer Ampel anzuzeigen positionieren wir zwei Rectangle-Objekte aus der Palette in den Detail-Bereich und versehen eines mit roter und das andere mit grüner Vorder- und Hintergrundfarbe.
Zur besseren Bearbeitung empfiehlt es sich, die beiden Objekte erst nebeneinander und erfolgter Parametrisierung hintereinander zu positionieren. Um die Anzeige abhängig vom aktuellen Hoststatus zu machen, setzen wir analog zur farbigen Hinterlegung der Datenzeilen auf die „Print  When  Expression“, welche wie nachfolgend beschrieben für beide Objekte gesetzt werden muss.
Für den Roten:
[code lang=“java“]
new Boolean( $F{current_state}.intValue() == 1 )
[/code]
Für den Grünen:
[code lang=“java“]
new Boolean( $F{current_state}.intValue() == 0 )
[/code]
Somit wird entweder der Rote oder Grüne Rectangle angezeigt.
Hier kann wie immer der entsprechende Report heruntergeladen werden und er steht natürlich auf netways.org und unserem Demo-System zur Verfügung.
Im nächsten Post versehen wir die vorhandenen Diagramme mit Links zum Nagios-System.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.

Jasper Reporting – Parameter

Jasper-ReportingDie Erzeugung des Reports erfolgt meist ja für mehrere Rechner, Kunden, Abteilungen oder im Falle von Nagios für diverse Host- und Servicegruppen. Um entsprechende Parameter verarbeiten zu können, müssen diese erst im Report definiert und natürlich auch bei der Ermittlung der Daten im SQL-Statement berücksichtigt werden.
Wir starten mit der Anpassung des Select-Statements um die Daten auf den in diesem Beispiel verwendeten Host einzuschränken.
[code lang=“sql“]
select
host_object_id,
display_name,
address
from nagios_hosts
where instance_id = 1
and display_name like $P{p_host_name}
[/code]
Parameter werden immer in geschweifte Klammern mit einem $P gefasst. Eine Übersicht über die entsprechenden Typbezeichner gibt es im entsprechenden Property-Editor.
post6_screen1
Der Paramter muss natürlich im Report „bekannt“ gemacht werden, was über das Parameterfeld im Reports-Inspector erfolgt. Der Defaultwert für den Parameter sollte in unserem Beispiel „%“ sein, um bei fehlender Parametrisierung alle Hosts zu ermitteln.
post6_screen2
Damit der Benutzer bei der Ausführung des Reports zur Eingabe eines Hostnames aufgefordert wird, muss dieser auch auf dem Server erzeugt werden, was unterhalb der aktuellen Report-Unit im Folder Input controls via Kontextmenü erfolgen kann.
post6_screen4Im Eigenschaftsbereich des Webinterfaces wiederum kann der Anwender noch die Verwendung aktivieren bzw. deaktivieren und das Layout des Parameteraufrufs beeinflussen.
Das Parameterübergabe kann in der Live-Demo als Nagios_Host_3 getestet werden. Die verwendeten Daten basieren auf unserem Nagios-Demo-System, wodurch die vorhandenen Hosts dort eingesehen werden können.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.

Jasper Reporting – Design Tips

Jasper-ReportingBereits im letzten Post haben wir den Report auf den Server geladen, jedoch sieht dieser aktuell noch etwas spartanisch aus. Es lohnt sich meistens am Ende noch etwas Zeit in die optische Aufbereitung der Reports zu investieren. Schon alleine um die Akzeptanz beim Empfänger zu verbessern. Über Schrift, Farben und Formen hinweg bietet iReport im Palettenbereich eine Vielzahl an Möglichkeiten.
Wir starten mit dem Einfügen eines Logos. Dieses kann entweder via URL von einem Webserver geladen oder in das Jasper-Repository kopiert werden.post5_screen1 Der Upload via iReport erfolgt wie auch beim Bericht via Kontextmenü durch Anlage einer neuen Ressource. Wichtig ist, das als Typ Image verwendet wird, um Probleme bei der Einbindung auszuschliessen.
post5_screen2Anschließend kann über die Palette ein Bildobjekt im Report platziert werden. Falls das Bild auf dem Server bereits verfügbar ist, kann die Auswahl hier abgebrochen werden und als Expression folgendes eingetragen werden.
[code lang=“shell“]
"repo:/reports/Images/Banner
[/code]
Der Name muss hier mit dem entsprechenden Repositorynamen übereinstimmen und da wir uns in der Welt von Java bewegen ist die Unterscheidung zwischen Groß- und Kleinschreibung wichtig.
Oberhalb des Arbeitsbereiches oder bei den entsprechenden Objekten im Eigenschaftsbereich können nach Belieben Schriftart und -größe eingestellt werden.
Reports mit vielen Zeilen wirken schnell unübersichtlich. Daher empfielt es sich solche Textwüsten wenigstens mit abwechselnd dunklen und hellem Hintergrund zu unterlegen. Dies ist mit einem kleinem Kniff auch mit iReport möglich. Nach Einbindung eines farbigen Rechtecks im Detailband kann dieser abwechselnd zur Zeilennummer angezeigt werden. Hierfür muss man in die Eigenschaft „Print When Expression“ folgendes einfügen:
[code lang=“java“]
new Boolean( $V{PAGE_COUNT}.intValue() % 2 ==0 )
[/code]
post5_screen5Über das Palettenobjekt „Page X of Y“ kann noch schnell ein Seitenzähler integriert werden und fertig! Hier wieder das Ergebnis als PDF und den Report als Download bei netways.org.
Im nächsten Post widmen wir uns der Übergabe von externen Parametern.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.