| .forgejo/workflows | ||
| .github/workflows | ||
| kubernetes | ||
| src | ||
| tests | ||
| .gitignore | ||
| Dockerfile | ||
| init.sh | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
| setup.py | ||
YR Weather Forecast
Aplikace pro stahování a ukládání předpovědí počasí z norského meteorologického institutu yr.no.
Popis
Tato aplikace pravidelně stahuje hodinové předpovědi počasí pro nakonfigurované lokality z API yr.no a ukládá je do PostgreSQL databáze. Aplikace je navržena pro běh jako Kubernetes cronjob v pravidelných intervalech (každých 6 hodin).
Pro každou lokalitu aplikace stahuje následující meteorologické údaje:
- Tlak vzduchu
- Teplota vzduchu
- Pravděpodobnost srážek
- Intenzita srážek
- Směr větru
- Rychlost větru
- Nárazy větru
- Relativní vlhkost
- Rosný bod
- Procenta (poměr) oblačnosti
- Celkový charakter počasí (slunečno, polojasno, oblačno, ...)
Data jsou uložena v databázi tak, aby bylo možné:
- Vyhodnocovat změny předpovědí v čase (trendy předpovědí)
- Porovnávat odchylky a trendy odchylek předpovědi v určitý čas se skutečnými naměřenými klimatickými parametry
Databázové schéma
Aplikace používá následující tabulky:
locations- Seznam lokalitforecast_runs- Seznam běhů stahování předpovědí (každý běh má jedinečné ID)weather_forecasts- Samotné předpovědi počasí
Sloupce forecast_date a forecast_hour byly zvoleny pro optimalizaci vyhledávání. Tento přístup umožňuje rychlé dotazování na předpovědi pro konkrétní datum nebo konkrétní hodinu dne. Zvyšuje to efektivitu dotazů typu "všechny předpovědi pro konkrétní lokalitu v konkrétní den" nebo "předpovědi pro konkrétní hodinu napříč lokalitami". Indexování podle těchto sloupců je výrazně efektivnější než dotazování na časové rozmezí.
Technologie
- Python 3.10+
- SQLAlchemy ORM
- PostgreSQL
- asyncio a aiohttp pro asynchronní zpracování
- pytest pro testování
- Docker
- Kubernetes
Instalace a spuštění
Lokální spuštění
-
Naklonujte repozitář:
git clone https://github.com/yourusername/yr-weather-forecast.git cd yr-weather-forecast -
Vytvořte a aktivujte virtuální prostředí:
python -m venv venv source venv/bin/activate # Na Windows: venv\Scripts\activate -
Nainstalujte závislosti:
pip install -r requirements.txt -
Nastavte proměnné prostředí pro připojení k databázi:
export POSTGRES_HOST=localhost:5432 export POSTGRES_DB=weather export POSTGRES_USER=postgres export POSTGRES_PASSWORD=postgres -
Spusťte aplikaci:
python -m src.main
Nasazení do Kubernetes
-
Upravte soubor
kubernetes/secrets.yamls přihlašovacími údaji k databázi. -
Upravte
kubernetes/configmap.yamlpodle potřeby (přidejte další lokality). -
Vytvořte Kubernetes objekty:
kubectl apply -f kubernetes/configmap.yaml kubectl apply -f kubernetes/secrets.yaml kubectl apply -f kubernetes/cronjob.yaml
Konfigurace
Konfigurační soubor config.yaml obsahuje:
user_agent: Identifikátor pro API požadavkylocations: Seznam lokalit pro stažení předpovědí
Příklad konfigurace:
user_agent: "yr-weather-forecast/1.0 (contact@example.com)"
locations:
- code: "prague"
name: "Prague"
latitude: 50.0755
longitude: 14.4378
altitude: 235
note: "Hlavní město České republiky"
- code: "brno"
name: "Brno"
latitude: 49.1951
longitude: 16.6068
altitude: 237
note: "Druhé největší město v České republice"
Testování
Spuštění testů:
pytest
Spuštění testů s pokrytím:
pytest --cov=src/ --cov-report=html