Repository navigation
Releases: CieriS/aria-er
Releases · CieriS/aria-er
Release list
v1.2.0
What's Changed
Features
- feat(export): a page at the root of the published site by @CieriS in #70
- chore(release): 1.2.0 by @CieriS in #72
Fixes and maintenance
- fix(ingestor): fetch again a weather response that arrives cut short by @CieriS in #69
- fix(export): count a month as loaded only when its weather is there too by @CieriS in #71
Full Changelog: v1.1.0...v1.2.0
v1.1.0
What's Changed
Features
- feat(export): publish the marts as JSON on GitHub Pages every day by @CieriS in #66
- feat(export): fill the months between the archive and the daily window by @CieriS in #67
- chore(release): 1.1.0 by @CieriS in #68
Fixes and maintenance
- docs(cloud): record that the GCP project of the first run was deleted by @CieriS in #63
- docs(readme): replace the dashboard screenshot that showed a 'Page not found' dialog by @CieriS in #65
Full Changelog: v1.0.0...v1.1.0
v1.0.0
What's Changed
Features
- docs(cloud): record the first run on a real GCP project by @CieriS in #59
- chore(release): 1.0.0 by @CieriS in #61
Fixes and maintenance
- build(deps): bump serde_json from 1.0.151 to 1.0.154 in /ingestor in the rust group by @dependabot[bot] in #55
- build(deps): bump the python group across 2 directories with 4 updates by @dependabot[bot] in #56
- Add a pre-push hook and a secret scan by @CieriS in #57
- fix(completeness): leave out days not loaded for any station by @CieriS in #60
Other
- docs: record that the REST archive is a single load, not yet a feed by @CieriS in #45
- docs(ci): describe the branch protection now in force by @CieriS in #46
- fix(transform): compute the 8-hour ozone windows on every hour by @CieriS in #47
- docs: record that the REST archive caught up on 2026-10-13 by @CieriS in #48
- fix(orchestration): let one run at a time write the raw layer and the warehouse by @CieriS in #52
- docs: say why the ingestor is written in Rust by @CieriS in #53
- docs(readme): show the running stack in a short recording by @CieriS in #54
Full Changelog: v0.9.0...v1.0.0
v0.9.0 — runs locally from a fresh clone
First tagged version. The whole pipeline runs locally from a fresh clone; the cloud target is implemented but has not run on a real Google Cloud project yet, which is what v1.0.0 waits for (milestone v1.0.0).
What it does
- Ingestion (Rust,
aq-ingest): ARPAE air quality measurements, station registries and Open-Meteo weather into partitioned Parquet, idempotent, with a 30-day window reprocessed on every run to pick up revised values. - Models (dbt on DuckDB, portable to BigQuery): staging, intermediate and five marts — exceedances of the legal limits, multi-year trends, traffic against background, PM10 against wind and rain, data completeness — with 107 data tests and a unit test.
- Orchestration (Dagster): daily schedule, backfills by range, asset lineage, freshness and completeness checks.
- Dashboard (Streamlit) on the marts.
- CI: Rust, Python, dbt on fixtures, the BigQuery dialect on an emulator, the Docker images.
Try it
With Docker only:
git clone https://github.com/CieriS/aria-er && cd aria-er
make up # Dagster on http://localhost:3000, dashboard on http://localhost:8501About six minutes after the start the dashboard shows ten years of measurements. Checked on a clean clone on 2026-10-12.
Checked against ARPAE
- PM10 exceedance days of the Bologna stations equal the ARPAE annual report for every year from 2016 to 2025.
- For 2026, PM10 exceedance days equal the ARPAE daily bulletin of 8 October for all 64 stations it lists, and NO2 hours for all 65.
Changed since the last state of main without a version
- Measurements come from the archive of the ARPAE REST service instead of the CKAN datastore, which stopped on 2026-09-17 (#33, ADR 0008). The whole of 2026 can now be ingested, with 22 more stations.
- Exceedances are counted on values rounded to a whole number, as ARPAE does (#33).
- PM10 and PM2.5 of the current year were attributed to the following day; fixed with the new source (#33).
- The Docker images build again: they had moved to a Python version the projects do not support (#35).
- The dashboard and the README credit ARPAE and Open-Meteo as their licences ask (#34).
- The code is under the MIT licence; ADR 0007 (no streaming) and ADR 0008 are accepted (#39).
Known limits
- The REST archive had no value newer than 2026-10-09 11:00 on 2026-10-12 (#40).
- Ozone exceedance days of 2026 differ from the ARPAE bulletin by 1 to 3 days for a third of the stations (#44).
- A first start loads the last 30 days of the current year, not all of it:
make ingest FROM=2026-01-01loads the rest. - Everything else: docs/limitations.md.