diff --git a/collector_module/collector.py b/collector_module/collector.py index 5ca54d4..22e237f 100644 --- a/collector_module/collector.py +++ b/collector_module/collector.py @@ -55,7 +55,10 @@ def collector_worker(data): response.content, re.DOTALL) if resp_search is None: # No attachment present + msg = "[{0}] No attachment present for: {1}\n".format(worker_name, server) + logger_m.log_warning('collector_worker', msg) return -1 + data_json = json.loads(zlib.decompress(resp_search.group(1), zlib.MAX_WBITS | 16).decode('utf-8')) records = data_json["records"] except Exception as e: @@ -68,6 +71,9 @@ def collector_worker(data): msg = "[{0}] Adding {1} documents for server: {2}".format(worker_name, len(records), server) logger_m.log_info('collector_worker', msg) server_m.insert_data_to_raw_messages(records) + else: + msg = "[{0}] No documents for server: {1}".format(worker_name, server) + logger_m.log_warning('collector_worker', msg) return_value = 0 next_records_from = records_to diff --git a/collector_module/settings_sample.py b/collector_module/settings_sample.py index 0210138..aa54d91 100644 --- a/collector_module/settings_sample.py +++ b/collector_module/settings_sample.py @@ -27,7 +27,7 @@ # IP or URL of Instance Security Server SECURITY_SERVER_URL = "" # Timeout for SERVER_URL http requests. -SECURITY_SERVER_TIMEOUT = 10.0 +SECURITY_SERVER_TIMEOUT = 60.0 # Message header of Instance Monitoring Client # MEMBERCLASS is in {GOV, COM, NGO, NEE} diff --git a/corrector_module/correctorlib/corrector_batch.py b/corrector_module/correctorlib/corrector_batch.py index 3b4e292..c3bc347 100644 --- a/corrector_module/correctorlib/corrector_batch.py +++ b/corrector_module/correctorlib/corrector_batch.py @@ -102,19 +102,36 @@ def _batch_run(self, process_dict): logger_m.log_info('corrector_batch_update_timeout', "Updating timed out [{0} days] orphans to done.".format(self.settings.CORRECTOR_TIMEOUT_DAYS)) - # Update Status of older documents - cursor = db_m.get_timeout_documents(self.settings.CORRECTOR_TIMEOUT_DAYS, + # Update Status of older documents according to client.requestInTs + cursor = db_m.get_timeout_documents_client(self.settings.CORRECTOR_TIMEOUT_DAYS, limit=self.settings.CORRECTOR_DOCUMENTS_LIMIT) list_of_docs = list(cursor) number_of_updated_docs = db_m.update_old_to_done(list_of_docs) if number_of_updated_docs > 0: - logger_m.log_info('corrector_batch_update_old_to_done', - "Total of {0} orphans updated to status 'done'.".format(number_of_updated_docs)) + logger_m.log_info('corrector_batch_update_client_old_to_done', + "Total of {0} orphans from Client updated to status 'done'.".format(number_of_updated_docs)) else: - logger_m.log_info('corrector_batch_update_old_to_done', + logger_m.log_info('corrector_batch_update_client_old_to_done', "No orphans updated to done.") + doc_len += number_of_updated_docs + + # Update Status of older documents according to producer.requestInTs + cursor = db_m.get_timeout_documents_producer(self.settings.CORRECTOR_TIMEOUT_DAYS, + limit=self.settings.CORRECTOR_DOCUMENTS_LIMIT) + list_of_docs = list(cursor) + number_of_updated_docs = db_m.update_old_to_done(list_of_docs) + + if number_of_updated_docs > 0: + logger_m.log_info('corrector_batch_update_producer_old_to_done', + "Total of {0} orphans from Producer updated to status 'done'.".format(number_of_updated_docs)) + else: + logger_m.log_info('corrector_batch_update_producer_old_to_done', + "No orphans updated to done.") + + doc_len += number_of_updated_docs + # Go through the to_remove list and remove the duplicates element_in_queue = True total_raw_removed = 0 @@ -133,6 +150,8 @@ def _batch_run(self, process_dict): logger_m.log_info('corrector_batch_remove_duplicates_from_raw', "No raw documents marked to removal.") + doc_len += total_raw_removed + end_processing_time = time.time() total_time = time.strftime("%H:%M:%S", time.gmtime(end_processing_time - start_processing_time)) msg = ["Number of duplicates: {0}".format(duplicates.value), diff --git a/corrector_module/correctorlib/database_manager.py b/corrector_module/correctorlib/database_manager.py index b04157f..13e4740 100644 --- a/corrector_module/correctorlib/database_manager.py +++ b/corrector_module/correctorlib/database_manager.py @@ -84,9 +84,9 @@ def get_raw_documents(self, limit=1000): self.logger_m.log_error('DatabaseManager.get_raw_documents', '{0}'.format(repr(e))) raise e - def get_timeout_documents(self, timeout_days, limit=1000): + def get_timeout_documents_client(self, timeout_days, limit=1000): """ - Gets the documents that have been processing more than timeout_days. + Gets the documents from Client that have been processing more than timeout_days. :param timeout_days: The timeout days. :param limit: Number of documents to return. :return: Returns the documents that have been processing more than timeout_days. @@ -99,7 +99,25 @@ def get_timeout_documents(self, timeout_days, limit=1000): cursor = clean_data.find(q).limit(limit) return list(cursor) except Exception as e: - self.logger_m.log_error('DatabaseManager.get_timeout_documents', '{0}'.format(repr(e))) + self.logger_m.log_error('DatabaseManager.get_timeout_documents_client', '{0}'.format(repr(e))) + raise e + + def get_timeout_documents_producer(self, timeout_days, limit=1000): + """ + Gets the documents from Producer that have been processing more than timeout_days. + :param timeout_days: The timeout days. + :param limit: Number of documents to return. + :return: Returns the documents that have been processing more than timeout_days. + """ + try: + db = self.get_query_db() + clean_data = db[CLEAN_DATA_COLLECTION] + ref_time = 1000 * (get_timestamp() - (timeout_days * 24 * 60 * 60)) + q = {"correctorStatus": "processing", "client.requestInTs": {"$exists": False}, "producer.requestInTs": {"$lt": ref_time}} + cursor = clean_data.find(q).limit(limit) + return list(cursor) + except Exception as e: + self.logger_m.log_error('DatabaseManager.get_timeout_documents_producer', '{0}'.format(repr(e))) raise e @staticmethod diff --git a/corrector_module/settings_sample.py b/corrector_module/settings_sample.py index babfb56..8cb849c 100644 --- a/corrector_module/settings_sample.py +++ b/corrector_module/settings_sample.py @@ -38,7 +38,8 @@ class Settings: WAIT_FROM_DONE = 300 # If number of processed docs is smaller than CORRECTOR_DOCUMENTS_MIN, # waits WAIT_FROM_DONE to restart batch - CORRECTOR_DOCUMENTS_MIN = 1 + # CORRECTOR_DOCUMENTS_MIN = 1 + CORRECTOR_DOCUMENTS_MIN = CORRECTOR_DOCUMENTS_LIMIT # Match THREAD_COUNT with number of cores * CPUs available to ensure best performance THREAD_COUNT = 4 diff --git a/docs/user_guide/1_report_sample.png b/docs/user_guide/1_report_sample.png new file mode 100644 index 0000000..66c289f Binary files /dev/null and b/docs/user_guide/1_report_sample.png differ diff --git a/docs/user_guide/ug_reports_et.md b/docs/user_guide/ug_reports_et.md index 03d70b2..f757f06 100644 --- a/docs/user_guide/ug_reports_et.md +++ b/docs/user_guide/ug_reports_et.md @@ -9,22 +9,28 @@ Raportid on mõeldud eelkõige isikutele, kes on märgitud [RIHAs](https://www.riha.ee/) vastava alamsüsteemi kontaktisikuteks (infosüsteemi ülematele). Raportid võiksid anda neile ülevaate, mis üldse toimub X-teel Teie vastavas alamsüsteemis: -- kes ja kui palju seda kasutab (Osutatud teenused) ning -- kas ja kui palju Teie alamsüsteemist päringuid teistesse alamsüsteemidesse välja läheb (Kasutatud teenused). +- kes ja kui palju seda kasutab (**Osutatud teenused**) ning +- kas ja kui palju Teie alamsüsteemist päringuid teistesse alamsüsteemidesse välja läheb (**Kasutatud teenused**). -Mõlemad neist osadest on veel omakorda jagatud kaheks, eraldi nn „päris-teenused“ (äriteenused) ja X-tee metateenused. Kõigis neljas tabelis on toodud päringute kaupa (Teenus) nende kasutajad (Klient/Osutaja), õnnestunud ja ebaõnnestunud päringute arvud, samuti õnnestunud päringute kestused (millisekundites) ning päringute ja vastuste suurused (baitides). +Mõlemad neist osadest on veel omakorda jagatud kaheks, eraldi nn „päris-teenused“ (**äriteenused**) ja X-tee **metateenused**. +Kõigis neljas tabelis on toodud päringute kaupa (Teenus) nende kasutajad (Klient/Osutaja), õnnestunud ja ebaõnnestunud päringute arvud, samuti õnnestunud päringute kestused (millisekundites) ning päringute ja vastuste suurused (baitides). Usume, et raportitest on kasu ka oma klientidest või andmevahetuspartneritest parema ülevaate saamisel. Raportid võiksid oma andmetes anda ülevaate enim kasutatud, kõige vigasemate, kõige kauem kestvate või kõige kiiremate, samuti kõige mahukamate päringute kohta ning olla abiks teenuste paremal disainimisel ning kasutamisel, mahuhinnangutes. -Igal raportil on unikaalne nimeosa (koostamise hetk tuhandiksekundi täpsusega) ja avaldamiskeskkonnas olevate raporti kohta saadetakse e-postiga vaid viide. +Alltoodud näidisraporti puhul näiteks on võimalik näha, et ühtede süsteemidega andmevahetus toimib (õnnestunud päringud: 687), teistega mitte (ebaõnnestunud päringud: 984, kestused ja suurused `None`). +Samuti, et sama päringu (getSecurityServerOperationalData) puhul ühelt süsteemilt saabuvad andmed keskmiselt 0,292 sekundiga, teiselt aga keskmiselt 2,039 sekundiga, st ligikaudu 7 korda aeglasemalt. + +![Näidisraport](1_report_sample.png "Näidisraport") + +Igal raportil on unikaalne nimeosa (koostamise hetk mikrosekundi, st miljondiku täpsusega) ja avaldamiskeskkonnas olevate raporti kohta saadetakse e-postiga vaid viide. Avaldamiskeskkonnas on kaustapuude kaudu kõigi seal asuvate raportite vaatamine piiratud. Kokkuvõttes võiksid need enam-vähem tagada, et: - iga kontaktisik näeb just talle saadetud raportit; - mitte keegi ei näe teistele isikutele saadetud raporteid (ühe alamsüsteemi raport selle alamsüsteemi kontaktidele on muidugi seesama); - asutuse uus kontaktisik ei näe vanu raporteid ilma, et kas eelmine (või olemasolev) kontakt talle neid viiteid jagaks; - asutusest lahkunud kontaktisik ei saa enam teavitust uute koostatud raportite kohta. -Raportid koostatakse nii arendus- (ee-dev), test- (ee-test) kui toodangukeskkonna (EE) kohta iga kalendrikuu 7-10. kuupäeval. +Raportid koostatakse nii arendus- (ee-dev), test- (ee-test) kui toodangukeskkonna (EE) kohta iga kalendrikuu 8-10. kuupäeval. Juhul kui on soovitusi raporti sisu, vormi jms osas, palun lahkesti teada anda, püüame RIA poolt kaasa aidata parema selguse ja läbipaistvuse loomisele selles, mis X-tee peal tegelikult toimub. Palun andke märku aadressil help@ria.ee kõikides seotud küsimustes. @@ -38,12 +44,23 @@ Visualiseeritud pilt X-tee v6 toimuva kohta on: ### Miks just MINA selle raporti sain? Sest just Teie olete selle X-tee alamsüsteemi kontakt [RIHA](https://www.riha.ee/) andmetel. -Palun veenduge RIHA andmete ajakohasuses (vajalik autentimine). +Palun veenduge RIHA andmete ajakohasuses (vajalik eelnev autentimine). + +### Kas raportite saamise võib ka "maha võtta"? Kuidas? + +Hetkel meil raportite väljasaatmise süsteemile nn "opt-out" nimekirja pole. Raportid saadetakse kõigile selle X-tee alamsüsteemi RIHAs märgitud kontaktisikutele. + +Palun selgitust, miks soovite teavitustest loobuda? + +- Kui Te ei ole nimetatud alamsüsteemiga enam seotud, siis lihtsaim lahendus on enda kontakti eemaldamine RIHAst. +- Kui te olete küll seotud kuid ei soovi neid kirju, siis üks võimalus on ka oma e-kirjade postkastis vastav suunav filter moodustada. +- Kui te olete seotud aga tahaksite näha ülevaateid mingil teisel kujul, siis ootame tagasidet, milline see parem ja sobivam vorm võiks olla. +- Kui te lihtsalt ei vaja niisugust lisainfot raportite näol, siis püüame juurutada ka "opt-out" nimekirja võimaluse. ### Miks just TEMA selle raporti sai? Sest just tema on selle X-tee alamsüsteemi kontakt [RIHA](https://www.riha.ee/) andmetel. -Palun veenduge RIHA andmete ajakohasuses (vajalik autentimine). +Palun veenduge RIHA andmete ajakohasuses (vajalik eelnev autentimine). ### Kas ma võin mulle saadetud raporti edasi saata? @@ -65,9 +82,13 @@ Soovitame üle vaadata RIHAs iga alamsüsteemi kontaktisikud ning otsustada, kas Raportite koostamise aluseks on X-tee keskusele (RIA) kättesaadavad andmed liikmete X-tee turvaserveritest. Juhul kui ühel või teisel põhjusel ei ole Teie turvaserver kättesaadav, siis koostatakse Teie raporti andmed Teie andmevahetuspartnerite X-tee turvaserveritest pärineva põhjal. On võimalik, et ka osa nendest ei ole olnud kättesaadavad. -### Misasi on, kuidas on arvutatud kestus? +Võimalikud põhjused, miks X-tee keskus ei saa andmed mõne X-tee liikme turvaserveri(te)st on toodud osas [Tehnilist](#tehnilist). -Päringute kestused fikseeritakse ja kajastatakse raportis kliendipoolelt vaadatuna, st leitakse aeg Teie turvaserveri poolt infosüsteemile / lõppkasutajale tagastatud vastuse hetke ning Teie infosüsteemi / lõppkasutaja poolt tehtud päringu hetk vahena (Client ResponseOutTs - Client RequestInTs). +### Mis on kestus, kuidas seda arvutatakse? + +Kestus [\[EKSS\] "Eesti keele seletav sõnaraamat"](http://www.eki.ee/dict/ekss/index.cgi?Q=kestus) põhjal: "millegi ajaline kestmine; selle ajaline pikkus, vältus". + +Päringute kestused fikseeritakse ja kajastatakse raportis kliendi poolelt vaadatuna, st leitakse aeg turvaserveri poolt infosüsteemile / lõppkasutajale tagastatud vastuse hetke ning infosüsteemi / lõppkasutaja poolt tehtud päringu hetke vahena (Client ResponseOutTs - Client RequestInTs). Kestus on esitatud millisekundites. Juhul kui andmeid Teie turvaserveris pole / ei saa, siis ei saa me neid ka raportis kajastada (on kajastatud kui `None`) @@ -91,6 +112,14 @@ X-tee päringu kestus teenusepakkuja turvaserveri vaates arvutatakse X-tee teenu producerDurationProducerView = Producer responseOutTs (6) - Producer requestInTs (3) ``` +### Meie raport ei näita päringute kestusi! Miks? + +Raportite koostamise aluseks on X-tee keskusele (RIA) kättesaadavad andmed liikmete X-tee turvaserveritest. Juhul kui ühel või teisel põhjusel ei ole Teie turvaserver kättesaadav, siis koostatakse Teie raporti andmed Teie andmevahetuspartnerite X-tee turvaserveritest pärineva põhjal. + +Kui andmeid Teie turvaserveris pole / ei saa, siis ei saa me kestusi ka raportis kajastada (on kajastatud kui `None`). + +Võimalikud põhjused, miks X-tee keskus ei saa andmed mõne X-tee liikme turvaserveri(te)st on toodud osas [Tehnilist](#tehnilist). + ### Kas saab paremat raportit? **Küsimus: Saadud raport top 5 teenuse kohta jääb mõne süsteemi osas ikka tiba väheseks, pigem võiks terviklik statistikaraport olla. Kas ja kust ja millal saab?** @@ -122,7 +151,7 @@ Läbi RIA keskserveri ei käi mitte mingit X-tee tegelikku liiklust, ei ole kuna ### Mis monitooringu vahendiga üldse tegu on? -Pikem ja põhjalikum kirjeldus koos paigaldusjuhendite ja lähtekoodiga avaldatakse peatselt (2017.a. lõpus) Githubi repositooriumis https://github.com/ria-ee/X-Road-opmonitor +Pikem ja põhjalikum kirjeldus koos paigaldusjuhendite ja lähtekoodiga on avaldatud Githubi repositooriumis https://github.com/ria-ee/X-Road-opmonitor Tööd telliti riigihanke RHR 183990 alusel, teostaja [Tarkvara Tehnoloogia Arenduskeskus OÜ (STACC)](https://www.stacc.ee/). Tõenäoliselt saab ka nendelt abi juhul kui otsustate teha just Teile sobiva süsteemi. @@ -130,10 +159,11 @@ Tõenäoliselt saab ka nendelt abi juhul kui otsustate teha just Teile sobiva s ## Tehnilist Monitooringuandmete saamiseks Teie X-tee v6 turvaserverist palun veenduge, et: -- kasutusel on uusim versioon (ver 6.16, https://x-road.eu/packages/ , arendus- ja testkeskkond https://x-road.eu/.test/packages/) -- tulemüür lubab X-tee päringuid RIA monitooringusüsteemist EE IP 195.80.123.159 (ee-dev IP 195.80.123.169, ee-test IP 195.80.123.164) +- kasutusel on uusim versioon (**6.16**.0-0.20171128173309git05cf71f, https://x-road.eu/packages/, arendus- ja testkeskkond https://x-road.eu/.test/packages/) +- Teie asutuse tulemüür lubab X-tee päringuid RIA monitooringusüsteemist EE IP 195.80.123.159 (ee-dev IP 195.80.123.169, ee-test IP 195.80.123.164), pordid 5500 ja 5577. + - [Issue 196](https://github.com/vrk-kpa/xroad-joint-development/issues/196) parandus [X-Road Operations Monitoring Daemon: Use local SWA-Ref schema (swaref.xsd)](https://github.com/ria-ee/X-Road/pull/70): lubada väljuv liiklus ws-i.org:80 -Tagamaks turvaserveri tarkvara pakettide korrektset paigaldumist, palume v6 turvaserveri uuendusi paigaldada alati käsuga (vaata ka https://github.com/ria-ee/X-Road/blob/develop/doc/Manuals/ig-ss_x-road_v6_security_server_installation_guide.md#45-different-versions-of-xroad--packages-after-successful-upgrade ) +Tagamaks turvaserveri tarkvara pakettide korrektset paigaldumist, palume v6 turvaserveri uuendusi paigaldada alati käsuga (vaata ka https://github.com/ria-ee/X-Road/blob/develop/doc/Manuals/ig-ss_x-road_v6_security_server_installation_guide.md#45-different-versions-of-xroad--packages-after-successful-upgrade) ``` apt-get update @@ -142,3 +172,32 @@ apt-get dist-upgrade Pärast uuendust veenduge, et teenuste monitooringu pakid on paigaldatud. +``` +sudo dpkg -l | egrep "xroad|xtee" | sort +``` + +Kui tarkvara pakk on korralikult paigaldatud, siis on mooduli nimetuse ees `ii`. + +Kui on vigaselt, siis kas `iU` või `iF` vms (vaata ka https://askubuntu.com/questions/18804/what-do-the-various-dpkg-flags-like-ii-rc-mean). + +Vastuses **peavad** sisalduma vaid märksõna `xroad` sisaldavad pakid. + +Vastuses **ei tohi** sisalduda märksõna `xtee` sisaldavaid pakke. + +``` +ii xroad-addon-hwtokens all X-Road AddOn: hwtokens +ii xroad-addon-messagelog all X-Road AddOn: messagelog +ii xroad-addon-metaservices all X-Road AddOn: metaservices +ii xroad-addon-opmonitoring all X-Road AddOn: operations monitoring service +ii xroad-addon-proxymonitor all X-Road AddOn: proxy monitoring metaservice +ii xroad-addon-wsdlvalidator all X-Road AddOn: wsdlvalidator +ii xroad-common amd64 X-Road shared components +ii xroad-jetty9 all Jetty9 for X-Road purposes +ii xroad-monitor all X-Road monitoring service +ii xroad-opmonitor all X-Road operations monitoring daemon +ii xroad-proxy all X-Road security server +ii xroad-securityserver all X-Road security server +``` + +X-tee turvaserverite administraatorite korduma kippuvad küsimused (KKK) ja vastused neile - https://moodle.ria.ee/mod/page/view.php?id=419 +