尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗The OA service provides a comprehensive pipeline for environmental data processing, storage, and visualization. It is composed of four primary integrated systems, with scheduled jobs orchestrated by Prefect.
The frontend is a high-performance dashboard that visualizes spatial and temporal data simultaneously, with focus on speed and performance.
process service onto the map.The API acts as the bridge between ClickHouse and the frontend, providing on-demand data extraction. It never reads NetCDF: all data comes from ClickHouse.
extractTimeseries.py: Pulls historical data for a specific coordinate (lat/lon) across time for ECharts graphs.extract_profile.py: Generates vertical "depth profiles," showing variable changes from surface to seabed.extractSensorTimeseries.py: Serves sensor observations from ClickHouse (ingested hourly from ERDDAP and ONC by the sensors service).variables.py to serve unit definitions, display names, and color scales, ensuring consistency across all services.The "engine" that transforms raw external data into precisely-tiled, color-corrected images and derived values.
SSC/downloader.py for ERDDAP downloads with automatic backfilling and compression.nc2tile.py to convert NetCDF grids into Mapbox-compatible tiles.SSC/imaging.py renders tiles with PST/UTC timezone handling and consistent color scaling.process/SSC/compute.py.calc_carbon_grid_shm_memmap_year_aware.py offers shared-memory (shm_memmap) high-concurrency computation for ad-hoc, DB-free runs.SalishSeaCast_daily) and served by the API's /extract_climateTimeseries; the Analysis Builder derives trends, thresholds, and anomalies client-side.grid_SSC) and sensor locations are stored as ClickHouse tables, queried with geoDistance() for nearest-neighbor lookups.SalishSeaCast_status tracks the processing queue, letting workers coordinate downloading, computing, and tiling tasks.downloading, computing, imaging).Scheduled jobs run as Prefect flows reporting to the shared CIOOS Pacific server at https://pipelines.cioospacific.ca. Prefect is production-only: dev has no Prefect server or schedulers, so run the pipeline with the CLI (python -m SSC.cli ...).
| Job | Flow code | Container (compose file) | Deployment | Schedule |
|---|---|---|---|---|
| SalishSeaCast model pipeline | process/SSC/flows.py | scheduler (docker-compose.prod.process.yml, tools profile) | OceanECO-SSC | RUN_CRON, every 3 hours |
| ERDDAP sensor ingestion | sensors/flows.py | sensors-scheduler (docker-compose.prod.api.yml) | OceanECO-sensors-ERDDAP | ERDDAP_CRON, hourly on the hour |
| ONC sensor ingestion | sensors/flows.py | sensors-scheduler (docker-compose.prod.api.yml) | OceanECO-sensors-ONC | ONC_CRON, hourly at half past |
serve() and runs them in-process, so the shared server only schedules and records runs. All deployments carry the oceaneco tag because the server is shared with other apps.PREFECT_API_URL (https://pipelines.cioospacific.ca/api) and take the server's basic auth from PREFECT_AUTH_STRING, so always pass --env-file.RUN_SCHEDULE_PAUSED / SENSORS_SCHEDULE_PAUSED are re-applied on every container start, so a pause set in the UI lasts only until the next restart. Stop the container for a pause that holds.prefect== pin in process/pyproject.toml and sensors/pyproject.toml at or below the server's version.Scheduled runs only queue dates newer than the latest date in SalishSeaCast_status, so a day that was skipped in the past is never picked up on its own. Process it explicitly on the process machine (or use Run → custom in the Prefect UI with date set, which won't overlap a scheduled run):
C="docker compose -f docker-compose.prod.process.yml --env-file .env.process.remote exec scheduler uv run python -m SSC.cli"
$C status --date YYYY-MM-DD # where it stopped (no rows = never queued)
$C run --date YYYY-MM-DD # seeds missing rows, then resumes from the date's current stage through sync
Don't start it while a scheduled run is in progress. Add --force only if rows are stuck at failed_* after exhausting retries or the date must be redone from scratch; if the API already holds partial data for that date, clear it first (see docs/clickhouse-ops.md).
Details: process/README.md (SSC pipeline) and sensors/README.md (sensor ingestion).