Skip to content

Instantly share code, notes, and snippets.

@esebastian
Created January 28, 2018 18:00
Show Gist options
  • Save esebastian/d9c57ce6971eb243685fd9220c91c696 to your computer and use it in GitHub Desktop.
Save esebastian/d9c57ce6971eb243685fd9220c91c696 to your computer and use it in GitHub Desktop.
Calculate the average size and compression ratio for rotated logfiles
#!/bin/bash
[[ -z "$1" ]] && exit 1
float_div () # Arguments: dividend and divisor
{
if [ $2 -eq 0 ]; then echo division by 0; exit; fi
local p=12 # precision
local c=${c:-0} # precision counter
local d=. # decimal separator
local r=$(($1/$2)); echo -n $r # result of division
local m=$(($r*$2))
[ $c -eq 0 ] && [ $m -ne $1 ] && echo -n $d
[ $1 -eq $m ] || [ $c -eq $p ] && return
local e=$(($1-$m))
c=$(($c+1))
float_div $(($e*10)) $2
}
log_dir=$1
log_files="access.*"
mkdir -p $log_dir/tmp
cp $log_dir/$log_files.gz $log_dir/tmp
compressed_average=`ls -l $log_dir/tmp/$log_files.gz | awk '{sum += $5; n++;} END {printf "%d", sum/n;}'`
gunzip $log_dir/tmp/$log_files.gz
raw_average=`ls -l $log_dir/tmp/$log_files | awk '{sum += $5; n++;} END {printf "%d", sum/n;}'`
rm -rf $log_dir/tmp
pushd $log_dir > /dev/null && echo $(pwd)/${log_files::-1}log && popd > /dev/null
printf "Average raw size in bytes: %d\n" $raw_average
printf "Average compressed in bytes: %d\n" $compressed_average
#printf "Average raw size in GB: %.12f\n" $(float_div $raw_average $((1024*1024*1024)))
#printf "Average compressed in GB: %.12f\n" $(float_div $compressed_average $((1024*1024*1024)))
printf "Average compression ratio is %d:1\n" $(( $raw_average / $compressed_average ))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment