Skip to main content

EIDA Consistency Checker

Run Tests Coverage Docs


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:

  1. 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.

  2. 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
    
  3. 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 --seed does 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


Metadata

Release files for eida-consistency 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eida-consistency 0.7.0
File Size Uploaded
eida_consistency-0.7.0.tar.gz 354.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eida-consistency 0.7.0
File Interpreter ABI Platform
eida_consistency-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 411.7 kB

Release files / eida_consistency-0.7.0.tar.gz

Download URL eida_consistency-0.7.0.tar.gz
Size 354.8 kB
Tags Source
SHA-256 checksum
How to use checksums
63d005733a38009af1b552f13993156a0ea2fc123f2502775a9d72725aeed152
BLAKE2b-256 checksum
How to use checksums
2aea5a05b486d40cf4dfacdb0af8e79c6fb4600b28e5d544a3b035fe227977a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.

Transparency log

Release files / eida_consistency-0.7.0-py3-none-any.whl

Download URL eida_consistency-0.7.0-py3-none-any.whl
Size 57.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
760a147db3a095eb3af501072cd9f8df8b429f41c50759b5c67a9399e416b71b
BLAKE2b-256 checksum
How to use checksums
0eedf952f2c44b4c18ba70408576d053aa7d7d4be9518643442c5c39aca5f002
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page