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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eida_consistency-0.7.0.tar.gz (354.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eida_consistency-0.7.0-py3-none-any.whl (57.0 kB view details)

Uploaded Python 3

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

Hashes for eida_consistency-0.7.0.tar.gz
Algorithm Hash digest
SHA256 63d005733a38009af1b552f13993156a0ea2fc123f2502775a9d72725aeed152
MD5 f57a7a45af2ba1438f74338aa41b0423
BLAKE2b-256 2aea5a05b486d40cf4dfacdb0af8e79c6fb4600b28e5d544a3b035fe227977a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for eida_consistency-0.7.0.tar.gz:

Publisher: publish.yml on EIDA/eida-consistency

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file eida_consistency-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for eida_consistency-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 760a147db3a095eb3af501072cd9f8df8b429f41c50759b5c67a9399e416b71b
MD5 61b3cbb9e4917cd8795a43d5eb445a8c
BLAKE2b-256 0eedf952f2c44b4c18ba70408576d053aa7d7d4be9518643442c5c39aca5f002

See more details on using hashes here.

Provenance

The following attestation bundles were made for eida_consistency-0.7.0-py3-none-any.whl:

Publisher: publish.yml on EIDA/eida-consistency

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.9

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.1.0

2 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