Omnigraph
Graph engine for context assembly. Object-storage native. Agents work with graph data the way engineers work with code: branched, typed, reviewed, merged, audited, and governed.
Explore ocean depth profiles and timeseries on a map
Translation pending
AI summary · website content
DataPython · VueGitHub @cioos-sioocOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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).