gea-program 0.42.0__tar.gz → 0.44.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gea_program-0.42.0 → gea_program-0.44.0}/PKG-INFO +28 -1
- {gea_program-0.42.0 → gea_program-0.44.0}/README.md +27 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/__init__.py +1 -1
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/__main__.py +134 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/acceptance_tests.py +423 -0
- gea_program-0.44.0/gea/alerts.py +177 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/client_reports.py +5 -0
- gea_program-0.44.0/gea/dossier.py +369 -0
- gea_program-0.44.0/gea/dossier_verify.py +136 -0
- gea_program-0.44.0/gea/ed25519.py +131 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/files.py +3 -1
- gea_program-0.44.0/gea/help/alerts.md +17 -0
- gea_program-0.44.0/gea/help/dossier.md +15 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/notifications.md +1 -1
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/opseis.md +2 -0
- gea_program-0.44.0/gea/help/report-history.md +11 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/helplib.py +3 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/notify.py +22 -2
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/op_seismicity.py +7 -0
- gea_program-0.44.0/gea/report_history.py +148 -0
- gea_program-0.44.0/gea/seismic_watch.py +336 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/service.py +55 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/web/app.html +54 -1
- {gea_program-0.42.0 → gea_program-0.44.0}/gea_program.egg-info/PKG-INFO +28 -1
- {gea_program-0.42.0 → gea_program-0.44.0}/gea_program.egg-info/SOURCES.txt +9 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/pyproject.toml +1 -1
- {gea_program-0.42.0 → gea_program-0.44.0}/LICENSE +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/backup.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/bench.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/blind_harness.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog_map.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/catalog_register.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/certificates.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/cli.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/config_versioning.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/conformance.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/control_room.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/correlation.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/dashboard.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/declarations.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/deviation.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/dlis.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/dnp3.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/doctor.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/downhole_engine.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/drift_monitor.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/drill_string.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/earth_model.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/economics.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/edr.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/elevation.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/etp.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/etp12_schemas.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/example_register_map.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/fat_sat.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/fixtures/README.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/fixtures/ne_110m_coastline.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/follower.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/forward_model.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/friction_priors.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/gamma.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/gauge_aging.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/gauge_specs.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/geodesy.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/hartip.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/alarms.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/audit-update.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/backup.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/catalog.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/charts.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/conformance.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/control-room.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/data-in.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/declare.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/dlis.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/doctor.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/drift.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/drillstring.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/economics.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/edr.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/etp.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/field-ports.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/files.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/historian.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/instruments.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/interval.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/map.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/month-end.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/osdu.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/patches.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/penetrator.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/ppdm.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/quakeml.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/quality.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/seedlink.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/seismic.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/setup.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/simulation.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/site.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/sites.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/slip.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/soak.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/sra.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/start.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/structure.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/tools.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/transients.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/upkeep.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/vibration.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/well-report.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/help/well3d.md +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/housekeeping.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/interval.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/jobs.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/live_ports.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/loadtest.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/modbus.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/modbus_rtu.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/model_card.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/month_end.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/opcua_port.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/operator_app.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/osdu.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/patches.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/penetrator.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/permits.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/piwebapi.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/ports.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/ppdm.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/project.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/quakeml.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reconciler.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/eia_prices.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/libmseed_steim.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/mahoning_example.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/mud_motor_specs.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/penetrator_ratings.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/seismicity_protocols.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/tool_sources.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/us_outline.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/us_outline.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_3d.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_surfaces.json.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/reference/volve_well_picks.csv.gz +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/sample_record.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/sbom.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seedlink.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/segy.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_array.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_assoc.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_detect.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_film.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_harmonic.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_qc.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_response.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_signature.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_track.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_uncertainty.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/seismic_unlisted.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/series_cache.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/service_life.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/setup_checklist.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/shapefile.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/shell.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/shut_in.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/simulation.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/site_map.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/sla_report.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/slip.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/soak.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/sra.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/store_forward.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/strata_join.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/structure.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/supervisor.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/survey_view.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/telemetry.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/tool_catalog.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/tool_library.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/tool_taxonomy.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/transient.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/vibration.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/well3d.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/well_assembler.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/well_report.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/wits0.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/witsml.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea/workspace.py +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/setup.cfg +0 -0
- {gea_program-0.42.0 → gea_program-0.44.0}/tests/test_acceptance.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gea-program
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.44.0
|
|
4
4
|
Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
|
|
5
5
|
Author: Daniel T. Murphy
|
|
6
6
|
License: MPL-2.0
|
|
@@ -648,6 +648,33 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
|
|
|
648
648
|
itself; `gea help seedlink`. A TexNet station is served by EarthScope at
|
|
649
649
|
`rtserve.iris.washington.edu:18000`, network `TX`.
|
|
650
650
|
|
|
651
|
+
### The earthquake watch and the alerts
|
|
652
|
+
|
|
653
|
+
While a well operates, the program reads the USGS earthquake catalogue
|
|
654
|
+
every few minutes from the site's machine - the real-time feed USGS asks
|
|
655
|
+
automated programs to use, and the catalogue service for any gap - and
|
|
656
|
+
raises an alert when an earthquake near the well reaches the chosen
|
|
657
|
+
regulator's protocol level; a revision to a higher level is a new alert,
|
|
658
|
+
and a watch that cannot reach the catalogue says so. The same alerts cover
|
|
659
|
+
what nobody watches by hand: a component's service interval used up, a
|
|
660
|
+
penetrator check outside its rating, a signed dossier the workspace no
|
|
661
|
+
longer matches. Every alert is listed on the Alarms tab and sent through
|
|
662
|
+
the notification rules (email or a webhook). `gea seismicity --watch-once`,
|
|
663
|
+
`gea alerts`, `gea help alerts`.
|
|
664
|
+
|
|
665
|
+
### Report history and the signed dossier
|
|
666
|
+
|
|
667
|
+
Every client report a workspace writes is kept, version by version, under
|
|
668
|
+
`reports\history\` with each file's SHA-256, so pressing a report button
|
|
669
|
+
again no longer loses the last one; the Reports tab lists every version.
|
|
670
|
+
The signed dossier puts a well's - or the pad's - reports, declarations,
|
|
671
|
+
audit log and source-record hashes in one zip, signed with the site's own
|
|
672
|
+
Ed25519 key (made on the site's machine, never sent anywhere), with a
|
|
673
|
+
checker inside that anyone can run with plain Python: VALID when the
|
|
674
|
+
signature and every file's hash hold, and inside the workspace a check that
|
|
675
|
+
the source records and the audit log still match what was signed.
|
|
676
|
+
`gea dossier`, `gea reports-history`, `gea help dossier`.
|
|
677
|
+
|
|
651
678
|
### Operations and seismicity
|
|
652
679
|
|
|
653
680
|
The Operations & Seismicity tab sets each well's drilling, completion and
|
|
@@ -609,6 +609,33 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
|
|
|
609
609
|
itself; `gea help seedlink`. A TexNet station is served by EarthScope at
|
|
610
610
|
`rtserve.iris.washington.edu:18000`, network `TX`.
|
|
611
611
|
|
|
612
|
+
### The earthquake watch and the alerts
|
|
613
|
+
|
|
614
|
+
While a well operates, the program reads the USGS earthquake catalogue
|
|
615
|
+
every few minutes from the site's machine - the real-time feed USGS asks
|
|
616
|
+
automated programs to use, and the catalogue service for any gap - and
|
|
617
|
+
raises an alert when an earthquake near the well reaches the chosen
|
|
618
|
+
regulator's protocol level; a revision to a higher level is a new alert,
|
|
619
|
+
and a watch that cannot reach the catalogue says so. The same alerts cover
|
|
620
|
+
what nobody watches by hand: a component's service interval used up, a
|
|
621
|
+
penetrator check outside its rating, a signed dossier the workspace no
|
|
622
|
+
longer matches. Every alert is listed on the Alarms tab and sent through
|
|
623
|
+
the notification rules (email or a webhook). `gea seismicity --watch-once`,
|
|
624
|
+
`gea alerts`, `gea help alerts`.
|
|
625
|
+
|
|
626
|
+
### Report history and the signed dossier
|
|
627
|
+
|
|
628
|
+
Every client report a workspace writes is kept, version by version, under
|
|
629
|
+
`reports\history\` with each file's SHA-256, so pressing a report button
|
|
630
|
+
again no longer loses the last one; the Reports tab lists every version.
|
|
631
|
+
The signed dossier puts a well's - or the pad's - reports, declarations,
|
|
632
|
+
audit log and source-record hashes in one zip, signed with the site's own
|
|
633
|
+
Ed25519 key (made on the site's machine, never sent anywhere), with a
|
|
634
|
+
checker inside that anyone can run with plain Python: VALID when the
|
|
635
|
+
signature and every file's hash hold, and inside the workspace a check that
|
|
636
|
+
the source records and the audit log still match what was signed.
|
|
637
|
+
`gea dossier`, `gea reports-history`, `gea help dossier`.
|
|
638
|
+
|
|
612
639
|
### Operations and seismicity
|
|
613
640
|
|
|
614
641
|
The Operations & Seismicity tab sets each well's drilling, completion and
|
|
@@ -563,9 +563,38 @@ def main(argv=None) -> int:
|
|
|
563
563
|
p_os.add_argument("--kind", type=str, default=None, choices=("drilling", "completion", "disposal", "injection", "other"))
|
|
564
564
|
p_os.add_argument("--remove-op", type=str, default=None)
|
|
565
565
|
p_os.add_argument("--remove-catalog", type=str, default=None)
|
|
566
|
+
p_os.add_argument("--watch", type=str, default=None, choices=("on", "off"), help="turn the live earthquake watch on or off")
|
|
567
|
+
p_os.add_argument("--watch-every", type=float, default=None, help="the watch's interval in minutes (default 5)")
|
|
568
|
+
p_os.add_argument("--watch-mode", type=str, default=None, choices=("operations", "always"), help="poll only while an operation is under way (default), or always")
|
|
569
|
+
p_os.add_argument("--watch-once", action="store_true", help="poll the USGS catalogue now, from this machine, and say what came back")
|
|
566
570
|
p_os.add_argument("--actor", type=str, default="cli")
|
|
567
571
|
p_os.add_argument("--json", action="store_true")
|
|
568
572
|
|
|
573
|
+
p_al = sub.add_parser("alerts", help="the program's alerts: earthquakes near operating wells and the protocol levels they reach, the earthquake watch going quiet, components due for service, penetrator checks outside their ratings, dossiers the workspace no longer matches")
|
|
574
|
+
p_al.add_argument("--workspace", type=str, required=True)
|
|
575
|
+
p_al.add_argument("--check", action="store_true", help="check the motors, penetrators and dossiers now, sending what began or cleared through the notification rules")
|
|
576
|
+
p_al.add_argument("-n", type=int, default=30)
|
|
577
|
+
p_al.add_argument("--json", action="store_true")
|
|
578
|
+
|
|
579
|
+
p_dz = sub.add_parser("dossier", help="the signed dossier: a well's (or the pad's) reports, declarations, audit log and source hashes in one zip, signed with the site's Ed25519 key, with a checker anyone can run without this program")
|
|
580
|
+
p_dz.add_argument("--workspace", type=str, default=None)
|
|
581
|
+
p_dz.add_argument("--well", type=str, default=None, help="a well; without it, the pad (every well and the site reports)")
|
|
582
|
+
p_dz.add_argument("--include-sources", action="store_true", help="embed the source records (by default they are listed by hash)")
|
|
583
|
+
p_dz.add_argument("--verify", type=str, default=None, help="a dossier to check (with --workspace, also against this site)")
|
|
584
|
+
p_dz.add_argument("--sources", type=str, default="", help="with --verify: a folder holding the source records to check against their hashes")
|
|
585
|
+
p_dz.add_argument("--key", action="store_true", help="print this site's signing key fingerprint")
|
|
586
|
+
p_dz.add_argument("--list", action="store_true", help="list the dossiers this site has signed")
|
|
587
|
+
p_dz.add_argument("--actor", type=str, default="cli")
|
|
588
|
+
p_dz.add_argument("--json", action="store_true")
|
|
589
|
+
|
|
590
|
+
p_rh = sub.add_parser("reports-history", help="every version of every client report this workspace has written, kept under reports/history; --prune keeps the newest N")
|
|
591
|
+
p_rh.add_argument("--workspace", type=str, required=True)
|
|
592
|
+
p_rh.add_argument("--family", type=str, default=None, help="e.g. wells/Well-1/well_report or pad_report")
|
|
593
|
+
p_rh.add_argument("--prune", action="store_true")
|
|
594
|
+
p_rh.add_argument("--keep", type=int, default=0)
|
|
595
|
+
p_rh.add_argument("--apply", action="store_true", help="with --prune: remove (without it, list what would go)")
|
|
596
|
+
p_rh.add_argument("--json", action="store_true")
|
|
597
|
+
|
|
569
598
|
p_sm = sub.add_parser("simulation", help="the simulation in words: the scenes (Volve 15/9-F-4 with its logs and interpretation, Volve F-5 and F-10 on the survey clock, every drilling-recorder well), and what the record says at a depth (the Simulation tab replays it)")
|
|
570
599
|
p_sm.add_argument("--workspace", type=str, default=None)
|
|
571
600
|
p_sm.add_argument("--scene", type=str, default=None, help="e.g. volve-f4, or well:Well-30636033")
|
|
@@ -2206,6 +2235,26 @@ def main(argv=None) -> int:
|
|
|
2206
2235
|
return 0
|
|
2207
2236
|
if a.remove_op:
|
|
2208
2237
|
_OS.remove_operation(ws, a.actor, a.remove_op); print(f"removed {a.remove_op}"); return 0
|
|
2238
|
+
if a.watch or a.watch_every is not None or a.watch_mode or a.watch_once:
|
|
2239
|
+
from . import seismic_watch as _SW
|
|
2240
|
+
if ws is None:
|
|
2241
|
+
raise SystemExit("seismicity: the watch needs --workspace")
|
|
2242
|
+
if a.watch or a.watch_every is not None or a.watch_mode:
|
|
2243
|
+
_SW.set_settings(ws, a.actor, None if a.watch is None else a.watch == "on", a.watch_mode, a.watch_every)
|
|
2244
|
+
if a.watch_once:
|
|
2245
|
+
from .notify import Notifier
|
|
2246
|
+
n_ = Notifier(ws.path); n_.reload()
|
|
2247
|
+
r_ = _SW.poll(ws, n_, force=True)
|
|
2248
|
+
if r_.get("ok"):
|
|
2249
|
+
print(f"reached the catalogue ({r_['how']}): {r_['in_circle']} earthquake(s) in the watch circle, {r_['new']} new; {len(r_['alerts'])} alert(s)")
|
|
2250
|
+
for al_ in r_["alerts"]:
|
|
2251
|
+
print(f" {al_['event']}: {al_.get('detail', '')}")
|
|
2252
|
+
else:
|
|
2253
|
+
print(f"did not reach the catalogue: {r_.get('error') or r_.get('why')}")
|
|
2254
|
+
st_ = _SW.status(ws)
|
|
2255
|
+
print(f"watch: {st_['state']} - every {st_['settings']['every_min']:g} min, {st_['settings']['mode']}; last good poll {st_['last_ok_utc'] or 'never'}"
|
|
2256
|
+
+ (f"; last error {st_['last_error']}" if st_.get('last_error') else ""))
|
|
2257
|
+
return 0 if (not a.watch_once or r_.get("ok")) else 1
|
|
2209
2258
|
if a.remove_catalog:
|
|
2210
2259
|
_OS.remove_catalog(ws, a.actor, a.remove_catalog); print(f"removed {a.remove_catalog}"); return 0
|
|
2211
2260
|
over = {k: v for k, v in (("protocol", a.protocol), ("radius_km", a.radius_km), ("screen_km", a.screen_km), ("post_days", a.post_days), ("mc", a.mc)) if v is not None}
|
|
@@ -2226,6 +2275,91 @@ def main(argv=None) -> int:
|
|
|
2226
2275
|
return 0
|
|
2227
2276
|
print(_json.dumps(r, default=str) if a.json else _OS.text(r))
|
|
2228
2277
|
return 0
|
|
2278
|
+
elif a.cmd == "dossier":
|
|
2279
|
+
import json as _json
|
|
2280
|
+
from . import dossier as _DZ
|
|
2281
|
+
from .cli import _safe_stdout
|
|
2282
|
+
from .workspace import Workspace, WorkspaceError
|
|
2283
|
+
_safe_stdout()
|
|
2284
|
+
ws = None
|
|
2285
|
+
if a.workspace:
|
|
2286
|
+
try:
|
|
2287
|
+
ws = Workspace(a.workspace)
|
|
2288
|
+
except WorkspaceError as e:
|
|
2289
|
+
raise SystemExit(f"dossier: {e}")
|
|
2290
|
+
if a.verify:
|
|
2291
|
+
r = _DZ.verify(a.verify, ws, a.sources)
|
|
2292
|
+
print(_json.dumps(r, default=str) if a.json else _DZ.text(r))
|
|
2293
|
+
return 0 if r["status"] == "VALID" else 1
|
|
2294
|
+
if ws is None:
|
|
2295
|
+
raise SystemExit("dossier: give --workspace (or --verify FILE)")
|
|
2296
|
+
if a.key:
|
|
2297
|
+
k = _DZ.key_info(ws)
|
|
2298
|
+
print(f"Ed25519 {k['fingerprint']} (public key {k['public_key']}, made {k['created_utc']})" if k else "no signing key yet: the first dossier makes one")
|
|
2299
|
+
return 0
|
|
2300
|
+
if a.list:
|
|
2301
|
+
for e in reversed(_DZ.ledger(ws)):
|
|
2302
|
+
print(f"{e['utc']} {e['dossier_id']} {e['display']:<24} {e['n_files']:>4} files {e['path']}")
|
|
2303
|
+
return 0
|
|
2304
|
+
try:
|
|
2305
|
+
e = _DZ.build(ws, a.actor, __version__, a.well, a.include_sources)
|
|
2306
|
+
except (KeyError, ValueError) as ex:
|
|
2307
|
+
raise SystemExit(f"dossier: {ex.args[0] if ex.args else ex}")
|
|
2308
|
+
print(f"signed {e['dossier_id']}: {e['display']}, {e['n_files']} file(s), {e['n_sources']} source record(s) {'embedded' if e['sources_embedded'] else 'by hash'}")
|
|
2309
|
+
print(f" {os.path.join(ws.reports_dir, e['path'])}")
|
|
2310
|
+
print(f" key fingerprint {e['fingerprint']}")
|
|
2311
|
+
return 0
|
|
2312
|
+
elif a.cmd == "reports-history":
|
|
2313
|
+
import json as _json
|
|
2314
|
+
from . import report_history as _RH
|
|
2315
|
+
from .cli import _safe_stdout
|
|
2316
|
+
from .workspace import Workspace, WorkspaceError
|
|
2317
|
+
_safe_stdout()
|
|
2318
|
+
try:
|
|
2319
|
+
ws = Workspace(a.workspace)
|
|
2320
|
+
except WorkspaceError as e:
|
|
2321
|
+
raise SystemExit(f"reports-history: {e}")
|
|
2322
|
+
if a.prune:
|
|
2323
|
+
if a.keep < 1:
|
|
2324
|
+
raise SystemExit("reports-history: --prune needs --keep N (at least 1)")
|
|
2325
|
+
r = _RH.prune(ws.reports_dir, a.keep, a.family, a.apply)
|
|
2326
|
+
print(f"{'removed' if r['applied'] else 'would remove'} {len(r['removed'])} version(s), {r['bytes_freed']:,} bytes" + ("" if r['applied'] else " - add --apply to remove them"))
|
|
2327
|
+
return 0
|
|
2328
|
+
sm = _RH.summary(ws.reports_dir)
|
|
2329
|
+
if a.json:
|
|
2330
|
+
print(_json.dumps(sm, default=str)); return 0
|
|
2331
|
+
print(f"{sm['n_versions']} version(s) of {len(sm['families'])} report(s), {sm['bytes']:,} bytes under {os.path.join(ws.reports_dir, 'history')}")
|
|
2332
|
+
for f_ in sm["families"]:
|
|
2333
|
+
if a.family and f_["family"] != a.family:
|
|
2334
|
+
continue
|
|
2335
|
+
print(f" {f_['family']}: {f_['n']} version(s)")
|
|
2336
|
+
for v in f_["versions"][: (50 if a.family else 3)]:
|
|
2337
|
+
print(f" {v['utc']} {v.get('report_id') or ''} reports/{v['dir']}")
|
|
2338
|
+
return 0
|
|
2339
|
+
elif a.cmd == "alerts":
|
|
2340
|
+
import json as _json
|
|
2341
|
+
from . import alerts as _AL
|
|
2342
|
+
from .cli import _safe_stdout
|
|
2343
|
+
from .notify import Notifier
|
|
2344
|
+
from .workspace import Workspace, WorkspaceError
|
|
2345
|
+
_safe_stdout()
|
|
2346
|
+
try:
|
|
2347
|
+
ws = Workspace(a.workspace)
|
|
2348
|
+
except WorkspaceError as e:
|
|
2349
|
+
raise SystemExit(f"alerts: {e}")
|
|
2350
|
+
if a.check:
|
|
2351
|
+
n_ = Notifier(ws.path); n_.reload()
|
|
2352
|
+
r_ = _AL.check_conditions(ws, n_, force=True)
|
|
2353
|
+
print(f"checked: {len(r_)} alert(s) raised or cleared")
|
|
2354
|
+
rows = _AL.recent(ws, a.n)
|
|
2355
|
+
if a.json:
|
|
2356
|
+
print(_json.dumps(rows, default=str)); return 0
|
|
2357
|
+
for r in rows:
|
|
2358
|
+
sent = ", ".join(f"{d['channel']}{'' if d['ok'] else ' (failed)'}" for d in r.get("delivered") or []) or "no channel set up"
|
|
2359
|
+
print(f"{r['utc']} {r['event']:<20} {r.get('well') or '':<16} {r.get('detail', '')} [{sent}]")
|
|
2360
|
+
if not rows:
|
|
2361
|
+
print("no alerts yet")
|
|
2362
|
+
return 0
|
|
2229
2363
|
elif a.cmd == "simulation":
|
|
2230
2364
|
import json as _json
|
|
2231
2365
|
from . import simulation as _SIM
|