init III
This commit is contained in:
221
Perl syslog server/syslog_tab.pl
Normal file
221
Perl syslog server/syslog_tab.pl
Normal file
@@ -0,0 +1,221 @@
|
||||
#!/bin/perl
|
||||
use strict;
|
||||
|
||||
use Tk;
|
||||
use Tk::Table;
|
||||
use POE qw/ Loop::TkActiveState /;
|
||||
use POE::Component::Server::Syslog;
|
||||
use Thread;
|
||||
|
||||
my $LOGFILE = "syslog.txt";
|
||||
|
||||
my $thr = new Thread \&dummy_thread;
|
||||
|
||||
POE::Session->create(
|
||||
inline_states => {
|
||||
_start => \&build_gui,
|
||||
ev_syslog => \&syslogdeamonpoe,
|
||||
ev_loop => \&loop,
|
||||
}
|
||||
);
|
||||
|
||||
my $table;
|
||||
|
||||
$poe_kernel->run();
|
||||
print "Tschüss'n\n";
|
||||
exit 0;
|
||||
|
||||
sub dummy_thread {
|
||||
while (1) {
|
||||
#print "I'm alive!\n";
|
||||
sleep (10);
|
||||
}
|
||||
}
|
||||
|
||||
sub build_gui {
|
||||
my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
|
||||
my $mbar = $poe_main_window->Menu();
|
||||
|
||||
# Menüleiste
|
||||
$poe_main_window -> configure(-menu => $mbar);
|
||||
my $help = $mbar -> cascade(-label =>"Help", -underline=>0, -tearoff => 0);
|
||||
$help -> command(-label =>"About", -command => sub {return; });
|
||||
# Menüleiste Ende
|
||||
|
||||
|
||||
my $cols = 8;
|
||||
#my $tableFrame = $poe_main_window->Frame(-borderwidth => 2,-relief => 'raised');
|
||||
|
||||
#-columns => 8, -rows => 5,
|
||||
$table = $poe_main_window->Table(-columns => $cols, -rows => 20,
|
||||
-fixedrows => 1, -scrollbars => 'se',
|
||||
-relief => 'raised');
|
||||
|
||||
# Spaltenköpfe
|
||||
my @tableheader = qw /time origin ip facility severity time hostname message/;
|
||||
foreach my $c ( 0 .. $cols-1) {
|
||||
#my $hdr = "Sp " . $c;
|
||||
my $tmp = $tableheader[$c]; #$table->Label(-text => $tableheader[$c], -relief =>'flat');
|
||||
$table->put( 0, $c, "$tmp" );
|
||||
}
|
||||
|
||||
for my $i (1 .. 8) {
|
||||
for my $j (0 .. 7) {
|
||||
#my $tmp = $table->Label(-text => "$i,$j", -relief =>'sunken', -bg=>'white');
|
||||
my $tmp = "$i,$j";
|
||||
#$table->put( $i, $j, "$tmp" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#foreach my $r ( 1 .. $rows ) {
|
||||
#my @tableheader = qw / time origin ip facility severity time hostname message/;
|
||||
# for ( 0 .. $cols ) {
|
||||
# my $tmp = $table->Label(-text => $tableheader[$_], -padx => 2, -anchor => 'nw', -background => 'white', -relief => 'groove');
|
||||
# #$tmp->bind('<Button>', [ \&toggleRow, $table ]);
|
||||
# $table->put( 1, $_, $tableheader[$_] );
|
||||
# }
|
||||
#}
|
||||
|
||||
|
||||
$table->grid (-row=>1, -column=>1, -sticky=>"NESW");
|
||||
$poe_main_window->gridColumnconfigure(1, -weight => 1);
|
||||
$poe_main_window->gridRowconfigure(1, -weight => 1);
|
||||
|
||||
#my $run=0;
|
||||
#$poe_main_window->repeat(1000 => \&run);
|
||||
|
||||
#my $thr = threads->new(\&syslogdeamon);
|
||||
$kernel->yield("ev_syslog");
|
||||
}
|
||||
|
||||
sub syslogdeamonpoe {
|
||||
POE::Component::Server::Syslog->spawn(
|
||||
BindAddress => 0.0.0.0,
|
||||
BindPort => 514,
|
||||
InputState => \&input,
|
||||
);
|
||||
$_[KERNEL]->yield("ev_loop");
|
||||
}
|
||||
|
||||
sub loop {
|
||||
#$_[HEAP]->{counter}++;
|
||||
#$poe_main_window->update; # Needed on SunOS & MacOS-X
|
||||
$_[KERNEL]->yield("ev_loop");
|
||||
}
|
||||
|
||||
sub input {
|
||||
print "$_[ARG0]\n";
|
||||
my $severity = $_[10]->{severity};
|
||||
my $facility = $_[10]->{facility};
|
||||
my $message = $_[10]->{msg};
|
||||
foreach my $key (keys %{$_[10]}) {
|
||||
print "$key : $_[10]{$key}\n";
|
||||
}
|
||||
print "----------------------------------\n";
|
||||
$table->put( 1, 4, "$severity" );
|
||||
$table->put( 1, 3, "$facility" );
|
||||
$table->put( 1, 7, "$message" );
|
||||
return;
|
||||
}
|
||||
|
||||
sub syslogdeamon {
|
||||
my $sysloghandle = Net::Syslogd->new() or die "Error creating Syslogd listener: ", Net::Syslogd->error;
|
||||
|
||||
# Logfile einlesen
|
||||
open SYSLOG, "<$LOGFILE";
|
||||
|
||||
my $i=1;
|
||||
#foreach (<SYSLOG>) {
|
||||
# chomp;
|
||||
# my $a; my $b; my $c; my $d; my $e; my $f; my $g; my $h;
|
||||
# ($a,$b,$c,$d,$e,$f,$g,$h) = split/\|/,$_;
|
||||
#
|
||||
# #$sttxt->insert("1.0", "$a\n");
|
||||
# $table->put( $i, 0, $a );
|
||||
# $i++;
|
||||
#}
|
||||
close SYSLOG;
|
||||
|
||||
while (1) {
|
||||
my $message = $sysloghandle->get_message();
|
||||
|
||||
if (!defined($message)) {
|
||||
printf "$0: %s\n", Net::Syslogd->error;
|
||||
exit 1;
|
||||
} elsif ($message == 0) {
|
||||
next;
|
||||
}
|
||||
|
||||
if (!defined($message->process_message())) {
|
||||
printf "$0: %s\n", Net::Syslogd->error;
|
||||
} else {
|
||||
my $peeraddr = $message->peeraddr;
|
||||
my $port = $message->peerport;
|
||||
my $facility = $message->facility;
|
||||
my $severity = $message->severity;
|
||||
my $time = $message->time;
|
||||
my $hostname = $message->hostname;
|
||||
my $message = $message->message;
|
||||
my $localt = localtime;
|
||||
|
||||
($localt) = $localt =~ /.{3} (.*)/;
|
||||
|
||||
chomp($peeraddr); chomp($port); chomp($facility); chomp($severity); chomp($time); chomp($hostname); chomp($message);
|
||||
|
||||
#printf "A:%s F:%s S:%s T:%s H:%s M:%s\n", $peeraddr, $facility, $severity, $time, $hostname, $message;
|
||||
|
||||
my $sender = $peeraddr;
|
||||
|
||||
$time = "" if ($time == "0");
|
||||
$hostname = "" if ($hostname == "0");
|
||||
|
||||
if ($message =~ /^Address=/) {
|
||||
$hostname = "";
|
||||
if ($message =~ /^Address=([^\s]*) (.*:[0-9]{1,2}) ([^\s]*) (.*)/) {
|
||||
($peeraddr, $time, undef, $message) = $message =~ /^Address=([^\s]*) (.*:[0-9]{1,2}) ([^\s]*) (.*)/;
|
||||
$message =~ s/$peeraddr//;
|
||||
$message .= " # fwd. by $sender";
|
||||
}
|
||||
else {
|
||||
($peeraddr, $message) = $message =~ /^Address=([^\s]*) (.*)/;
|
||||
$message =~ s/^Address=$peeraddr//;
|
||||
$message .= " # fwd. by $sender";
|
||||
}
|
||||
}
|
||||
$message =~ s/\s{2,}/ /;
|
||||
|
||||
# Logfile schreiben
|
||||
my $log = sprintf "%s|%s|%s|%s|%s|%s|%s|%s\n", $localt, $peeraddr, $sender, $facility, $severity, $time, $hostname, $message;
|
||||
open SYSLOG, ">>$LOGFILE";
|
||||
printf SYSLOG "$log";
|
||||
printf "$localt\n";
|
||||
close SYSLOG;
|
||||
|
||||
#my $tmp = $table->Label(-text => $localt, -padx => 2, -anchor => 'w', -background => 'white', -relief => 'groove');
|
||||
#$tmp->bind('<Button>', [ \&toggleRow, $table ]);
|
||||
#$tmp->bind('Label', "$localt");
|
||||
#$table->put( 1, 1, "$localt" );
|
||||
#$table->update;
|
||||
|
||||
#my $tmp = $table->Label(-text => $localt, -relief =>'flat'); #
|
||||
$table->put( 0, 0, "$localt" );
|
||||
#$table->clear();
|
||||
|
||||
|
||||
#$table->Lable( 1, 1, "$localt" );
|
||||
#my $widget = $table->get(0,0);
|
||||
#print "$widget\n";
|
||||
|
||||
#$sttxt->insert("1.0", "$localt\n");
|
||||
#$ortxt->insert("1.0", "$peeraddr\n");
|
||||
#$iptxt->insert("1.0", "$sender\n");
|
||||
#$fatxt->insert("1.0", "$facility\n");
|
||||
#$setxt->insert("1.0", "$severity\n");
|
||||
#$titxt->insert("1.0", "$time\n");
|
||||
#$hotxt->insert("1.0", "$hostname\n");
|
||||
#$metxt->insert("1.0", "$message\n");
|
||||
#$txt -> configure(-state=>"disabled");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user