Hi,
how it work on v3.2.1?
What must i change?
PHP Code:
#!/bin/sh
CONF=/etc/tinyrot.conf
NEXTFILETOSEND=/var/local/log/nexttosendfile
LASTFILESENT=/tmp/lastsentfile
_DEVTYPE=/etc/sysconfig/devtypes
[ -f $_DEVTYPE ] && . $_DEVTYPE
_FEATURE=/etc/rc.d/features
[ -f $_FEATURE ] && . $_FEATURE
# -----------------------------------------------------------------------------
# functions
# -----------------------------------------------------------------------------
print_usage () {
echo "showlog will print all available logs, including old rotated logs"
echo "Usage:"
echo "showlog [-f [logfile] | -o <outfile> [logfile] | -s ] "
echo " -f follow log (tail -f)"
echo " -o <outfile> cat all available logfile(s) to outfile (default: outfile=/dev/stdout)"
echo " -s cat the zipped log files with special headers to pipe to the server"
echo " --full sending all available logs"
echo " --fsn sending logs for Customer Service (non anonymously)"
echo " --nohead <logfile> sends all logfile logs with no headers to stdout"
echo " and writes log file listing to /tmp"
echo " logfile logfile to show (default: logfile=messages)"
echo ""
echo "NOTE: Don't use the full path. Just mention the file name"
echo "Example: showlog messages"
exit 1
}
print_stream_header () {
NUMFILES=$1
echo "MFBS/1.0 $NUMFILES"
echo ""
}
print_gzip_header () {
if [ -z "$1" -o -z "$2" ]; then
echo "showlog: print_gzip_header: incorrect arguments"
exit
fi
CONTENTLENGTH="$1"
CONTENTNAME="$2"
echo "Content-Length: $CONTENTLENGTH"
echo "Content-Name: $CONTENTNAME"
echo "Content-Type: GZIP"
echo "Content-Encoding: GZIP"
name=$(productid)
echo "X-DeviceType: $(eval echo \\\${DEVTYPE_$name})"
# Convert 046-shasta-049566 to 495660046
# Convert eng-shasta-049566 to 495660000
#
# first s/// converts eng- to 0-
# second s/// extracts first and last segment, ignoring leading 0s
# printf puts them back together with correct number of 0s
echo "X-DeviceFirmwareVersion:$(printf "%u%04u" $(cat /etc/version.txt | grep Version | awk '{ print $4 }' | sed 's/^[^\-]*[^0-9\-][^\-]*-/0-/; s/0*\([0-9]\+\)-.*-0*\(.\+\)/\2 \1/'))"
}
print_gzip_header_dsn () {
print_gzip_header "$1" "$2"
echo "X-DSN: $(cat /proc/usid)"
echo ""
}
print_gzip_header_anon () {
print_gzip_header "$1" "$2"
echo "X-Anonymous-Tag: $(cat /etc/guid)"
echo ""
}
print_gzip_files_anon () {
ALLFILES=$*
for FILE in $ALLFILES
do
CONTENTNAME=$FILE
CONTENTLENGTH=$(ls -l $FILE | awk '{print $5}')
print_gzip_header_anon $CONTENTLENGTH $CONTENTNAME
# NOTE: cat'ing raw gzip file
cat $FILE
done
}
print_gzip_files_dsn () {
ALLFILES=$*
for FILE in $ALLFILES
do
CONTENTNAME=$FILE
CONTENTLENGTH=$(ls -l $FILE | awk '{print $5}')
print_gzip_header_dsn $CONTENTLENGTH $CONTENTNAME
# NOTE: cat'ing raw gzip file
cat $FILE
done
}
print_gzip_files_noheaders() {
ALLFILES=$*
for FILE in $ALLFILES
do
cat $FILE
done
}
get_inode () {
FILE=$1
return `ls -i $FILE 2>/dev/null | awk '{print $1;}'`
}
wait_for_file() {
FILE=$1
while [ ! -f $FILE ]; do
sleep 1
done
}
follow_log () {
LOG=$1
while [ 1 ]; do
wait_for_file $LOG
tail -f $LOG &
TAILPID=$!
get_inode $LOG
FILEINODE=$?
while [ 1 ]; do
get_inode $LOG
NEWINODE=$?
if [ $FILEINODE -ne $NEWINODE ]; then
kill $TAILPID
break
fi
sleep 1
done
done
}
on_term ()
{
if [ -n "$TAILPID" ]; then
kill $TAILPID 2>/dev/null >/dev/null
fi
exit 0
}
trap 'on_term' TERM INT EXIT
# -----------------------------------------------------------------------------
# main
# -----------------------------------------------------------------------------
[ -f $CONF ] && . $CONF
if [ x$1 == "x--help" -o x$1 == "x-h" ]; then
print_usage
exit 1
fi
# -----------------------------------------------------------------------------
# parse args
# -----------------------------------------------------------------------------
OUTFILE=/dev/stdout
GZIP_HEADER_TYPE=print_gzip_files_anon
SENDING_GZIP=
SENDING_FULL=0
NO_HEADERS=0
LOG="messages"
while [ -n "$1" ]; do
__ARG=
case $1 in
-f )
if [ -z "$2" ]; then
LOG="messages"
else
LOG="$2"
fi
follow_log /var/log/$LOG
# we dont come back here..
exit
;;
-o )
shift
if [ -n "$1" ]; then
OUTFILE="$1"
fi
echo "" > "$OUTFILE" 2>/dev/null
loginfo kitchensink
shift
;;
-s )
SENDING_GZIP=1
shift
;;
--full )
SENDING_FULL=1
shift
;;
--fsn )
GZIP_HEADER_TYPE=print_gzip_files_dsn
shift
;;
--nohead )
GZIP_HEADER_TYPE=print_gzip_files_noheaders
SENDING_FULL=1
NO_HEADERS=1
shift
if [ -n "$1" ]; then
LOG="$1"
fi
shift
;;
-h | --help )
print_usage
exit
;;
* )
LOG="$1"
;;
esac
SHOWLOG_ARGS=$__ARGS
done
# -----------------------------------------------------------------------------
# calculate the number of files to send/show (NUMFILES) and their names
# (ALLFILES)
# -----------------------------------------------------------------------------
NUMFILES=0
ALLFILES=
TRANSFERFILE=/tmp/last${LOG}sentfile
# prevent tinyrot from running, and do not run while tinyrot is running
(
uflock 9
# Not sending log to server (not coming from pipelog)
if [ x$SENDING_GZIP == "x" ] ; then
ALLFILES=`ls -1 $ARCHIVE_DIR/${LOG}_*.gz | xargs`
if [ -n "$ALLFILES" ]; then
zcat $ALLFILES >> "$OUTFILE"
fi
cat /var/log/$LOG >> "$OUTFILE"
else # coming from pipelog
# Sending partial logs
if [ x$SENDING_FULL == "x0" ] && [ -e $ARCHIVE_DIR/${LOG}_${OLDEST_FILE} ] ; then
OLDEST_LZ=`cat $ARCHIVE_DIR/${LOG}_${OLDEST_FILE}`
if [ -e $NEXTFILETOSEND ]; then
OLDEST_LZ=`cat $NEXTFILETOSEND`
fi
YOUNGEST_LZ=`cat $ARCHIVE_DIR/${LOG}_${YOUNGEST_FILE}`
COUNTER_LZ=$OLDEST_LZ
OLDEST=`echo $OLDEST_LZ|sed 's/[0]*\(.*\)/\1/g'`
YOUNGEST=`echo $YOUNGEST_LZ|sed 's/[0]*\(.*\)/\1/g'`
COUNTER=`echo $COUNTER_LZ|sed 's/[0]*\(.*\)/\1/g'`
while [ ${COUNTER} -lt ${YOUNGEST} ]; do
FILE=$ARCHIVE_DIR/${LOG}_${COUNTER_LZ}_*.gz
if [ -e $FILE ]; then
ALLFILES="$ALLFILES $FILE"
NUMFILES=$(($NUMFILES+1))
fi
COUNTER=$(($COUNTER+1))
COUNTER_LZ=`echo $COUNTER | awk '{ printf "%08d", $1 }'`
done
# update LASTFILESENT
if [ ${NUMFILES} -gt 0 ]; then
echo $COUNTER | awk '{ printf "%08d", $1 }' > $LASTFILESENT
else
cat $NEXTFILETOSEND | awk '{ printf "%08d", $1 }' > $LASTFILESENT
fi
print_stream_header $NUMFILES >> "$OUTFILE"
$GZIP_HEADER_TYPE $ALLFILES >> "$OUTFILE"
else # Sending full logs
if [ "x$NO_HEADERS" == "x0" ]; then
print_stream_header `ls $ARCHIVE_DIR/${LOG}_*.gz | wc -l ` >> "$OUTFILE"
else
TFILES=`ls $ARCHIVE_DIR/${LOG}_*.gz`
echo $TFILES > $TRANSFERFILE
fi
$GZIP_HEADER_TYPE `ls $ARCHIVE_DIR/${LOG}_*.gz | xargs ` >> "$OUTFILE"
fi
fi
) 9> $FLAG_TINYROT_LOCK
I canīt find
PHP Code:
print_stream_header $NUMFILES
print_gzip_files $ALLFILES