#! /bin/sh -e

PROGRAM=lr_run
tag="all all none $PROGRAM"

if test $# -eq 0
then
    echo >&2 "$tag err give at least one arg, indicating program to run"
    exit 1
fi

# dereference sysconfdir's prefix dependency
prefix="/usr"
etcdir="/etc/lire"
. $etcdir/profile_lean
if eval `lr_environment 2> /dev/null`
then
    :
else
    # Retry without redirecting stderr
    eval `lr_environment`
    exit 1
fi

#
# Tom Christiansen   in   Csh Programming Considered Harmful
#
# exec 3>&1; grep yyy xxx 2>&1 1>&3 3>&- | sed s/file/foobar/ 1>&2 3>&-
#

exec 3>&1

"$@" 2>&1 1>&3 3>&- | {
    while read superservice service id program level rest
    do
        message="$superservice $service $id $program $level $rest"
        case $level in
        emerg|alert|crit|err|warning|notice)
            if test stderr = "$lr_logging_method"
            then
                echo >&2 "$message"
            else
                /usr/bin/logger -p $lr_logging_facility.$level -t $lr_logging_tag "$message"
            fi
            ;;
        info|debug)
            if test -n "$lr_debug"
            then
                if test stderr = "$lr_logging_method"
                then
                    echo >&2 "$message"
                else
                    /usr/bin/logger -p $lr_logging_facility.$level -t $lr_logging_tag "$message"
                fi
            fi
            ;;
        *)
            message="bogus message: $message"
            if test stderr = "$lr_logging_method"
            then
                echo >&2 "$message"
            else
                /usr/bin/logger -p $lr_logging_facility.alert -t $lr_logging_tag "$message"
            fi
            ;;
        esac
    done
} 1>&2 3>&-

exit 0

POD=<<'EOPOD'

=pod

=head1 NAME

lr_run - run a Lire program and deal with the logging output

=head1 SYNOPSIS

B<lr_run> I<program> I<arguments>

=head1 DESCRIPTION

B<lr_run> runs I<program>, and redirects I<program>'s stderr output
to logger(1). It parses I<programs> logging output, and sets logger(1)'s 
flags accordingly. 

B<lr_run> gets configuration from I<sysconfdir>/lire/defaults. In case
'lr_logging_method' is set to 'stderr', logger(1) is not involved:
logging output gets redirected to stderr. In case 'lr_debug' is set to
the empty string, messages with loglevel debug and info get
suppressed. The configuration variable 'lr_logging_facility' is used to find
logger(1)'s facility.

=head1 NOTES

I<program>'s output on stderr should be in format
I<superservice> I<service> I<id> I<programname> I<level> I<message>. I<level>
should be one of: 
emerg (system is unusable), alert (action must be taken immediately), crit 
(critical conditions), err (error conditions), warning (warning conditions),
notice (normal, but significant, condition), info (informational message),
debug (debug-level message). See syslog(3).

I<id> can be used to tag each Lire job, so that these can get tracked. 
I<programname> should be the name of the program which generated the log line.

=head1 EXAMPLES

To process a Postfix log and display the report as text, use

 $ lr_run lr_log2report postfix < /var/log/mail.log

To process a Postfix log and create the report in HTML (packed up in a tar
archive), use:

 $ lr_run lr_log2report -o html postfix < /var/log/mail.log > postfix.tar

=head1 SEE ALSO

Documentation in the Lire User Manual

=head1 VERSION

$Id: lr_run.in,v 1.23 2006/07/23 13:16:33 vanbaal Exp $

=head1 COPYRIGHT

Copyright (C) 2000-2003 Stichting LogReport Foundation LogReport@LogReport.org

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program (see COPYING); if not, check with
http://www.gnu.org/copyleft/gpl.html.

=head1 THANKS

Rudi Sluijtman, for sharing some thoughts on shell scripting.

=head1 AUTHOR

Joost van Baal <joostvb@logreport.org>

=cut

EOPOD


