-
Notifications
You must be signed in to change notification settings - Fork 0
/
geomat.sh
executable file
·102 lines (97 loc) · 4.1 KB
/
geomat.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/bin/bash
SPLITBASEDIR="/customer"
CUSTOMER=$1
WORKDIR="$SPLITBASEDIR/$CUSTOMER/logs"
GEOIPDIR="$SPLITBASEDIR/$CUSTOMER/geoip"
SLEEP=$((3600 * 1))
#SLEEP=600
MINDUR=60
MAXAGE=366
while true; do
find /tmp/geo.*.sema -mtime +31 -exec rm -f {} \; > /dev/null 2>&1
test -r $WORKDIR
if [ $? -eq 0 ]; then
TOFFSET=$((86400 * 2))
while [ $TOFFSET -lt $((86400 * 3)) ]; do
NOW=$(date +%s)
TSTAMP=$(date -d @$(($NOW - $TOFFSET)) +%Y-%m-%d)
FILE_KML=geoip.$TSTAMP.kml
FILE_KMZ=geoip.$TSTAMP.kmz
test -d $GEOIPDIR || mkdir -p $GEOIPDIR
find $GEOIPDIR -type f -mtime +${MAXAGE} -exec rm {} \;
test -r $GEOIPDIR/$FILE_KMZ
if [ $? -ne 0 ]; then
test -r $WORKDIR/access.$TSTAMP.log.gz
if [ $? -eq 0 ]; then
NOL_ACCESS_OLD=0
SEMA="/tmp/geo.$CUSTOMER.$TSTAMP.sema"
test -r $SEMA
if [ $? -eq 0 ]; then
NOL_ACCESS_OLD=$(cat $SEMA)
fi
NOL_ACCESS=$(zcat $WORKDIR/access.$TSTAMP.log.gz | wc -l)
if [ "x$NOL_ACCESS" != "x" ]; then
echo $NOL_ACCESS > $SEMA
fi
if [ $NOL_ACCESS -eq $NOL_ACCESS_OLD ]; then
rm -f /tmp/geo.$CUSTOMER.*.folder > /dev/null 2>&1
zcat $WORKDIR/access.$TSTAMP.log.gz | \
(
C_IP=""; C_DUR=""; C_MOUNT=""
while read LINE; do
C_IP=$(echo "$LINE" | awk '{print $1}')
C_DUR=$(echo "${LINE##*\ }")
C_MOUNT=$(echo "$LINE" | awk '{print $7}' | sed 's|^/||')
C_TIME=$(echo "$LINE" | awk '{print $4}' | sed 's|\[||')
if [ "x$C_IP" == "x" ]; then continue; fi
if [ "x$C_DUR" == "x" ]; then continue; fi
[[ $C_DUR =~ ^[-+]?[0-9]+$ ]]; if [ $? -ne 0 ]; then continue; fi
if [ "x$C_MOUNT" == "x" ]; then continue; fi
if [ "x$C_TIME" == "x" ]; then continue; fi
if [ $C_DUR -lt $MINDUR ]; then continue; fi
A_TIME=($(echo "$C_TIME" | sed 's|\/|\ |g' | sed 's|\:|\ |g'))
C_T_YEAR=${A_TIME[2]}
C_T_MONTH=${A_TIME[1]}
C_T_DAY=${A_TIME[0]}
C_T_HOUR=${A_TIME[3]}
C_T_MIN=${A_TIME[4]}
C_T_SEC=${A_TIME[5]}
C_T_EPOCH=$(date -d "${C_T_MONTH} ${C_T_DAY} ${C_T_HOUR}:${C_T_MIN}:${C_T_SEC} ${C_T_YEAR} UTC" +%s)
C_T_E_STOP="$C_T_EPOCH"
C_T_E_START=$(($C_T_EPOCH - $C_DUR))
C_T_STOP="$(date -d @${C_T_E_STOP} +%Y-%m-%dT%H:%M:%SZ)"
C_T_START="$(date -d @${C_T_E_START} +%Y-%m-%dT%H:%M:%SZ)"
A_LATLON=($(geoiplookup $C_IP | grep 'City' | iconv -f utf-8 -t ascii -c | rev 2>/dev/null | awk '{print $3OFS$4}' | sed 's|\,||g' | rev 2>/dev/null))
C_LAT=${A_LATLON[0]}; C_LON=${A_LATLON[1]}
if [ "x$C_LAT" == "x" -o "x$C_LON" == "x" ]; then continue; fi
FOLDER_TMP="/tmp/geo.$CUSTOMER.$C_MOUNT.folder"
test -r $FOLDER_TMP
if [ $? -ne 0 ]; then
echo "<Folder><name>$C_MOUNT</name><open>0</open>" > $FOLDER_TMP
fi
echo "<Placemark><name></name><styleUrl>#style_$CUSTOMER</styleUrl><Point><coordinates>${C_LON},${C_LAT}</coordinates></Point><TimeSpan><begin>$C_T_START</begin><end>$C_T_STOP</end></TimeSpan></Placemark>" >> $FOLDER_TMP
done
)
test -r $WORKDIR/$FILE_KML && rm -f $WORKDIR/$FILE_KML
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $WORKDIR/$FILE_KML
echo "<kml xmlns=\"http://www.opengis.net/kml/2.2\">" >> $WORKDIR/$FILE_KML
echo "<Document>" >> $WORKDIR/$FILE_KML
echo "<name>$TSTAMP</name>" >> $WORKDIR/$FILE_KML
echo "<Style id=\"style_$CUSTOMER\"><IconStyle><scale>0.4</scale><Icon><href>https://storage.googleapis.com/support-kms-prod/SNP_2752125_en_v0</href></Icon></IconStyle></Style>" >> $WORKDIR/$FILE_KML
for FOLDER_FILE in /tmp/geo.$CUSTOMER.*.folder; do
test -r $FOLDER_FILE || continue
echo "</Folder>" >> $FOLDER_FILE
cat $FOLDER_FILE >> $WORKDIR/$FILE_KML
rm -f $FOLDER_FILE
done
echo "</Document></kml>" >> $WORKDIR/$FILE_KML
zip $GEOIPDIR/$FILE_KMZ $WORKDIR/$FILE_KML > /dev/null 2>&1 && rm -f $WORKDIR/$FILE_KML
fi
fi
fi
TOFFSET=$(( $TOFFSET + 86400 ))
done
fi
sleep $SLEEP
done
exit