slovensko-digital / harvester.ecosystem

App for pushing data to ekosystem.slovensko.digital
https://ekosystem.slovensko.digital
European Union Public License 1.1
20 stars 5 forks source link

MetaIS zber údajov #100

Closed celuchmarek closed 2 years ago

celuchmarek commented 2 years ago

Máme 3 modely: Project, Isvs, Document. Projekt má niekoľko Isvs a oboje majú svoje dokumenty.

V docu sa spomínali aj ďalšie atribúty, ktoré by sa pridávali už potom manuálne v procese RF. To by som vytvoril osobitný model s referenciou na Project.

raw_data

Bavili sme sa, že v prvom rade chceme uložiť do DB surové dáta, aby sa nám aspoň nejaké info uložili, ak by to pri parsovaní nejako spadlo. Tak som to spravil tak, že v prvom rade sa uloží celý JSON objektu do raw_data a až potom sa ide parsovať. (Toto je možno zbytočné, keďže pri parsovaní nevadí, keď nejaké atribúty chýbajú a iný dôvod na spadnutie mi momentálne nenapadá.)

Názvy atribútov

Čo som pozeral, tak veľká časť datahub databázy má atribúty v slovenčine. Preto aj v tejto MetaIS schéme som vyrobil slovenské atribúty. Ale dá sa to v pohode zmeniť, ak to chceme v EN.

Čo a odkiaľ zbierame

Okometricky odhadujem, že na pozadí MetaIS je nejaká grafová databáza. Všetky objekty totiž majú svoje uuid a v API responsoch vidno popis okolitých orientovaných hrán. Podľa tohto uuid sa dajú získavať info o objektoch, takže si ho tiež ukladáme popri našom PK id.

V sync_all_projects_job.rb dostávame všetky projekty v MetaIS. Z tohto response sa ťahajú všetky atribúty samotného projektu. Ďalej sa podľa jeho uuid získa zoznam súvisiacich Isvs a Dokumentov. Ku každému Isvs sa potom tiež získava zoznam Dokumentov. Dokumenty majú niektoré info už v zozname dokumentov, ale ku každému dokumentu sa ešte ťahá taký jeho detail (tam sú ďalšie metadáta ako filename alebo contentlength).

Atribúty o projektoch, ktoré parsujeme, sú vybrané podľa obidvoch dokumentov ohľadom tohto MetaIS konektora.

Paper_trail - versioning

Link na github

Vybral som to na základe tejto stránky.

Tento gem by som chcel použiť na sledovanie/ukladanie zmien. By default to na vybraných modeloch ukladá info o zmene vždy, keď ruby niečo do tohto modelu zapíše (bavíme sa o konkrétnej inštancii, napr. jeden update na konkrétny projekt).

V sledovaných modeloch (Project, Document, Isvs) to v databáza v tabuľke nič nespraví. Pridá sa do databázy v public nová tabuľka versions, kde jeden záznam je jedna zmena jedného objektu. Ukladá sa vždy celý objekt v moment pred zmenou (čo môže byť nevýhoda, že zaberie zbytočné miesto) a tiež zmeny - zoznam atribútov s hodnotami pred a po.

V ruby sa potom cez objekt.versions alebo podobne dá pristupovať k starším verziám, zmenám, atď.

Z tabuľky versions potom vieme aj ľahko zistiť, čo sa zmenilo za posledný čas.

Ako updatovať

Ja si predstavujem, že budeme zakaždým (raz denne) spúšťať zber všetkých projektov z MetaIS (asi 800 ich je teraz) a vždy sa to rovnakým spôsobom sparsuje. Ak sa nič nezmenilo, nič sa nezmení ani v databáze. Akurát takto by sme nezistili, ak by nejaký projekt z MetaIS zmizol, ale nemyslím si, že toto je reálna možnosť.

Tiež by sme týmto spôsobom nezistili, ak by nejakému objektu zmizli súvisiace objekty - zisťovali by sa zmeny iba u tých, ktoré na MetaIS existujú. Toto by sa ale dalo ošetriť tak, že ku každému projektu si uložíme aj raw celý zoznam dokumentov a isvs.

Číselníky

Tie bude treba tiež dotiahnuť. Pozeral som na číselníky v Itms, ale moc som tomu ešte nerozumel, čo sa tam čarovalo.


structure.sql

V tomto súbore mi pribudlo strašne veľa riadkov. Možno to bude tým, že som tú DB pôvodne vytvoril samotným datahubom a že v harvesteri nebola celá štruktúra. Zrejme sme tu schválne mali iba štruktúru použitých modelov v harveteri. Hm.

Testy

Zdanlivo nesúvisiace 3 testy z Itms failujú. To sa ešte vyrieši aj s nejakými testami tohto MetaIS zberača.

celuchmarek commented 2 years ago

@jsuchal , tuto je draft. Treba ešte minimálne doparsovať aj dokumenty a isvs (ak je to v projektoch ok), dotiahnuť čísleníky a doplniť tú tabuľku s RF údajmi k projektu.

jsuchal commented 2 years ago

@celuchmarek až to bude tak to prehodnotiť z draft na ozajstny pr

celuchmarek commented 2 years ago

@jsuchal pridal som tie ciselniky. Ten program ale neni moc číselník, je to program, ktorý vie mať viac rôznych atribútov niekedy. A teoreticky sa tam vedia meniť veci. Ale myslím si, že to nie je niečo tak, k čomu by sme chceli mať staršie verzie.

A ešte budem dorábať testy.

celuchmarek commented 2 years ago

Dorobil som testy

celuchmarek commented 2 years ago

@jsuchal ping