#! /bin/sh

# Script designed to clean up (zip/delete) old files
# Adjust the variables below and then copy/symlink this script
# to /etc/cron/cron.{hourly,daily}

# We want to keep the filenames dated and that confuses logrotate,
# hence this script.

# Method used either AGE or FILES
METHOD="AGE"
# Maximum age of the logs
MAXAGE=120
# Maximum number of logs to keep
MAXFILES=30
# Zip all files after the first n files
ZIPAFTER=3
# Set to 1 for debug output
VERBOSE=0

# Path where the logfiles reside in
BASEPATH="/var/lib/osmo-pcap/"


# Find the client names present in basepath
# Delete files older than MAXAGE days
# Zip all but the first ZIPAFTER files
cd "$BASEPATH"


do_cleanup_age()
{
	find . -ctime +$MAXAGE -name "trace-$1-*.pcap*" |sort -r | while read LOG; do
		[ $VERBOSE -eq 1 ] && echo "Deleting file \"$LOG\""
		rm -f "$LOG"
	done
}

do_cleanup_files()
{
	i=1
	find . -name "trace-$1-*.pcap*" |sort -r | while read LOG; do
		if [ $i -gt $MAXFILES ]; then
			[ $VERBOSE -eq 1 ] && echo "Deleting file \"$LOG\""
			rm -f "$LOG"
		fi
		i=$(($i+1))
	done
}

do_zip()
{
	i=1
	find . -name "trace-$1-*.pcap*" |sort -r | while read LOG; do
		if [ $i -gt $ZIPAFTER ]; then
				if [ "${LOG##*.}" != "gz" ]; then
					[ $VERBOSE -eq 1 ] && echo "Compressing file \"$LOG\""
					gzip "$LOG"
				fi
		fi
		i=$(($i+1))
	done
}

# Use an explicit pattern here
find . -name "trace-*.pcap*" |sed -n -e "s/.*trace-\(.\+\)-[0-9]\{8\}_[0-9]\{6\}\.pcap\(\..\+\)\?/\1/p" |sort |uniq | while read CLIENT; do

	[ $VERBOSE -eq 1 ] && echo "Cleaning logs for $CLIENT"

	if [ "x$METHOD" == "xAGE" ]; then
		do_cleanup_age "$CLIENT"
	elif [ "x$METHOD" == "xFILES" ]; then
		do_cleanup_files "$CLIENT"
	else
		echo "Error, set METHOD to AGE or FILES"
		exit 1
	fi

	do_zip "$CLIENT"
done