From 6b9db620311742da1107df99d0e9827f0bac4ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauri=20V=C3=B5sandi?= Date: Tue, 19 Jun 2018 09:02:34 +0300 Subject: [PATCH] =?UTF-8?q?Veel=20n=C3=A4idiseid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- bin/README.md | 18 +++++++++++++ bin/filter2 | 61 ++++++++++++++++++++++++-------------------- kaart.py => bin/top3 | 7 ++--- nipid.md | 52 +++++++++++++++++++++++++++++++++++++ raport/README.md | 2 ++ 6 files changed, 109 insertions(+), 33 deletions(-) rename kaart.py => bin/top3 (90%) mode change 100644 => 100755 create mode 100644 nipid.md diff --git a/.gitignore b/.gitignore index 2163ddd..e6fb3e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ *.pyc -raport/top.svg +top.svg raport/raport*.html raport/bar.svg raport/bar.png diff --git a/bin/README.md b/bin/README.md index bb7940b..e198e78 100644 --- a/bin/README.md +++ b/bin/README.md @@ -32,6 +32,24 @@ Käivitamiseks: (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 Pythonis kirjutatud skript mis leiab enim külastatud URL-id. diff --git a/bin/filter2 b/bin/filter2 index e4671d2..8af0fba 100755 --- a/bin/filter2 +++ b/bin/filter2 @@ -15,7 +15,7 @@ try: scope_begin = datetime.strptime(sys.argv[2], "%Y-%m-%d %H:%M:%S") except ValueError: # 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") except IndexError: 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) # ning failide nimekiri (files) for filename in files: - if filename.startswith("access.log"): - path = os.path.join(root, filename) - 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 + if not filename.startswith("access.log"): + continue - file_start = None - with gzip.open(path) if path.endswith(".gz") else open(path) as fh: - 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 - else: - sys.stderr.write("Otsin logikirjeid failist %s\n" % path) - if dt > scope_end: + # Kleebi kokku faili absoluutne tee praegusest kataloogist ja failinimest + path = os.path.join(root, filename) + + # Loe faili muutmise (samas ka viimase logikirje) kuupäev ja kellaaeg + file_end = datetime.fromtimestamp(os.stat(path).st_mtime) + + # Kui otsitav ajavahemik algab peale viimase logikirje kuupäeva ja kellaaega, + # pole mõtet seda faili inspekteerida + 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 + with gzip.open(path) if path.endswith(".gz") else open(path) as fh: + 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 - if dt > scope_begin: - print line.strip() + else: + sys.stderr.write("Otsin logikirjeid failist %s\n" % path) + if dt > scope_end: + break + if dt > scope_begin: + print line.strip() diff --git a/kaart.py b/bin/top3 old mode 100644 new mode 100755 similarity index 90% rename from kaart.py rename to bin/top3 index 506726a..13e2baf --- a/kaart.py +++ b/bin/top3 @@ -8,13 +8,10 @@ from collections import Counter from lxml import etree from lxml.cssselect import CSSSelector -# apt install python-geoip python-numpy geoip-database -# dnf install python2-GeoIP - try: blank_map_path, = sys.argv[1:] except ValueError: - print "Anna argumentideks teed BlankMap-World6.svg ning access.log failideni" + print "Anna argumentideks tee BlankMap-World6.svg failini" sys.exit(254) # Loe sisse värvimata kaardifail kasutades lxml moodulit @@ -50,7 +47,7 @@ for line in sys.stdin: for country, count in hits.items(): # Interpoleeri külastuste arv vahemikus 0 kuni kõige enam külastusi saanud riik # 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 for element in document.xpath("//*[@id='%s']" % country.lower()): diff --git a/nipid.md b/nipid.md new file mode 100644 index 0000000..c521308 --- /dev/null +++ b/nipid.md @@ -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 +``` diff --git a/raport/README.md b/raport/README.md index 4182a72..e129ba5 100644 --- a/raport/README.md +++ b/raport/README.md @@ -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 * 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: ```bash