WebarchivCZ / Seeder

Seeder - Czech webarchive curating tool and public site
MIT License
15 stars 2 forks source link

plánování sklizní - generování semínek #518

Closed mariehaskovcova closed 3 years ago

mariehaskovcova commented 4 years ago

při kombinaci "mimosystémových semínek" a "přiřazených zdrojů" zlobí generování seznamu URL adres - nejsou tam všechny. Viz např.: https://webarchiv.cz/seeder/harvests/136/detail (v seznamu jsou pouze mimosystémová semínka, manuálně nadefinovaný zdroj chybí)

Fasand commented 4 years ago

At neotviram novy issue, tak to hodim sem, protoze to tenhle issue vlastne zahrnuje: obecne je ted po vsech moznych zmenach problem s generovanim seminek, je to ukrutne pomale a zrejme jsou tedy i problemy se spravnosti.

Modely v harvests.models

HarvestAbstractModel

Harvest

TopicCollection(HarvestAbstractModel)

Toto je aktualni seznam metod, ktere se pouzivaji ve skliznich na generovani vysledneho seznamu seminek. V abstract modelu se resi custom seeds & sources, tedy mimosystemova seminka a manualne prirazene zdroje. Zaroven se pres nej generuje blacklist a ta funkce se aktualne vola asi 6x, coz je samozrejme vice nez "neoptimální".

Samotna sklizen potom ma spoustu dalsich funkci na vygenerovani konkretnich typů seminek, napr OneShot, ArchiveIt apod., pro ktere je potreba i metoda get_previously_harvested_seeds, ktera proleze vsechny starsi sklizne a z nich vytahne vsechna seminka, aby se pro OneShot a ArchiveIt nemusela znovu sklizet. To je samozrejme hodne pomala operace, pokud v minulosti existuje spousta sklizni, ktere treba jeste nemaji zmrazena seminka, tedy ulozena textove do databaze.

Rychlost/efektivita implementace

Pro zrychleni me napada par reseni: funkce jako get_blacklisted a get_previously_harvested_seeds by se nemusely volat nekolikrat, pokud si sklizen žádá o vsechna seminka, coz by to uz docela vyrazne zrychlilo. Treba prave get_previously_harvested_seeds by se ve spouste pripadech nemusela volat vubec, pokud ve sklizni nejsou zadna OneShot nebo ArchiveIt seminka, coz by ale ted uz taky mela delat a i presto nacteni jednoho custom zdroje a jednoho custom seminka mi na lokale trva nejakych 13 sekund, protoze se pocita i vse ostatni.

Proc to je teda takhle pomale: kdyz jsem funkce psal, pocital jsem s modelem z nejake poloviny #468 kde jsem to pochopil tak, ze pro kazdy typ seminek (OneShot, jednou rocne, ...) bude samostatna URL a k temto URL se bude pristupovat postupne. Pokud tedy chci z dneska jenom custom seminka a zdroje, nactu si /seeder/harvests/2020-06-04/seeds-2020-06-04-VNC.txt a ta mi na lokale bezi nejakych 33ms...

Jak se to tedy bude sklizet?

Z tech poslednich uprav jsem tak pochopil, ze tyto rozdelene URL na jednotlive typy sklizni se vlastne pouzivat nebudou, takze tam zustanou jenom lezet a primarne se bude pouzivat format "sklizeň -> všechna semínka".

Pokud tomu tak tedy bude, tak pridam do generovacich funkci nejakou optional memoizaci, aby se treba blacklisty nacetly jen jednou a potom se posilaly pres parametr funkce a podobne s previously harvested seeds.

Kazdopadne taky projdu na cem to ted nejvic visi i kdyz se sklizi treba jen dve seminka, takze provedu nejake obecne potrebne zrychleni.

K puvodnimu issue:

K produkcnimu Webarchivu nemam pristup, takze to nemuzu moc zkontrolovat (zlobi to treba i nekde na testovacim?), ale na lokale se mi nacitaji jak custom seminka tak zdroje.

Je mozne, ze treba ten custom zdroj nema archivovaci stav (teda je treba v jednani nebo neco takoveho)? Pripadne ze by ta seminka mela nastavene datum sklizeni?

Fasand commented 4 years ago

Update:

Tak hlavni vec, ktera to zpomalovala byla get_oneshot_seeds, protoze tam byla spatna podminka na early exit, tedy vlastne spatna kontrola, jestli sklizen ma nejaka OneShot seminka nebo ne. Na lokale se mi to tim jednim radkem podarilo zrychlit na vsech skliznich (mam jich jenom 18) z 25s na 4s, z cehoz se 1.8s opravdu nacitala OneShot seminka.

get_previously_harvested_seeds

Chtel bych tuhle funkci trochu zrychlit. Aktualne proste bere vsechna seminka vsech sklizni, ktere jsou nastaveny pred datem dane sklizne. To ale znamena i sklizne, ktere byly treba jen naplanovane a nikdy nebyly spustene, nebo ty, ktere selhaly.

Z tech stavů: Planned, Running, Sucess, Success_with_failures, Cancelled, Failed – ktere stavy by to vlastne melo brat? Ja bych rekl ze v podstate jenom "Success", ale mozna i "Success_with_failures"? Nebo i "Running"?

Funkce by mela vratit vsechna již sklizená seminka, aby se u OneShot a ArchiveIt sklizni nesklizely znovu. Nejsem si tedy jenom jisty, co vlastne znamena "Success_with_failures", jestli to vubec pouzivate.

Rychlost

Uz kdyz se sklizne omezi pouze na Running, Success a Success_with_failures, tak se mi get_seeds() na vsechny sklizne zrychli z nejakych 3s na 0.5s. Samotne get_previously_harvested_seeds na vsechny sklizne z 7.7s na 0.06s.

Porad si kazdopadne nejsem jisty, jestli by se mely zahrnovat vsechny tyto sklizne a nebrat to treba jenom z tech "Success". To zalezi, jak se presne ty stavy v praxi pouzivaji.

Fasand commented 4 years ago

Po zrychleni get_previously_harvested_seeds a get_oneshot_seeds jsem to i upravil, aby se pri volani get_seeds blacklist generoval pouze jednou a previously_harvested take (treba kdyz je ArchiveIt a OneShot sklizen) a s tim se to zrychlilo z puvodnich cca 25s na hezkych 0.5s :) Spolu s dalsimi malimi issues to hodim na test a snad to uz teda pojede...

mariehaskovcova commented 4 years ago

skvělý, na testu - https://app.webarchiv.cz/seeder se semínka už načítají rychle!

příklad kombinace mimosystémových semínek a manuálně nadefinovaných zdrojů na testu, je třeba tady: https://app.webarchiv.cz/seeder/harvests/93/detail. Ale máš pravdu, stav zdroje v tom nejspíš hraje roli. Mimosystémová semínka jsou ok a z manuálně nadefinovaných zdrojů se nejspíš zobrazují jen ty, které mají stav Archivován + příp. Archivován bez smlouvy, což vlastně dává smysl

Fasand commented 4 years ago

Prosel jsem tu sklizen a vesmes to vypada, ze to je fakt v pohode, ale tezko rict, protoze je par mesicu stara. Mimosystemova seminka se nacitaji v pohode a ze zdroju se tam nacte Techmania a Matějka.

Ty ostatni zdroje maji vsechny mimo-archivni stav az na Agosto Foundation, ktera ma archivovany stav az od 19. 4. 2020 (https://app.webarchiv.cz/seeder/source/history/10525) Predtim ocividne byla v hodnoceni, tedy se spravne do sklizne nepropsala kdyz se sklizen poustela a seminka se zmrazila.

Kdybys na neco podobneho zase narazila, tak dej vedet. Klidne je mozne, ze tam je nejaky bug, ale minimalne podle kodu a te sklizne to nevypada, tak to zatim uzavru.

mariehaskovcova commented 4 years ago

ještě jedna drobnost ke generování semínek - na ostrém Seederu se ukazuje rovnou seznam semínek, v testovací verzi se nahoře objeví název sklizně (# pravidelná měsíční sklizeň - říjen, https://app.webarchiv.cz/seeder/harvests/99/urls) a pak teprve seznam semínek. Vadí to? Možná by to mohlo vadit operátorovi při zadávání sklizně nebo později při automatickém plánování Screenshot_seeds

mariehaskovcova commented 4 years ago

tak pardon, toto je nakonec po konzultaci s @horakjirinkp ok, nicméně na přání @JanMeritus nemáme zatím toto issue uzavírat - doplní prý další pole, co to má vracet, díky

Fasand commented 4 years ago

@JanMeritus Ta dalsi pole bych asi pripsal do #402, tam uz jsou nejake 2-3 roky stare navrhy, takze se to kdysi v minulosti resilo. Issue ale muzeme zatim klidne nechat otevrene.

mariehaskovcova commented 4 years ago

po dohodě uzavírám více do #402

mariehaskovcova commented 3 years ago

Mám dotaz k problému, který se řešil v tomto issue - do sklizně se načtou “mimosystémová semínka” a “manuálně nadefinované zdroje”, ale jen ty, která mají archivační stav, což je v pořádku u semínek, která se sklízí podle frekvence.

Může se ale stát, že chceme sklidit semínko, které archivační stav nemá - zdroj byl třeba odmítnutý pro pravidelné sklízení, ale můžeme ho chtít jednorázově v rámci tematické kolekce

Bylo by možné to řešit takto?:

JanMeritus commented 3 years ago

zde jen tolik, ze pak by do budoucna i seminka dle frekvence meli byt kolekci, ktera ma ale parametr s vyplnenou frekvenci

seminka mimo stav archived by melo byt mozne taky pridavat, ale meli by v tom pripade frekvenci oneshot

JanMeritus commented 3 years ago

jde o oneshots, napr v tematicky kolekci, jenom u serial je podminka - archived

mariehaskovcova commented 3 years ago

archivační stavy musí mít pouze semínka v rámci sklizně serials (+ Archive-it)

mariehaskovcova commented 3 years ago

podle dnešní dohody - do tem. kolekcí lze vložit semínka s jakýmikoli stavy v Seederu (zrušit podmínku public) + mimosystémová

Fasand commented 3 years ago

Vyřešeno v https://github.com/WebarchivCZ/Seeder/commit/f93c10acb39c50254d9eadbc2b6ffe29e8fe0dcc. Aktuálně custom semínka se berou prostě tak jak jsou, custom zdroje se už také berou bez ohledu na archivační stav. OneShot kolekce potom obsahuje ((oneshot - previously_harvested) + custom_seeds) - blacklisted, tedy semínka s nulovou frekvencí (mají archivační stav) se vyfiltrují o ty, co už byly sklizeny, k tomu se přidají custom semínka+zdroje a výsledek se vždy vyfiltruje o blacklistovaná semínka.