ansible/roles/web-data-analysis/files/hotspot.awk
2017-02-15 19:26:30 +00:00

95 lines
1.9 KiB
Awk

#
# Take the apache log line
# 83.163.161.147 - - [30/Sep/2012:13:54:19 +0000] "GET /static/hotspot.txt HTTP/1.1" 200 3 "-" "dnssec-trigger/0.11"
# Convert to
# 1349013000 1
function convertdate(str) {
gsub(/\[/, "", str)
gsub(/\]/, "", str)
split(str,a,":");
split(a[1],b,"/");
temp="";
switch (b[2]) {
case "Jan":
temp="01"
break;
case "Feb":
temp="02"
break;
case "Mar":
temp="03"
break;
case "Apr":
temp="04"
break;
case "May":
temp="05"
break;
case "Jun":
temp="06"
break;
case "Jul":
temp="07"
break;
case "Aug":
temp="08"
break;
case "Sep":
temp="09"
break;
case "Oct":
temp="10"
break;
case "Nov":
temp="11"
break;
case "Dec":
temp="12"
break;
default:
temp="00"
break;
}
x=b[3]" "temp" "b[1]" "a[2]" "a[3] " "a[4]
y=int(mktime(x)/300) # 300 seconds make 5 minutes (I NEED A GLOBAL VAR)
return y
}
BEGIN{
timestamp=0;
num_ts = 0;
ts_hotspots=0;
total_hotsponts=0;
}
#
# We assume that every 300 seconds a system will log in at least 1
# time because the Networkmanager addon does so.
# Convert our date stamp to the nearest 5 minute block and add data to
# it. If the log file goes backwards or jumps etc this will mean
# multiple outputs for a timestamp. A later process will need to deal
# with that. All this will do is output how many it saw at that block
# in the log file.
#
$7 ~/hotspot.txt/ && $6 ~/GET/ {
date = convertdate($4)
if (timestamp != date) {
num_ts = num_ts +1;
print (timestamp*300),ts_hotspots # GLOBAL VAR GOES HERE
timestamp = date;
ts_hotspots = 1;
} else {
ts_hotspots = ts_hotspots +1;
total_hotspots = total_hotspots +1;
}
}
END {
num_ts = num_ts +1;
print int(timestamp*300),ts_hotspots # LOOK GLOBAL VAR AGAIN
}
## END OF FILE