Selaa lähdekoodia

Juhendid: Repo ja töövoog + Deploy + Veebirakendus — avalik/kaistud mudel, token, logimine, uued atribuudid

ardo 2 viikkoa sitten
vanhempi
sitoutus
ed37a2c50e

+ 10 - 2
Doktoritöö/Liiklussageduse kaudne hindamine/04_Tehniline/Deploy ja infrastruktuur.md

@@ -12,12 +12,16 @@
 - Docker + docker-compose (vana v1)
 - Projekt: `/data/docker/liiklusatlas`
 - Port: 8074 (`main_ai_network`)
+- **Token:** `.env` failis (`ATLAS_ACCESS_TOKEN=<kood>`), `.env` on `.gitignore`-is
 - Uuendus:
   ```bash
   ssh ohmu
   cd /data/docker/liiklusatlas && git pull origin main
-  docker-compose build && docker-compose up -d --force-recreate
+  docker-compose build && docker-compose up -d --force-recreate   # koodimuutus
+  # andmeuuendus (ilma koodimuutuseta):
+  # git pull && docker restart liiklusatlas
   ```
+- Logid: `tail -f /data/docker/liiklusatlas/data/logs/access.log`
 - Muud teenused: n8n (5678), Qdrant (6333), PostgreSQL/PostGIS (5432), Ollama, open-webui, jupyter, searxng
 
 ## hetzner (prod)
@@ -25,12 +29,16 @@
 - Docker Swarm + traefik (Let's Encrypt, DNS-challenge DigitalOcean)
 - Projekt: `~/swarm/docker-compose/containers/other/liiklusatlas`
 - URL: `https://atlas.see1.ee`
+- **Token:** tuleb **eksportida shellis** enne stack deploy — muidu `stack-prod.yml`
+  saab tühja väärtuse ja kõik kaitstud vallad on lukus isegi koodiga.
 - Uuendus:
   ```bash
   ssh hetzner
   cd ~/swarm/docker-compose/containers/other/liiklusatlas && git pull origin main
   docker build -t liiklusatlas:latest .
-  docker service update --force --image liiklusatlas:latest atlas_liiklusatlas
+  export ATLAS_ACCESS_TOKEN=<kood>
+  docker stack deploy --compose-file=stack-prod.yml atlas
+  docker service update --force atlas_liiklusatlas
   ```
 - Traefik: `traefik-network` (overlay), router `atlas-https`, certresolver `mychallenge`
 - **Tähelepanu:** traefik kuulab ainult IPv4 (`0.0.0.0:443`). IPv6 hetzneril on katki — **AAAA kirje peab olema eemaldatud** (asub erineva DO konto all, kustuta käsitsi).

+ 28 - 10
Doktoritöö/Liiklussageduse kaudne hindamine/04_Tehniline/Repo ja töövoog.md

@@ -3,13 +3,21 @@
 ## Projektid (Git: gogs.odamus.com, kasutaja `ardo`)
 
 ### `ardo/liiklusatlas` (aktive, veebirakendus + pipeline)
-- `pipeline/` — analüüsiahel (4 skripti + run_municipality.py)
+- `pipeline/` — analüüsiahel:
+  - `run_municipality.py` — orkestreerija ühele vallale
+  - `ads_buildings.py`, `ads_ky.py` — ADS-i hooned + katastriüksused (Maa- ja Ruumiamet)
+  - `building_population.py` — hoonepõhine rahvastik + kalibreerimine + ADS KÜ-omistamine (`ads_ky` aadress-kinnistu link)
+  - `gravity_exit_analysis.py` — gravitatsioonijaotus, haavatavus, kriitilised lõigud
+  - `export_qgis.py` — gpkg eksport (omand, kasutus, reisitee, tupikud, väljapääsud)
+  - `teeregister_omand.py`, `teeregister_leping.py`, `kataster_laadimine.py` — omand/kasutus allikad
+  - `offer.py` — hinnapakkumise PDF
 - `preprocess_web.py` — gpkg → GeoJSON kihid + raporti materjalid
-- `municipalities.py` — 79 KOV-i register
-- `server.py` — FastAPI (`/api/*`)
-- `report.py` — PDF-raport (reportlab)
-- `web/index.html` — MapLibre GL kaart
-- `data/` — genereeritud GeoJSON + raportifailid (commititud)
+- `municipalities.py` — 79 KOV-i register (status + **public** märge)
+- `server.py` — FastAPI + **demo-koodi kaitse** (`ATLAS_ACCESS_TOKEN`) + **logimine**
+- `report.py` — PDF-raport (kokkuvõte, kriitilised lõigud, liikluskoormuse tabel)
+- `web/index.html` — MapLibre kaart (demo-koodi sisend, kaitstud vallad lukus)
+- `web/tutvustus.html` — referentsileht (avalik Valga, teised kaitstud 🔒)
+- `data/` — genereeritud GeoJSON + raportifailid (commititud), `data/logs/access.log`
 
 ### `ardo/Obsidian` — doktoritöö märkmed (koopiad)
 
@@ -21,6 +29,7 @@
 Project/
   liiklussagedus/            # analüüsi algandmed + tulemused (ei ole git-is)
     results/                 # {prefix}_*.csv, {prefix}_*.png, {prefix}_qgis.gpkg
+    results/validation/      # kataster, ADS, KÜ, teeregister gpkg-d
     cache/                   # OSMnx vahemälu
     data/                    # WorldPop raster
   liiklusatlas/              # GIT: veebirakendus + pipeline
@@ -29,6 +38,7 @@ Project/
 ## Analüüsitöövoog (uue valla lisamine)
 
 ```bash
+# 0. Vajadusel: ADS hooned + KÜ + kataster + teeregister (automaatselt, kui puuduvad)
 # 1. Täisanalüüs (võtab 5–15 min olenevalt vallast)
 PYTHONPATH=. .venv/bin/python3 liiklusatlas/pipeline/run_municipality.py <vall_id>
 
@@ -38,14 +48,22 @@ PYTHONPATH=. .venv/bin/python3 liiklusatlas/preprocess_web.py <vall_id>
 # 3. Commit + push
 cd liiklusatlas && git add -A && git commit -m "..." && git push
 
-# 4. Redeploy
-ssh ohmu     # cd /data/docker/liiklusatlas && git pull && docker-compose up -d --force-recreate
-ssh hetzner  # cd ~/swarm/.../liiklusatlas && git pull && docker build -t liiklusatlas:latest . && docker service update --force atlas_liiklusatlas
+# 4. Redeploy (koodimuutus → image build; andmed → pull + restart)
+ssh ohmu     # cd /data/docker/liiklusatlas && git pull && docker-compose build && docker-compose up -d --force-recreate
+ssh hetzner  # cd ~/swarm/.../liiklusatlas && git pull && docker build -t liiklusatlas:latest . && export ATLAS_ACCESS_TOKEN=<kood> && docker stack deploy --compose-file=stack-prod.yml atlas && docker service update --force atlas_liiklusatlas
 ```
 
+## Avalik/kaistud mudel + token + logimine
+
+- `municipalities.py`: **Valga `public: True`**, teised `False`. Manifest kannab `access: public|protected`.
+- `server.py`: kaitstud valla `/api/maps/{vald}`, `/api/maps/{vald}/{layer}`, `/api/report.pdf`
+  nõuavad `ATLAS_ACCESS_TOKEN` (`?token=` või `X-Access-Token`), muidu 403.
+- `data/logs/access.log` — iga andmepäring (aeg, IP, vald, kiht, staatus, UA, kas koodiga).
+- Token **`.env`-is (ohmu)** ja **eksporditud shellis (hetzner)** — `.env` on `.gitignore`-is (ei leki).
+
 ## Valla-id → analüüsiparameetrid
 
-`pipeline/run_municipality.py` KNOWN-tabelis: `vall_id → (place, prefix, area_km2)`.
+`pipeline/run_municipality.py` KNOWN-tabelis: `vall_id → (place, prefix, area_km2, official_pop)`.
 Teadmata vallad: proovib `teedellm.config.MUNICIPALITIES` registrit.
 
 ## Väljundfailide konventsioon

+ 39 - 9
Doktoritöö/Liiklussageduse kaudne hindamine/04_Tehniline/Veebirakendus.md

@@ -13,40 +13,70 @@ Interaktiivne kaardirakendus, mis kuvab analüüsi tulemusi omavalitsustele (KOV
 ## Funktsionaalsus
 
 - Valla valija (dropdown, 79 KOV-i; valmis vallad aktiivsed, teised "tulekul")
-- Kihid sisse/välja: riigiteed, kohalikud teed, väljapääsupunktid, teede rühmad
+- **Avalik/kaistud:** Valga avalik; Otepää/Võru/Tõrva `(kaitstud)`, lukus — **Demo-kood** sidebar-is avab need (token localStorage-s)
+- Kihid sisse/välja: riigiteed, kohalikud teed, liiklus (AKÖL/kaudne), väljapääsupunktid, rühmad, katastriüksused, teede omandivärv
 - Hüpikaknad (popup) kihi atribuutidega
 - Legend ja KOV-sõbralikud selgitused
 - PDF-raport allalaadimine valitud vallale
+- Referentsileht `/tutvustus` (4 demo valda, Valga avalik, teised 🔒)
 
 ## API
 
 | Endpoint | Kirjeldus |
 |----------|-----------|
-| `GET /api/municipalities` | 79 KOV-i + staatus + kihid |
+| `GET /` | kaart |
+| `GET /tutvustus` | referentsileht |
+| `GET /api/municipalities` | 79 KOV-i + staatus + access (public/protected) + kihid |
 | `GET /api/maps/{vald}` | valla kihtide nimekiri |
-| `GET /api/maps/{vald}/{layer}` | GeoJSON kiht |
-| `GET /api/report.pdf?vald={vald}` | PDF-raport |
+| `GET /api/maps/{vald}/{layer}` | GeoJSON kiht (kaitstud vald → vajab koodi) |
+| `GET /api/report.pdf?vald={vald}` | PDF-raport (kaitstud vald → vajab koodi) |
+| `GET /api/offer.pdf` | hinnapakkumine |
 | `GET /health` | tervisekontroll |
 
+**Demo-kood:** `?token=` või `X-Access-Token` päis. Keskkonnamuutuja `ATLAS_ACCESS_TOKEN`.
+
 ## Kaardikihid (GeoJSON)
 
 - `boundary` — valla piir
-- `major_roads` — riigiteed (värvitud klassi järgi)
-- `local_roads` — kohalikud teed (värvitud impedantsi järgi)
+- `major_roads` — riigiteed (värvitud klassi järgi + liikluse AKÖL overlay)
+- `local_roads` — kohalikud teed (ühtne klassivärv + liikluse overlay)
 - `exit_points` — väljapääsupunktid (suurus = trips, värv = haavatavus)
 - `local_groups` — kohalike teede rühmad
+- `katastriuksused` — katastriüksused (omandipõhine värv)
+
+## local_roads atribuudid
+
+| Atribuut | Tähendus |
+|----------|----------|
+| `group` | kohalike teede rühm (VAL_/OTE_/TOR_/VOR_) |
+| `exit` | parim väljapääs (gravity) |
+| `trips`, `trips_ads`, `trips_per_km` | päeva sõidud (kaudne + ADS) |
+| `omand`, `omand_kat` | omand (teeregister + kataster) |
+| `kasutus` | teekasutusleping (avalik/metsatee/mitteavalik) |
+| `is_deadend` | tupiktee (otspunkti aste = 1) |
+| `is_exit` | väljapääsu lõik (otspunkt riigiteel) |
+| `trip_length_m` | reisi pikkus väljapääsuni (BFS-puu ahel) |
+| `trip_kasutus` | kas reis läbib metsateed/mitteavalikku |
+| `is_agreement` | lepingulõike läbiv reis |
 
 ## Kihistuste loogika
 
-- **Kohalikud teed:** `line-color` = interpolatsioon `impedance` (0→hele, 40→tume)
-- **Väljapääsupunktid:** `circle-radius` = interpolatsioon `trips`; `circle-color` = detour_m (0 → hall, >0 → punane)
+- **Kohalikud teed:** ühtne klassivärv `#7c8ea0`; liiklus overlay (kaudne trips)
+- **Riigiteed:** klassi värv; liiklus overlay (loenduse AKÖL)
+- **Väljapääsupunktid:** radius = trips; värv = haavatav (detour > 0 või isoleeritud + elanikud)
+- **Omandivärv:** eratee punane / riigitee sinine / munitsipaal roheline (katastri omand, fallback teeregister)
 
 ## Arendus
 
 ```bash
-PYTHONPATH=. .venv/bin/uvicorn liiklusatlas.server:app --port 8074 --reload
+PYTHONPATH=. ATLAS_ACCESS_TOKEN=<kood> .venv/bin/uvicorn liiklusatlas.server:app --port 8074 --reload
 ```
 
+## Logimine
+
+Iga `/api/maps/{vald}/{layer}` ja `/api/report.pdf` päring logitakse `data/logs/access.log`
+(JSONL): aeg, IP (X-Forwarded-For), vald, kiht, staatus, UA, kas koodiga. Tokenit ei logita.
+
 ## Seos
 
 [[Liiklussageduse kaudne hindamine/04_Tehniline/Repo ja töövoog]]