Veel näidiseid

This commit is contained in:
Lauri Võsandi 2018-06-19 09:02:34 +03:00
parent e5dddf33e3
commit 6b9db62031
6 changed files with 109 additions and 33 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
*.pyc *.pyc
raport/top.svg top.svg
raport/raport*.html raport/raport*.html
raport/bar.svg raport/bar.svg
raport/bar.png raport/bar.png

View File

@ -32,6 +32,24 @@ Käivitamiseks:
(cat access.log; zcat access.log.1.gz) | top2 (cat access.log; zcat access.log.1.gz) | top2
``` ```
# top3
Pythoni skript mis loeb standardsisendist Apache logikirjed sisse ning genereerib neist
värvitud maailmakaardi SVG faili ```top.svg```.
Skripti sõltuvuste paigaldamiseks:
```bash
apt install python-geoip python-numpy geoip-database # Ubuntu, Debian
dnf install python2-GeoIP # Fedora
```
Käivitamiseks:
```bash
cat access.log | top3 tee/failini/BlankMap-World6.svg
```
# top4 # top4
Pythonis kirjutatud skript mis leiab enim külastatud URL-id. Pythonis kirjutatud skript mis leiab enim külastatud URL-id.

View File

@ -15,7 +15,7 @@ try:
scope_begin = datetime.strptime(sys.argv[2], "%Y-%m-%d %H:%M:%S") scope_begin = datetime.strptime(sys.argv[2], "%Y-%m-%d %H:%M:%S")
except ValueError: except ValueError:
# Ei suutnud parsida kellaaega YYYY-mm-dd HH:MM:SS formaadis, # Ei suutnud parsida kellaaega YYYY-mm-dd HH:MM:SS formaadis,
# proovime test formaati veel # proovime teist formaati veel
scope_begin = datetime.strptime(sys.argv[2], "%d/%m/%Y %H:%M:%S") scope_begin = datetime.strptime(sys.argv[2], "%d/%m/%Y %H:%M:%S")
except IndexError: except IndexError:
scope_begin = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) scope_begin = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
@ -35,31 +35,38 @@ for root, dirs, files in os.walk(dir_logs):
# iga kausta kohta (root) on kättesaadav alamkataloogide nimekiri (dirs) # iga kausta kohta (root) on kättesaadav alamkataloogide nimekiri (dirs)
# ning failide nimekiri (files) # ning failide nimekiri (files)
for filename in files: for filename in files:
if filename.startswith("access.log"): if not filename.startswith("access.log"):
path = os.path.join(root, filename) continue
file_end = datetime.fromtimestamp(
os.stat(path).st_mtime)
if scope_begin > file_end:
sys.stderr.write("Jätan vahele %s faili kuna logifaili lõpp oli %s\n" %
(path, file_end))
continue
file_start = None # Kleebi kokku faili absoluutne tee praegusest kataloogist ja failinimest
with gzip.open(path) if path.endswith(".gz") else open(path) as fh: path = os.path.join(root, filename)
for line in fh:
m = re.match(RE_LOG_ENTRY, line) # Loe faili muutmise (samas ka viimase logikirje) kuupäev ja kellaaeg
if not m: file_end = datetime.fromtimestamp(os.stat(path).st_mtime)
continue
dt = datetime.strptime(m.group("timestamp")[:-6], "%d/%b/%Y:%H:%M:%S") # Kui otsitav ajavahemik algab peale viimase logikirje kuupäeva ja kellaaega,
if not file_start: # loeme esimest rida sellest failist # pole mõtet seda faili inspekteerida
file_start = dt if scope_begin > file_end:
if scope_end < file_start: sys.stderr.write("Jätan vahele %s faili kuna logifaili lõpp oli %s\n" %
sys.stderr.write("Jätan vahele %s faili kuna logifaili algus oli %s\n" % (path, file_start)) (path, file_end))
# Hüppa ridade lugemise tsükklist välja, järgmise faili juurde continue
break
else: file_start = None
sys.stderr.write("Otsin logikirjeid failist %s\n" % path) with gzip.open(path) if path.endswith(".gz") else open(path) as fh:
if dt > scope_end: for line in fh:
m = re.match(RE_LOG_ENTRY, line)
if not m:
continue
dt = datetime.strptime(m.group("timestamp")[:-6], "%d/%b/%Y:%H:%M:%S")
if not file_start: # loeme esimest rida sellest failist
file_start = dt
if scope_end < file_start:
sys.stderr.write("Jätan vahele %s faili kuna logifaili algus oli %s\n" % (path, file_start))
# Hüppa ridade lugemise tsükklist välja, järgmise faili juurde
break break
if dt > scope_begin: else:
print line.strip() sys.stderr.write("Otsin logikirjeid failist %s\n" % path)
if dt > scope_end:
break
if dt > scope_begin:
print line.strip()

7
kaart.py → bin/top3 Normal file → Executable file
View File

@ -8,13 +8,10 @@ from collections import Counter
from lxml import etree from lxml import etree
from lxml.cssselect import CSSSelector from lxml.cssselect import CSSSelector
# apt install python-geoip python-numpy geoip-database
# dnf install python2-GeoIP
try: try:
blank_map_path, = sys.argv[1:] blank_map_path, = sys.argv[1:]
except ValueError: except ValueError:
print "Anna argumentideks teed BlankMap-World6.svg ning access.log failideni" print "Anna argumentideks tee BlankMap-World6.svg failini"
sys.exit(254) sys.exit(254)
# Loe sisse värvimata kaardifail kasutades lxml moodulit # Loe sisse värvimata kaardifail kasutades lxml moodulit
@ -50,7 +47,7 @@ for line in sys.stdin:
for country, count in hits.items(): for country, count in hits.items():
# Interpoleeri külastuste arv vahemikus 0 kuni kõige enam külastusi saanud riik # Interpoleeri külastuste arv vahemikus 0 kuni kõige enam külastusi saanud riik
# värvitoonide vahemikku 120 (roheline) kuni 0 (punane) # värvitoonide vahemikku 120 (roheline) kuni 0 (punane)
hue = interp(count, [0, max(hits.values())], [120, 0]) hue = interp(count, [0, max(hits.values())], [180, 0])
# Leia XPath abil elemendid mille id attribuut on pandud riigikoodiks # Leia XPath abil elemendid mille id attribuut on pandud riigikoodiks
for element in document.xpath("//*[@id='%s']" % country.lower()): for element in document.xpath("//*[@id='%s']" % country.lower()):

52
nipid.md Normal file
View File

@ -0,0 +1,52 @@
# Mõned vähem tuntud nipid käsureal
Kiirklahvid:
* Ctrl-L - tühjenda ekraan
* Ctrl-R - ajaloost käskude otsimiseks regulaaravaldisega
* Ctrl-D - terminalist väljumiseks
* Ctrl-C - hetkel käivale protsessile katkestamise (SIGINT) signaali saatmiseks
* Ctrl-Z - hetkel käivale protsessile pausi (SIGSTOP) signaali saatmiseks
* Ctrl-Vasak, Ctrl-Parem - Sõna kaupa navigeerimine käsus
* Home, End - Käsu algusess või lõppu navigeerimine
# Copy-paste Ctrl-D abil
Faili copy-paste terminali abil saab teha järgnevalt.
Käivita käsk:
cat > failinimi
Käsk jääb ootama sisendit standardsisendist, st klaviatuur antud juhul.
Kopeeri lõik soovitud failist ning aseta PuTTY puhul parema hiireklõpsuga.
Vajuta Ctrl-D et lõpetada asetamine. Ctrl-D tähendab käsureal EOF-i (end of file).
# Copy-paste EOF markeriga
Käivita käsk:
```bash
cat << EOF > failinimi
```
Aseta soovitud sisu ning lõpetamiseks kirjuta EOF ning vajuta enter.
Siinkohal bash asendab $MUUTUJAD.
Kui soovid copy-paste sooritada nii et bash ei asendaks muutujaid:
```bash
cat << \EOF > failinimi
```
Aseta sisu, kirjuta EOF ning vajuta Enter
# Failide loomine käsuga
Juhendite kirjutamisel tuleb abiks kui terve käsk koos sisuga on kopeeritav:
```bash
cat << \EOF > failinimi
See on faili sisu
EOF
```

View File

@ -6,6 +6,8 @@ Failis ```main.py``` on näide kuidas Apache2 logisid parsida ning raporteerida
* Laadib ```requests``` mooduli abil alla BlankMap-World6.svg, värvib selle ära ```lxml``` mooduli abil ning salvestab top.svg faili sisse * Laadib ```requests``` mooduli abil alla BlankMap-World6.svg, värvib selle ära ```lxml``` mooduli abil ning salvestab top.svg faili sisse
* Genereerib Bootstrap baasil koostatud veebilehe mallist template.html faili raport.html * Genereerib Bootstrap baasil koostatud veebilehe mallist template.html faili raport.html
Tulemuse näidist saab kaeda aadressil https://media.k-space.ee/raport/raport.html
Sõltuvuste paigladamiseks: Sõltuvuste paigladamiseks:
```bash ```bash