====== Diagnostika logov ====== Klucove slova: mantis log downloader mantisLogDownloader driverBugReport driver bug report Zaloha logov na strojceku sa nachadza na ceste /opt/emtest/var/log/ Vo formate: driverBugReport_DATUM_ZALOHY.tgz Logy su ulozene v suborovej strukture: * /tmp/ - Logy z priecinka /tmp na strojceku * /var_log/ - Logy z priecinka /opt/emtest/var/log/ na strojceku * /statistic/ - Logy z priecinka /opt/emtest/var/lib/hlavny/statistika na strojceku Zaloha obsahuje: * Systemove logy: * dmesg_output * Logy hardverovych prostriedkov * free_output * df_output * Logy platnobneho terminalu + vsetky zalohy logov z priecinka /tmp * Logy vozidlovej aplikacie + vsetky zalohy logov z priecinka /tmp * Statisticke zaznamy * binarny subor aktualne otvoreneho odpoctu * konfiguracny subor statistiky 'statistikacfg.xml' * Logy monitorovania podpornych aplikacnych programov ===== Systemove logy ===== ===== Logy hardverovych prostriedkov ===== ===== Logy platnobneho terminalu ===== ===== Logy vozidlovej aplikacie ===== ===== Statisticke zaznamy ===== ===== Log Downloader ===== **Autor sluzby**: Matej Turcel \\ **Konzultant**: J. Sipikal, K. Turcelova Skript z Mantisu/Helpdesku ziskava informacie o novych bugoch, na zaklade ktorych stahuje zo strojcekov logy (vo formate ''tgz'') a pridava ich na Mantis k tomu-ktoremu bugu ako prilohu.\\ Pri necakanom ukonceni a opatovnom spusteni skript pokracuje v stahovani rozstahovanych logov a uploade dostahovanych, pricom si uchova tiez ID posledneho spracovaneho bugu. Nemalo by teda vadit ak bude skript nasilne ukonceny. **Umiestnenie a vlastnosti sluzby:** - Sluzba je spustena na servri 192.168.99.130 alebo pomocou domeny servis.dopravnakarta.sk. Server je umiestneny v telecom cloud-e - Login a heslo poskytne IT oddelenie. - Sluzba sa spusta automaticky po starte pomocou skriptu /etc/systemd/system/mantislogdownloader.service Zdrojove subory sa nachadzaju v git repozitari s nazvom: mantislogdownloader.git. [[http://192.168.241.14/wiki/doku.php?id=howto:git#zoznam_repozitarov_-_server | Link na git wiki]] ==== Deployment / instalacia ==== Skript musi bezat na serveri z ktoreho je pristup na strojceky (napr. 192.168.99.130). Potrebny je **Python 3.4.3 a vyssie** a nainstalovane zavislosti.\\ Instalacia zavislosti - spustenim skriptu ''install.sh'' (musi byt spusteny ako ''root''). Na instalaciu zavislosti je potrebny Python package installer - ''pip3''. Pokial nie je dostupny, skript ''install.sh'' sa ho pokusi nainstalovat, to sa ale nemusi vzdy podarit (lebo na to je potrebny modul ''ensurepip'' pre Python3 ktory tiez nemusi byt dostupny).\\ Instalacia ''pip3'' - nainstalovat balik ''python3-pip''. ==== Adresarova struktura ==== logdldr/ doc/ util/ pdf/ src/ data/ partial/ [zlozky jednotlivych bugov, napr. "9744_10.12.196.1_20160907051621\"] [archiv s logmi daneho bugu, napr. "driverBugReport_20160907-05_16_21.tar.gz"] finished/ failed/ pack/ download/ upload/ var/ logdldr.log [mantis/] install.sh logdldr.py Zlozky/subory potrebne pre beh programu su vytvorene automaticky. * **logdldr**: zdrojove subory (vratane ''config.py'') * **doc**: dokumentacia * **util**: nastroje na editaciu / zobrazenie dokumentacie * **pdf**: subory vo formate pdf * **src**: zdrojove subory dokumentacie * ''.xml -> [[https://www.draw.io|draw.io]]'' * ''.pu -> doc/util/plantuml.jar'' * ''.sd -> doc/util/sdedit-4.2-beta8.jar'' * ''.tsm -> doc/util/tinyuml-0.13_02-bin/tinyuml.jar'' * **data**: data stiahnute zo strojcekov (zlozky obsahuju podzlozky pre jednotlive bugy) * **partial**: ciastocne stiahnute logy; po ukonceni a opatovnom spusteni skriptu sa logy v tejto zlozke dostahuju a uploadnu na Mantis * **finished**: kompletne stiahnute logy; subory su po uspesnom uploade na Mantis odstranene; po opatovnom spusteni - upload na Mantis * **failed**: subory pri ktorych doslo k chybe - skript sa nimi dalej nezaobera * **pack**: zlyhalo zabalenie do archivu (napr. subory na strojceku neexistuju, alebo tiez strojcek nie je dostupny) * **download**: zlyhalo stahovanie zo strojceka * **upload**: zlyhal upload na Mantis * **var/logdldr.log**: obsahuje varovania a chyby (pri opatovnom spusteni - append) * **install.sh**: instalacia zavislosti * **logdldr.py**: spustac programu (volany z konzoly apod.) ==== Konfiguracia ==== Subor ''logdldr/config.py'' obsahuje rozne nastavenia, od adries, uctov a hesiel cez nazvy lokalnych priecinkov a suborov po "backoff strategy" pri preruseni spojenia. ==== Spustanie ==== Prepinace, argumenty: * **BUG_ID_SINCE**: stahovat logy pre bugy novsie nez tento (ak nie je zadane, skript caka na nove bugy vznikle po jeho spusteni) * **-s, --simulate-upload**: simulacia uploadu na Mantis (povodne pre ucely debuggingu - mozno by bolo vhodne upravit podla potrieb). Namiesto uploadu na Mantis sa stiahnute subory presunu do zlozky ''mantis'', napr. ''mantis/9744/driverBugReport_20160907-05_16_21.tar.gz''. * **-n, --no-new-bugs**: nestahovat nove logy, iba dokoncit rozstahovane / uploadnut stiahnute * **-m, --multi-instance**: povolit viacero beziacich instancii. Skript spusteny bez tohto prepinaca moze bezat iba jeden. Ak je skript spusteny s prepinacom ''-m'' a potom bez prepinaca, tiez bezia obe instancie. * **-d, --debug**: debug output na stdout Ked sa skript spusti bez prepinaca ''-d'' a v skorych stadiach (tj. spracovanie argumentov, vytvorenie priecinkov, ...) nedojde k chybe, na konzole nie je nijaky vystup a skript bezi az do ukoncenia (napr. Ctrl+C).\\ Pri spusteni viacerych instancii naraz budu vsetky pokracovat v stahovani rozstahovanych logov, preto by nemalo bezat viac instancii naraz.\\ Chyby ktore nastanu pocas behu su logovane do suboru ''var/logdldr.log'', niektore tiez na Mantis ako poznamky k bugom (napr. ak sa nepodari stiahnut logy). ==== Ukoncenie ==== Pri prvom SIGINT/Ctrl+C sa prestanu preberat z Mantisu nove bugy a caka sa na dokoncenie spracovania zacatych.\\ Pri druhom SIGINT/Ctrl+C sa skript okamzite ukonci.\\ V oboch pripadoch sa na stderr (pokial stderr je konzola) vypise informacna hlaska.\\ ==== Implementacia ==== === Diagramy === [[troubleshoot:diagramy_class|Class]] [[troubleshoot:diagramy_activity|Activity]] [[troubleshoot:diagramy_sequential|Sequential]] === Popis tried === Menej podstatne triedy a wrapper triedy vynechane.\\ (S) za nazvom triedy znaci, ze existuje iba jedna instancia triedy * bugfetcher.py * **BugFetcher** (S): periodicke ziskavanie bugov z Mantisu (stahuje ich cez objekt ''DldMgr'') * dldmgr.py * **DldMgr** (S): sprava stahovania (priradovanie do prislusnej stahovacej fronty) * **DldQueue**: fronta pre konkretny strojcek, obsahuje svoj ''Downloader'' ktorym stahuje logy zo strojceka * downloader.py * **Downloader**: stahovanie logov z konkretneho strojceka (kazda IP adresa ma svoju instanciu) * upldmgr.py * **UpldMgr** (S): sprava uploadov na Mantis; samotny upload implementuje ''Uploader'' * uploader.py * **Uploader** (S): upload logov na Mantis * mantisclient.py * **MantisClient** (S): komunikacia s Mantisom * bug.py * **Bug**: nesie informacie o bugu (ID, IP adresa, datum/cas,...) * **Bug_MantisConverter**: mixin implementujuci prevod SOAP-objektu na instanciu triedy ''Bug'' * filemgr.py * **Bug_FileMgr**: mixin pridavajuci do triedy ''Bug'' spravu suborov toho-ktoreho bugu (presuvanie suborov, mazanie,...) * **BugIDFileMgr** (S): spravuje subor obsahujuci ID posledneho spracovaneho bugu * log.py * **LogRecord**: informacie o zazname (povodna sprava, datum/cas, vlakno, subor/riadok/funkcia,...) * **BasicFormatter** (S): zakladny prevod instancie ''LogRecord'' do textovej podoby * **ColoredConsoleFormatter** (S): prevod ''LogRecord'' to textovej podoby s farebnym zobrazenim (napr. chyby - cervena) * **MantisFormatter** (S): prevod ''LogRecord'' to textovej podoby s minimalnym mnozstvom informacii (iba povodna sprava bez datumu/casu atd.) * **//AbstractRecordLogger//**: obsahuje abstraktnu metodu ''_log_record'', ktora pomocou prislusneho formattera prevedie ''LogRecord'' do textovej podoby a vysledok zapise do logu * **//AbstractBasicLogger//** : //AbstractRecordLogger//: implementuje metody ''log'', ''log_error'' a ''log_warning'', ktore vytvoria ''LogRecord'' objekt a zavolaju metodu ''_log_record'' * **//AbstractBugLogger//** : //AbstractRecordLogger//: implementuje metody ''log_bug'', ''log_bug_error'' a ''log_bug_warning'', ktore vytvoria ''LogRecord'' objekt a zavolaju metodu ''_log_record'' * **DebugLogger** (S) : //AbstractBasicLogger//, //AbstractBugLogger//: implementuje abstraktnu metodu ''_log_record'', v ktorej zapisuje do konzoly; na formatovanie pouziva ''ColoredConsoleFormatter'' * **LocalLogger** (S) : //AbstractBasicLogger//, //AbstractBugLogger//: implementuje abstraktnu metodu ''_log_record'', v ktorej zapisuje do suboru; pouziva ''BasicFormatter'' * **MantisLogger** (S) : //AbstractBugLogger//: implementuje abstraktnu metodu ''_log_record'', v ktorej pridava na Mantis poznamku k bugu; pouziva ''MantisFormatter''