Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tacoberu/sample-laravel-scheduling
Sample Scheduler implementation
https://github.com/tacoberu/sample-laravel-scheduling
Last synced: 15 days ago
JSON representation
Sample Scheduler implementation
- Host: GitHub
- URL: https://github.com/tacoberu/sample-laravel-scheduling
- Owner: tacoberu
- Created: 2023-11-30T03:42:07.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2023-12-10T04:09:35.000Z (about 1 year ago)
- Last Synced: 2024-11-07T05:23:53.337Z (2 months ago)
- Language: PHP
- Size: 102 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Sample Scheduler implementation
===============================Popis problému:
Cílem je mít systém, co nejméně vázaný na konkrétní implementace a knihovny třetích stran. Proto většinu věcí řešíme přes proxy/adaptér.
Nyní chceme do systému integrovat Scheduler(plánovač tasku). Vyhlídli jsme dva https://laravel.com/docs/9.x/scheduling(ten je součástí framerowku) a
alternativní https://github.com/crunzphp/crunz.Aktuálně použijeme Laravel, ale nechceme se na něho vázat a mít případně otevřenou cestu k přepnutí na crunz. V rámci implementace
musíme vyřešit i problém, kdy Laravel Mutex implementace je nespolehlivá a chceme implementovat vlastní mutext.Cíle:
Cílem je navrhnout interface jednotlivých tříd pro Scheduler a Mutex, tak aby implementace Laravel tříd byla kdykoli vyměnitelná a nevázala se na Laravel.V rámci návrhu je nutné jít do detailu, včetně vstupních parametrů a jejich typů. Aktuální implementace by měla být schopna plánovat a spouštět crony/joby v daný čas.
Součástí návrhu je i návrh konkrétní implementace pro Laravel Scheduler a Mutext.
## Řešení:
Základní premisy:
1. Máme nějaké rutiny, které chceme v určitých intervalech spouštět. – Jak budou tyto rutiny realizovány? Jak budou plánovány? Jak bude řešený výstup?
2. Rutiny se podle nějakého kalendáře plánují.
3. Chceme v maximální míře použít existující řešení, ne si psát něco vlastního.
4. Pokud jsem něco nepřehlédl, tak crunz umí pouze spouštět podprocess. Což vlastně omezuje i prvotně zvažované řešení Laravel Sheduling.Co tedy vlastně chceme zobecňovat?
- Rutiny budou definovány jako subprocesy. Je možné použít libovolný třeba script, ale očekávám, že nejčastěji budou používány commandy artisanu - což je ale také script/suprocess. To nám umožní použít pro vlastní scheduling libovolný ze zvažovaných systémů.
- Prohlížení existujících tasků můžeme použít původní nástroj (Laravel Sheduling, Crunz), ale chceme ho zapojit do systému, tedy ovládat programově. Zde tedy vytvoříme nějaký adaptér.
- adaptér může wrapovat příkazovou řádku
- nebo může obcházet systém a vytvářet tasky přímoPotřebujeme:
- výpis existujících tasků
- vytvoření nového tasku
- editaci existujícího tasku
- smazání tasku
- spouštění celého schedulinguPoznámka: Připomínám, že se nejedná o vlastní rutiny. Ty jsou definovány jinde. Ale o task, který tuto rutinu bude pouštět a kdy.