EIDA Consistency Checker
A tool to evaluate the consistency between EIDA nodes' availability and dataselect web services.
Designed for use in quality control and monitoring tasks across the European Integrated Data Archive (EIDA).
📖 Full documentation: https://EIDA.github.io/eida-consistency/
🚀 Installation & Quick Start
You can use eida-consistency in two ways:
Option 1: Using uvx
uvx eida-consistency <command> [options]
Option 2: Global install
uv tool install eida-consistency
Now it’s available globally:
eida-consistency <command> [options]
Update it with:
uv tool upgrade eida-consistency
🔍 CLI Commands
Run Consistency Check
Check if availability spans align with dataselect results:
uvx eida-consistency consistency --node RESIF --epochs 10 --duration 600
# OR check 5% of available stations:
uvx eida-consistency consistency --node RESIF --epochs "5%"
Options:
--node: Node code (e.g.RESIF,NOA,ETH)--epochs: Number of random test epochs (default: 10) OR percentage (e.g.,"5%",0.05)--duration: Epoch length in seconds (≥600)--psd/--no-psd: Also check PSD (eidaws/psd) coverage vs dataselect (default: on)--delete-old: Keep only the most recent report--stdout: Print JSON report to stdout--report-dir: Save reports to a custom folder (default:reports/); works before or after the subcommand--log-level: Control verbosity (DEBUG,INFO,WARNING,ERROR)
Compare Reports
Compare two report files (e.g. a before/after pair for the same node):
uvx eida-consistency compare reports/resif_run1.json reports/resif_run2.json
Explore Inconsistencies
Re-check only the inconsistencies of a report, drilling down day-by-day to
find their exact boundaries. With no report argument it uses the newest report;
--index (repeatable) targets specific findings.
uvx eida-consistency explore # newest report, all inconsistencies
uvx eida-consistency explore reports/noa_20260621_140111_113496.json --index 7
See Re-run & Re-verify for when to use this vs check vs a fresh run.
Manage Node List
Reload routing cache:
uvx eida-consistency reload-nodes
List currently cached nodes:
uvx eida-consistency list-nodes
📂 Reports
Reports are stored in ./reports/ by default, or in a custom folder using --report-dir.
- JSON reports:
reports/<node>_<YYYYMMDD>_<HHMMSS>_<microseconds>.json - Markdown reports:
reports/<node>_<YYYYMMDD>_<HHMMSS>_<microseconds>.md - Global summary:
summary.md
📚 Library Usage
You can also use eida-consistency as a Python library to run checks programmatically or build custom tools.
Check a Single Candidate
from eida_consistency.core.checker import check_candidate
# Define a candidate (network, station, channel, starttime)
candidate = {
"network": "GR",
"station": "ATH",
"channel": "BHZ",
"starttime": "2023-01-01T00:00:00",
}
# Run the check
results, stats = check_candidate(
base_url="http://node.eida.eu/fdsnws",
candidate=candidate,
epochs=5,
duration=600
)
for res in results:
url, available, start, end, loc, span = res
print(f"Time: {start} -> Available: {available}")
Run a Full Consistency Check
from eida_consistency.runner import run_consistency_check
# Run check for a specific node and get the report path
report_path = run_consistency_check(
node="NOA",
epochs=10,
duration=600
)
print(f"Report generated at: {report_path}")
For full API documentation, please visit our Documentation Site or run:
uv run mkdocs serve
🔁 Re-run & Re-verify
There are three distinct ways to "run it again", depending on what you want:
-
Re-verify the findings of an existing report — re-check only the inconsistencies that a report recorded, replaying each one's exact window. This is the right way to confirm a node-side fix:
uvx eida-consistency explore reports/noa_20260621_140111_113496.json
Add
--index N(repeatable) to re-check specific inconsistencies only. -
Re-check a single stream/window — for a one-off, targeted check:
uvx eida-consistency check --node NOA --net HP --sta SERG --loc "" --cha HHZ \ --start 2016-09-20 --end 2016-10-19
-
Run a fresh sampled check — draw a new random set of streams for a node:
uvx eida-consistency consistency --node NOA --epochs 20 --duration 600
⚠️ Passing the same
--seeddoes not reproduce an older run once the node's live inventory changes. To reproduce a specific finding, use option 1 or 2 above, which replay the exact window rather than re-sampling.ℹ️ A fresh run cannot be limited to only inconsistent streams — a stream isn't known to be inconsistent until it's tested. Instead, the report already lists them on their own under the "Detected Inconsistencies" table, and option 1 (
explore) re-checks only those inconsistent streams.
🧪 Example Workflow
# 1. Run a check (reports land in reports/test_noa/)
uvx eida-consistency consistency --node NOA --epochs 20 --report-dir reports/test_noa
# 2. Re-check the inconsistencies it found (day-by-day boundaries)
uvx eida-consistency explore --report-dir reports/test_noa
# 3. Fix them at node level, then re-verify by replaying the exact windows
# (verdict per row: PERSISTS / RESOLVED / SKIPPED; add --all for CONSISTENT/REGRESSED)
uvx eida-consistency rerun reports/test_noa/<report>.json
# 4. Compare before/after
uvx eida-consistency compare reports/test_noa/old.json reports/test_noa/new.json
📊 Global Consistency Summary
| Node | Epochs Requested | Epochs Usable | Total Checks | Consistent | Inconsistent | Score |
|---|---|---|---|---|---|---|
| BGR | 20 | 20 | 20 | 15 | 5 | 75.0 % |
| BGS | 20 | 11 | 11 | 6 | 5 | 54.55 % |
| ETH | 20 | 20 | 20 | 19 | 1 | 95.0 % |
| GEOFON | 20 | 20 | 20 | 20 | 0 | 100.0 % |
| KOERI | 20 | 20 | 20 | 10 | 10 | 50.0 % |
| LMU | 20 | 20 | 20 | 20 | 0 | 100.0 % |
| NIEP | 20 | 20 | 20 | 15 | 5 | 75.0 % |
| NOA | 20 | 20 | 20 | 16 | 4 | 80.0 % |
| RESIF | 20 | 20 | 20 | 20 | 0 | 100.0 % |
| UIB-NORSAR | 20 | 20 | 20 | 18 | 2 | 90.0 % |
📖 Full details: summary.md
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eida_consistency-0.7.0.tar.gz.
File metadata
- Download URL: eida_consistency-0.7.0.tar.gz
- Upload date:
- Size: 354.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63d005733a38009af1b552f13993156a0ea2fc123f2502775a9d72725aeed152
|
|
| MD5 |
f57a7a45af2ba1438f74338aa41b0423
|
|
| BLAKE2b-256 |
2aea5a05b486d40cf4dfacdb0af8e79c6fb4600b28e5d544a3b035fe227977a7
|
Provenance
The following attestation bundles were made for eida_consistency-0.7.0.tar.gz:
Publisher:
publish.yml on EIDA/eida-consistency
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eida_consistency-0.7.0.tar.gz -
Subject digest:
63d005733a38009af1b552f13993156a0ea2fc123f2502775a9d72725aeed152 - Sigstore transparency entry: 2625610794
- Sigstore integration time:
-
Permalink:
EIDA/eida-consistency@6c9121bc66a23ebef078271f54064b11e1babf77 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/EIDA
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6c9121bc66a23ebef078271f54064b11e1babf77 -
Trigger Event:
push
-
Statement type:
File details
Details for the file eida_consistency-0.7.0-py3-none-any.whl.
File metadata
- Download URL: eida_consistency-0.7.0-py3-none-any.whl
- Upload date:
- Size: 57.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
760a147db3a095eb3af501072cd9f8df8b429f41c50759b5c67a9399e416b71b
|
|
| MD5 |
61b3cbb9e4917cd8795a43d5eb445a8c
|
|
| BLAKE2b-256 |
0eedf952f2c44b4c18ba70408576d053aa7d7d4be9518643442c5c39aca5f002
|
Provenance
The following attestation bundles were made for eida_consistency-0.7.0-py3-none-any.whl:
Publisher:
publish.yml on EIDA/eida-consistency
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eida_consistency-0.7.0-py3-none-any.whl -
Subject digest:
760a147db3a095eb3af501072cd9f8df8b429f41c50759b5c67a9399e416b71b - Sigstore transparency entry: 2625610827
- Sigstore integration time:
-
Permalink:
EIDA/eida-consistency@6c9121bc66a23ebef078271f54064b11e1babf77 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/EIDA
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6c9121bc66a23ebef078271f54064b11e1babf77 -
Trigger Event:
push
-
Statement type: