Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2009  »  11  »  Der Protokollant  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Redner merken

Die Methode »told()« springt das Plugin-Framework jedes Mal an, wenn jemand im Chatroom seine Stimme erhebt. Neben einer Referenz auf das Plugin-Objekt erhält »told()« einen Message-Hash, der unter den Schlüsseln »who« und »body« das Kürzel des Absenders und den Inhalt der Nachricht mit sich führt.

Das Modul holt anschließend mit der Method »now()« des »DateTime«-Objekts die aktuelle Uhrzeit ab, genau so, wie Cache::Historical den Zeitstempel erwartet. Der Parameter »time_zone« ist bei »now()« auf den Wert »local« gesetzt, damit das »DateTime«-Objekt in der aktuellen Zeitzone beheimatet ist.

Die Methode liefert einen leeren String an das Framework zurück, um so zu signalisieren, dass sie keine Nachricht zurück in den Chatroom schickt, denn das Plugin möchte einfach stillschweigend mitprotokollieren.

Das Skript in Listing 3 startet einen Bot, der das neue Log-Modul lädt und sich dann mit dem Channel auf dem IRC-Server verbindet. Wahlweise ist auch ein Array von Channels möglich, in die der Bot gleichzeitig eindringt.

Die Methode »load()« in Zeile 17 findet das Modul »Log.pm« entweder im aktuellen Verzeichnis oder im Plugin-Verzeichnis des Framework, meist in »/usr/local/lib/perl5/site_perl/5.x/Bot/BasicBot/Pluggable«. Der Loglevel des Skripts ist mit Log4perl auf »$ERROR« gesetzt, wer möchte, dass das Skript zu Debug-Zwecken auf »Stderr« detaillierte Meldungen über eingefangene Nachrichten und den Speichervorgang weitergibt, setzt ihn dagegen auf »$DEBUG«.

Listing 3:
»logbot«

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Bot::BasicBot::Pluggable;
04 use Log::Log4perl qw(:easy);
05
06 Log::Log4perl->easy_init({
07   level  => $ERROR,
08   layout => "%F{1}-%L %m%n"
09 });
10
11 my $bot = Bot::BasicBot::Pluggable->new(
12     channels => ["#perlsnapshot"],
13     server   => "irc.freenode.net",
14     nick     => "snapshot-logger",
15 );
16
17 $bot->load("Log");
18
19   # Connect to IRC server
20 $bot->run();


Abbildung 3: Der Perl-Snapshot-Logger in Gestalt eines Bot lauscht hier in eine beliebige Konversation hinein.

Hinter den Kulissen

Wer sehen will, wie die abgespeicherten Daten auf der Festplatte liegen, darf gerne einen Blick hinter die Kulissen des Speichermoduls werfen: Wie Abbildung 4 zeigt, legt es ohne Zutun des Bot-Programmierers eine SQLite-Datenbank mit einem passenden Schema an und speichert jede eingehende Nachricht in einer Tabellenzeile ab. Die Einträge sind mit einer ID durchnummeriert, enthalten den Zeitstempel in der zweiten Kolumne, den Chatroom in der vierten und die Nachricht schließlich in der fünften. Die dritte Spalte »upd_time« ist hier ohne Bedeutung, sie dient internen Zwecken. Da das Modul nur ein Feld pro Wert bereitstellt, presst »Log.pm« einfach Sender und Nachricht in einen String und separiert sie mit einem Doppelpunkt und einem Leerzeichen.


Abbildung 4: Das Modul Cache::Historical legt die gespeicherten Daten in einer SQLite-Datenbank zusammen mit einem Zeitstempel ab.

Doch diese Darstellung sollte nicht interessieren, bietet Cache::Historical doch die Methode »values()« an, die alle unter einem Key (dem Chatroom) gespeicherten Nachrichten in chronologischer Reihenfolge zurückgibt. Listing 4 zeigt die Implementierung, Abbildung 5 die Ausgabe des Skripts.

Listing 4:
»logdump«

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Cache::Historical 0.03;
04
05 our $SQLITE_FILE = "irclog.dat";
06
07 my $cache = Cache::Historical->new(
08             sqlite_file => $SQLITE_FILE,
09         );
10
11 for my $result ( $cache->values("#perlsnapshot") ) {
12     my($dt, $msg) = @$result;
13
14     print "$dt $msgn";
15 }


Abbildung 5: Das Skript »logdump« gibt die in der SQLite-Datenbank mitgeschnittene Konversation auf Verlangen auf der Standardausgabe wieder aus.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Tierische Kurssprünge Börsenkurs-Alerting im Eigenbau
Asyl für Django Webprogrammierung in Python/Django und PHP
Hauptpostamt Architektur des PIM-Framework Akonadi in KDE
Kurvendiskussion Den zeitlichen Wertverlauf eines Aktienportfolios grafisch darstellen
Schlüsseldienst Perl-Skript öffnet Bezahl-WLANs
Heilig nach Punkten Messenger-Plugin verschafft Vorteil durch Webseiten-Überwachung
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (0)