File mailgraph-1.14-pl.patch of Package mailgraph
Index: mailgraph-1.14/mailgraph.pl
===================================================================
--- mailgraph-1.14.orig/mailgraph.pl
+++ mailgraph-1.14/mailgraph.pl
@@ -287,6 +287,102 @@ sub _next_syslog($)
}
return undef;
}
+sub _next_rsyslog($)
+{
+ my ($self) = @_;
+ while($self->{_repeat}>0) {
+ $self->{_repeat}--;
+ return $self->{_repeat_data};
+ }
+ my $file = $self->{file};
+ line: while(defined (my $str = $self->_next_line)) {
+ # date, time and host
+ $str =~ /^
+ (\d+)-(\d+)-(\d+) # date -- 1, 2, 3 (YYYY-MM-DD)
+ T
+ (\d+):(\d+):(\d+) # time -- 4, 5, 6 (HH:MM:SS)
+ \.\d+(\+\d+:\d+) # time -- 7 nanoseconds (+HH:MM)
+ \s
+ ([-\w\.\@:]+) # host -- 8
+ \s+
+ (?:\[LOG_[A-Z]+\]\s+)? # FreeBSD
+ (.*) # text -- 9
+ $/x or do
+ {
+ warn "WARNING: line not in rsyslog format: $str";
+ next line;
+ };
+ # subtract 1 from month, cause month is an array from 0-11
+ # prevent 'Day '31' out of range 1..30' message
+ my $mon = $2 -1;
+ #defined $mon or croak "unknown month $1\n";
+ #$self->_year_increment($mon);
+ # convert to unix time
+ my $time = $self->str2time($6,$5,$4,$3,$mon,$1,$7);
+ if(not $self->{allow_future}) {
+ # accept maximum one day in the present future
+ if($time - time > 86400) {
+ warn "WARNING: ignoring future date in rsyslog line: $str";
+ next line;
+ }
+ }
+ my ($host, $text) = ($8, $9);
+ # last message repeated ... times
+ if($text =~ /^(?:last message repeated|above message repeats) (\d+) time/) {
+ next line if defined $self->{repeat} and not $self->{repeat};
+ next line if not defined $self->{_last_data}{$host};
+ $1 > 0 or do {
+ warn "WARNING: last message repeated 0 or less times??\n";
+ next line;
+ };
+ $self->{_repeat}=$1-1;
+ $self->{_repeat_data}=$self->{_last_data}{$host};
+ return $self->{_last_data}{$host};
+ }
+ # marks
+ next if $text eq '-- MARK --';
+ # some systems send over the network their
+ # hostname prefixed to the text. strip that.
+ $text =~ s/^$host\s+//;
+ # discard ':' in HP-UX 'su' entries like this:
+ # Apr 24 19:09:40 remedy : su : + tty?? root-oracle
+ $text =~ s/^:\s+//;
+ $text =~ /^
+ ([^:]+?) # program -- 1
+ (?:\[(\d+)\])? # PID -- 2
+ :\s+
+ (?:\[ID\ (\d+)\ ([a-z0-9]+)\.([a-z]+)\]\ )? # Solaris 8 "message id" -- 3, 4, 5
+ (.*) # text -- 6
+ $/x or do
+ {
+ warn "WARNING: line not in rsyslog format: $str";
+ next line;
+ };
+ if($self->{arrayref}) {
+ $self->{_last_data}{$host} = [
+ $time, # 0: timestamp
+ $host, # 1: host
+ $1, # 2: program
+ $2, # 3: pid
+ $6, # 4: text
+ ];
+ }
+ else {
+ $self->{_last_data}{$host} = {
+ timestamp => $time,
+ host => $host,
+ program => $1,
+ pid => $2,
+ msgid => $3,
+ facility => $4,
+ level => $5,
+ text => $6,
+ };
+ }
+ return $self->{_last_data}{$host};
+ }
+ return undef;
+}
sub _next_metalog($)
{
my ($self) = @_;
@@ -347,6 +443,9 @@ sub next($)
if($self->{type} eq 'syslog') {
return $self->_next_syslog();
}
+ elsif($self->{type} eq 'rsyslog') {
+ return $self->_next_rsyslog();
+ }
elsif($self->{type} eq 'metalog') {
return $self->_next_metalog();
}
@@ -371,9 +470,9 @@ my $rrdstep = 60;
my $xpoints = 540;
my $points_per_sample = 3;
-my $daemon_logfile = '/var/log/mailgraph.log';
+my $daemon_logfile = '/var/log/mailgraph/mailgraph.log';
my $daemon_pidfile = '/var/run/mailgraph.pid';
-my $daemon_rrd_dir = '/var/log';
+my $daemon_rrd_dir = '/var/lib/mailgraph';
# global variables
my $logfile;