尚未检测到更新。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).