-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstagWatchdog.sh
159 lines (123 loc) · 3.43 KB
/
stagWatchdog.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#! /bin/bash
# STAG SCHEDULE WATCHDOG
#
# author: Ondrej Doktor, [email protected]
#
# https://github.com/drml/stagWatchdog
#
# license: MIT
# zobrazi navod k pouziti
usage()
{
echo ""
echo "Pouziti: stagWatchdog [-q] [-h hostname] -s semestr(ZS|LS) -o osobniCislo" 1>&2
echo ""
echo "Povinne parametry:"
echo " -s Zkratka semestru, ke kteremu se ma kontrolovat rozvrh. Pripustne"
echo " hodnoty jsou bud 'ZS' nebo 'LS' (bez apostrofu)"
echo ""
echo " -o Osobni cislo studenta, tak jak je ulozeno v systemu STAG. "
echo ""
echo "Nepovinne parametry:"
echo " -h Hostname na kterem je pristupne REST API systemu STAG. Pokud neni"
echo " vyplneno, pouzije se wstag.jcu.cz"
echo ""
echo " -q Tichy rezim. Vystup se generuje pouze pri vyskutu zmeny, nebo"
echo " pokud nastane chyba. Tato volba je vhodna napr. pro automatizovane"
echo " zasilani mailu pomoci CRONu. "
echo ""
exit 1
}
# prevede CSV rozvrhy do lidky citelne podoby
formatCsvHr(){
cat $1 | \
cut -d\; -f 2-4,15-16,20,28-29,32,45 | \
column -s\; -t | \
sed 's/\"//g'
}
personCode=""
semester=""
host="wstag.jcu.cz"
apiQuerry="/ws/services/rest/rozvrhy/getRozvrhByStudent?outputFormatEncoding=UTF-8&outputFormat=csv"
qFlag=""
# ----------- Osetreni vstupu
while getopts qs:h:o: opt
do
case "$opt" in
(q) qFlag="-q";;
(s) semester="$OPTARG";;
(o) personCode="$OPTARG";;
(h) host="$OPTARG";;
(*) usage;;
esac
done
if [[ -z $personCode ]]
then
echo "Chyba: nebylo zadano osobni cislo"
usage
fi
if [[ $semester != "ZS" && $semester != "LS" ]]
then
echo "Chyba: volba semestr muze nabyvat pouze hodnot 'LS' nebo 'ZS'"
usage
fi
# -------------- Priprava prostredi
apiUrl="http://${host}${apiQuerry}&osCislo=${personCode}&semestr=${semester}"
mostRecent="data/${personCode}-$(date +%s;).csv"
if [ ! -d "./data" ] # pokud adresar neexistuje, vytvor ho
then
mkdir ./data
fi
lastKnown=""
if [ "$(ls -A ./data)" ] # pokud je neprazdny, hledej posledni znamy stav
then
lastKnown=$(ls -dt ./data/* | head -1)
fi
# --------------- Ziskavani dat
wget -q -O $mostRecent $apiUrl 2> /dev/null
if [[ $? > 0 ]]
then
echo "Chyba: nepodarilo se nacist data ze systemu STAG"
echo "URL: $apiUrl"
exit 2
fi
difference=""
if [ -e "$lastKnown" ]
then
difference=$(diff $mostRecent $lastKnown);
if [[ $? > 2 ]] # 0 - zadna zmena, 1 - zmena, 2+ - prusvih
then
echo "Chyba: nepodarilo se porovnat soubory, overte pristupova prava"
exit 3
fi
fi
# -------------- Vyhodnoceni
if [[ $difference = "" && $lastKnown != "" ]]; then
if [[ $qFlag = "" ]]
then
echo "-----------------------------------------"
echo "Rozvrh se od posledni kontroly nezmenil"
echo "-----------------------------------------"
fi
# Smaze ten ktery prave stahnul (kdys je stejny) a konec
rm $mostRecent;
exit 0
elif [[ $lastKnown = "" ]]
then
if [[ $qFlag = "" ]]
then
echo "-----------------------------------------"
echo "Prvni spusteni, inicialni data nactena"
echo "-----------------------------------------"
fi
else
if [[ $qFlag = "" ]]
then
echo "-----------------------------------------"
echo "Rozvrh se od posledni kontroly ZMENIL!"
echo "---------------------------==========----"
fi
# zobrazi oberveny rozdilovy podhled
diff -u <(formatCsvHr $mostRecent) <(formatCsvHr $lastKnown) \
| sed 's/^-/\x1b[31m-/;s/^+/\x1b[32m+/;s/$/\x1b[0m/'
fi;