Skip to content

Instantly share code, notes, and snippets.

@PatPeter
Last active August 12, 2019 06:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PatPeter/7e44c5276b60368a780ff4d55c6e9262 to your computer and use it in GitHub Desktop.
Save PatPeter/7e44c5276b60368a780ff4d55c6e9262 to your computer and use it in GitHub Desktop.
Scans MultiAdmin files for Steam IDs and aggregates on a per-day and per-day/SteamID basis
#!/bin/bash
scpsl=.
regex='^\[([0-9]+:[0-9]+:[0-9]+)\] Accepted authentication token of user ([0-9]+) with global ban status ([0-9]) signed by ([A-Za-z0-9 ]+) server\.$'
for dir in $scpsl/servers/*
do
if [ ! -d $dir ]
then
continue
fi
server=$(basename $dir)
echo "Statistics for server $dir..."
echo "date,amount,uniques" | tee $dir/../${server}_server_statistics.csv
echo "date,id,amount" | tee $dir/../${server}_player_statistics.csv
unset dates
unset dates_total_players
unset dates_unique_players
declare -a dates
declare -A dates_total_players
declare -A dates_unique_players
echo $dir
first_date=$(ls $dir/logs | head -n 1 | cut -d_ -f1)
echo "Generating statistics from date: $first_date"
last_date=$(date +%Y-%m-%d)
last_date=$(date +%Y-%m-%d -d "$last_date + 1 day")
date=$first_date
while [ "$date" != "$last_date" ]
do
files_per_date=$(ls -1 $dir/logs/${date}* | wc -l)
echo "FILES FOR DATE $date: $files_per_date"
dates+=($date)
if [ -z ${dates_total_players[$date]} ]
then
dates_total_players[$date]=0
fi
if ! ls $dir/logs/${date}_*MA*.txt>/dev/null 2>&1
then
echo "No files found for pattern $dir/logs/${date}_*MA*.txt"
date=$(date +%Y-%m-%d -d "$date + 1 day")
continue
fi
echo "$date "
unset dates_player_per_day
declare -A dates_player_per_day
for file in $dir/logs/${date}_*MA*.txt
do
echo -ne .
while read line
do
if [[ $line =~ $regex ]]
then
steamid=/"${BASH_REMATCH[2]}"
if [ -z ${dates_player_per_day[$steamid]} ]
then
dates_player_per_day[$steamid]=0
fi
(( dates_total_players[$date]++ ))
(( dates_player_per_day[$steamid]++ ))
echo -ne "#"
fi
done<$file
done
for id in ${!dates_player_per_day[@]}
do
echo ${date},${id},${dates_player_per_day[$id]-0} | tee -a $dir/../${server}_player_statistics.csv
done
dates_unique_players[$date]=${#dates_player_per_day[@]}
echo -ne "\n"
date=$(date +%Y-%m-%d -d "$date + 1 day")
done
for date in ${dates[@]}
do
echo ${date},${dates_total_players[$date]-0},${dates_unique_players[$date]-0} | tee -a $dir/../${server}_server_statistics.csv
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment