• Nebyly nalezeny žádné výsledky

Pohled na implementovaný Proces od získání dat po jejich analýzu popsaný

5.1 Příprava prostředí

Prvním krokem v procesu je příprava prostředí. Jedná se o činnost, kterou vykonává uživatel. K tomu, aby mohl prostředí připravit, je třeba splnit nutné podmínky. První podmínkou je nainstalovaný software Docker na hostitelském zařízení, kde bude systém provozován. Další podmínkou je mít stažené zdrojové soubory systému. Zdrojové soubory

jsou dostupné ve webovém nástroji pro správu verzí softwaru Github na adrese https://github.com/zdenda28/Stahovani_smluv nebo v katalogu knihovny Vysoké školy ekonomické v Praze v přílohách této práce.

Poté co jsou splněny výše uvedené podmínky, lze prostředí jednoduše připravit užitím Docker nástroje Compose, který je popsán níže. Příprava prostředí se skládá z těchto kroků:

1. Uživatel spustí příkazovou řádku operačního systému na hostitelském zařízení.

Typicky CMD či PowerShell na systémech Windows nebo Terminal na systémech Linux a MacOS.

2. V příkazové řádce se přemístí do adresářové struktury, kde se nachází stažené zdrojové soubory, tedy do složky se souborem docker-compose.yml.

3. Nakonec uživatel připraví prostředí spuštěním příkazu docker-compose up.

5.1.1 Docker Compose

Compose je nástroj určený pro konfiguraci a spouštění více kontejnerových aplikací. Je tedy vhodným nástrojem ve zde implementovaném řešení, jelikož výsledný systém sestává ze čtyř kontejnerů. Vstupem pro Compose je soubor docker-compose.yml nazývaný Compose file, což je soubor ve formátu YAML, kde jsou definovány aplikační služby. (Docker Inc. 2021b) V případě této práce byl definován Compose file obsahující konfiguraci služeb MySQL, Elasticsearch, Kibana a Python odpovídající návrhu technologické vrstvy z kapitoly Architektura. Mimo služeb je zde obsažena i definice svazků, kam lokálně ukládají data služby MySQL a Elasticsearch. Na ukázce zdrojového kódu níže lze vidět část souboru Compose file, která definuje službu MySQL.

Výpis 1: Definice služby MySQL v souboru Compose file (zdroj: autor) services:

- ./docker/mysql/db.sql:/docker-entrypoint-initdb.d/db.sql - mysql_data:/var/lib/mysql/

cap_add:

- SYS_NICE logging:

driver: none

Definice obsahuje parametr image, který službu realizuje, dále port, na kterém je služba vystavena okolí a řadu dalších konfigurací. Důležitým prvkem je SQL script, který vytváří tabulku dodavatelů. Script viz zdrojový kód níže je umístěn do složky docker-entrypoint-initdb.d, která zajistí, že v případě neexistence tabulky je script spuštěn.

Výpis 2: SQL script pro vytvoření tabulky dodavatelů (zdroj: autor) CREATE TABLE `dodavatele` (

`ico` BIGINT NOT NULL,

`nace` VARCHAR(1000) NOT NULL,

`ict_supplier` BOOLEAN NOT NULL COMMENT '1 = dodavatel ITC', PRIMARY KEY (`ico`)

) ENGINE=InnoDB;

Služby Elasticsearch a Kibana jsou definovány obdobným způsobem jako MySQL dle oficiální dokumentace. Definice Python služby má však dvě základní odlišnosti:

a) Konfigurace služby obsahuje atribut profiles: - donotstart. Tedy po spuštění příkazu docker-compose up není image spolu se zdrojovými soubory nasazena a spuštěna. Důvodem je, že uživatel nemusí nutně vždy potřebovat využít služby Python. V hlavním procesu viz Obrázek 17 výše je možné vidět, že po přípravě prostředí lze rovnou vykonat činnost Zpracování vytěžených dat. To platí pro případy, kdy jsou již všechna potřebná data v systému obsažena.

b) Služba Python není přímo realizována prostřednictvím image, ale souborem Dockerfile viz ukázka zdrojového kódu níže. Důvodem je, že kontejner Python musí kromě prostředí obsahovat i soubory se zdrojovými kódy ETL scriptu a python knihovny, které jsou kódem užívány.

Výpis 3: Dockerfile Python služby (zdroj: autor) FROM python:3.9.6

COPY /src .

RUN pip install -r requirements.txt CMD ["python", "./main.py"]

5.2 Spuštění ETL scriptu

Dalším volitelným krokem v procesu je činnost uživatele, kdy spouští ETL script, který de facto slouží ke stahování smluv. Tento krok uživatel zvolí, pokud potřebuje vytěžit nová data. Podmínkami pro spuštění ETL scriptu je připravené prostředí viz podkapitola 5.1 výše a zaregistrovaný uživatelský účet na Hlídači státu, což zajistí přidělení API klíče pro dotazování REST API. Při prvním spuštění je potřeba zároveň vytvořit kontejner. K tomu je připraven následující příkaz:

docker-compose run --name python python

Příkaz vytvoří kontejner s názvem python dle definice služby python uvnitř Compose file a spustí ETL script. K opětovnému spouštění po dokončení běhu scriptu je připraven příkaz, který již pouze spouští vytvořený python kontejner:

docker start -a -i python

Po spuštění python kontejneru jedním z výše uvedených příkazů je spuštěn samotný ETL script. Na jeho počátku, ještě před zahájením činnosti Stahování smluv, ETL script interaguje s uživatelem a vyžádá si potřebné parametry, které jej konfigurují.

Uživatel jako první parametr v nabídce menu vybírá, zdali chce zpracovat denní či měsíční data, respektive dump z Registru smluv viz kapitola 3.1.1. Poté je vyzván, aby zvolil konkrétní den či měsíc. To učiní zadáním datumu ve formátu YYYY_MM_DD pro konkrétní den či YYYY_MM pro konkrétní měsíc. Posledním parametrem, který uživatel zadává je API klíč přidělený Hlídačem státu. Tato veškerá interakce scriptu a uživatele probíhá v prostředí příkazové řádky, kde jsou spouštěny Docker příkazy.

5.3 Stahování smluv

Stahování smluv viz Obrázek 18 výše je procesem, respektive podprocesem obsaženým ve výše zmíněném Procesu od získání dat po jejich analýzu. Jedná se o nejobsáhlejší část implementace nazývané v této práci jako ETL script naprogramované v jazyce Python, která je zodpovědná za automatizované stahování a indexování smluv. Níže v této kapitole je podproces detailně popsán.