gea-program 0.3.0__tar.gz → 0.4.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.3.0/gea_program.egg-info → gea_program-0.4.0}/PKG-INFO +115 -5
- {gea_program-0.3.0 → gea_program-0.4.0}/README.md +114 -4
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/__init__.py +3 -1
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/__main__.py +291 -5
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/acceptance_tests.py +866 -11
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/alarm_engine.py +54 -9
- gea_program-0.4.0/gea/certificates.py +130 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/cli.py +37 -10
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/client_reports.py +117 -5
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/dashboard.py +110 -4
- gea_program-0.4.0/gea/doctor.py +214 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/fat_sat.py +6 -0
- gea_program-0.4.0/gea/files.py +367 -0
- gea_program-0.4.0/gea/help/TESTER_GUIDE.md +163 -0
- gea_program-0.4.0/gea/help/alarms.md +13 -0
- gea_program-0.4.0/gea/help/data-in.md +13 -0
- gea_program-0.4.0/gea/help/doctor.md +13 -0
- gea_program-0.4.0/gea/help/drift.md +13 -0
- gea_program-0.4.0/gea/help/files.md +13 -0
- gea_program-0.4.0/gea/help/instruments.md +13 -0
- gea_program-0.4.0/gea/help/notifications.md +13 -0
- gea_program-0.4.0/gea/help/patches.md +13 -0
- gea_program-0.4.0/gea/help/quality.md +13 -0
- gea_program-0.4.0/gea/help/site.md +15 -0
- gea_program-0.4.0/gea/help/start.md +13 -0
- gea_program-0.4.0/gea/help/transients.md +13 -0
- gea_program-0.4.0/gea/help/upkeep.md +13 -0
- gea_program-0.4.0/gea/help/well-tests.md +13 -0
- gea_program-0.4.0/gea/helplib.py +166 -0
- gea_program-0.4.0/gea/housekeeping.py +153 -0
- gea_program-0.4.0/gea/loadtest.py +115 -0
- gea_program-0.4.0/gea/notify.py +348 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/ports.py +6 -1
- gea_program-0.4.0/gea/sensor_swap.py +221 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/service.py +615 -21
- gea_program-0.4.0/gea/shut_in.py +201 -0
- gea_program-0.4.0/gea/transient.py +247 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/web/app.html +201 -20
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/workspace.py +3 -2
- {gea_program-0.3.0 → gea_program-0.4.0/gea_program.egg-info}/PKG-INFO +115 -5
- {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/SOURCES.txt +25 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/pyproject.toml +2 -2
- {gea_program-0.3.0 → gea_program-0.4.0}/LICENSE +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/bench.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/blind_harness.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/case_study.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/config_versioning.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/correlation.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/deviation.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/downhole_engine.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/drift_monitor.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/earth_model.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/example_register_map.json +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/follower.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/forward_model.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/gamma.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/gauge_specs.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/jobs.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/live_ports.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/modbus.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/model_card.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/opcua_port.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/operator_app.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/patches.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/project.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/quartz_hpht_extension.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/reconciler.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/sample_record.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/sbom.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/segy.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/service_life.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/shell.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/sla_report.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/store_forward.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/strata_join.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/survey_view.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/telemetry.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/tool_library.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/well_assembler.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/wits0.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea/witsml.py +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.3.0 → gea_program-0.4.0}/setup.cfg +0 -0
- {gea_program-0.3.0 → gea_program-0.4.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.4.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
|
|
@@ -103,11 +103,16 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
103
103
|
gea client-report --report accuracy --out client_report
|
|
104
104
|
gea model-cards --out model_cards
|
|
105
105
|
gea sbom --out sbom
|
|
106
|
-
gea accept # the product gate (
|
|
106
|
+
gea accept # the product gate (237 checks)
|
|
107
|
+
gea help drift # the help library, by the job (14 pages; the same text is on every dashboard page)
|
|
107
108
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
108
109
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
109
110
|
gea workspace --path C:\site --action init --name "Pad 3" # a site folder
|
|
110
111
|
gea serve --workspace C:\site # the dashboard as the door: http://127.0.0.1:8765/
|
|
112
|
+
gea doctor --workspace C:\site # which code runs, can it serve, with every fix
|
|
113
|
+
gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
|
|
114
|
+
gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
|
|
115
|
+
gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
|
|
111
116
|
```
|
|
112
117
|
|
|
113
118
|
`gea` is the front door (`gea/cli.py`); every other subcommand passes through to
|
|
@@ -186,11 +191,23 @@ alarms and commits configuration; **approver** decides well tests and re-fits;
|
|
|
186
191
|
ranking), Wells (add from a file, the catalogue or a live tag map; each well's
|
|
187
192
|
reports, quality, trends, tests and alarms), Patch panel (supervised sources,
|
|
188
193
|
their state and live values, their maps, live values), Alarms (the wall, acknowledge, definitions), Approvals (one queue),
|
|
194
|
+
Files (the import and export roots an administrator allows, browse with
|
|
195
|
+
detection by content, import into a well, "save to..." on every report, the
|
|
196
|
+
evidence pack, watch folders), Alarms (the wall: acknowledge one or all, shelve
|
|
197
|
+
with a reason and an expiry, unshelve; definitions), Approvals (one queue),
|
|
189
198
|
Configuration (versioned JSON with history, diff and rollback), Reports
|
|
190
199
|
(generate and open every report), Verification (the acceptance suite, FAT/SAT,
|
|
191
200
|
SBOM and the standalone check from the page), Survey (a LAS file in, a strata
|
|
192
|
-
report out), Jobs (every run with its log), Administration (users,
|
|
193
|
-
audit log).
|
|
201
|
+
report out), Jobs (every run with its log), Administration (users, live
|
|
202
|
+
sessions, file roots, schedule, site settings, notifications, audit log). A
|
|
203
|
+
search box in the header spans wells, alarms, reports, jobs, configuration,
|
|
204
|
+
patches and schedules; the navigation shows badge counts (unacknowledged
|
|
205
|
+
alarms, decisions waiting, failed jobs, patches down); Home opens with what
|
|
206
|
+
happened since your last sign-in; every page has a help panel (the Help
|
|
207
|
+
button hides them); every timestamp is shown in your time zone and every
|
|
208
|
+
value in your units (field or SI - "Your preferences", with site defaults
|
|
209
|
+
under Administration); a first-run guide walks a new site through its
|
|
210
|
+
settings, first well, people and first refresh; every page prints cleanly.
|
|
194
211
|
|
|
195
212
|
Every action the page takes is a job: `python -m gea <command>` run by the
|
|
196
213
|
service with its log kept under `jobs/`, so one code path serves the page, the
|
|
@@ -212,6 +229,99 @@ evaluations and change logs), `reports/` (the printed dashboard and every
|
|
|
212
229
|
report), `jobs/` (every run), `records/audit.jsonl`, `users.json`. All of it is
|
|
213
230
|
text: JSON, JSON lines, CSV, Markdown, HTML.
|
|
214
231
|
|
|
232
|
+
### The help library
|
|
233
|
+
|
|
234
|
+
`gea help` lists fourteen pages indexed by the job a reader arrives with -
|
|
235
|
+
start, bring data in, quality rules, drift, well tests, alarms and the month,
|
|
236
|
+
the site, instruments, shut-ins and build-ups, patches, files, notifications,
|
|
237
|
+
which code is running, upkeep. Each page carries four lines and stops: the
|
|
238
|
+
command, what it writes, the one number to check, and what the page will not
|
|
239
|
+
call a measurement. The pages ship inside the package (`gea/help/`), and the
|
|
240
|
+
same text is what `/api/help` serves and what the dashboard shows under every
|
|
241
|
+
heading and under Help, so the terminal and the page cannot drift apart. The
|
|
242
|
+
click-by-click tester guide ships with them: `gea guide`.
|
|
243
|
+
|
|
244
|
+
### Which code is running
|
|
245
|
+
|
|
246
|
+
`gea doctor` answers the question every stale-page report comes down to:
|
|
247
|
+
which Python, which copy of the package, does pip's record match the code
|
|
248
|
+
that runs (an editable checkout or an installed release), is another copy
|
|
249
|
+
shadowing it, is the page present, which dependencies are installed, is a
|
|
250
|
+
newer release on PyPI; with `--workspace` it also checks the site folder, the
|
|
251
|
+
accounts, the patches, a free port and write access. Every finding carries
|
|
252
|
+
its fix. `gea serve` runs the same checks and does not start on a blocking
|
|
253
|
+
finding, so a stale page is never served silently.
|
|
254
|
+
|
|
255
|
+
### Notifications
|
|
256
|
+
|
|
257
|
+
Rules route events to channels: a webhook URL or an SMTP mailbox. Events:
|
|
258
|
+
`alarm.activated` (by priority), `alarm.shelved`, `job.failed`, `patch.down`
|
|
259
|
+
and `patch.up`, `approval.pending`, `file.imported`. A quiet window stops
|
|
260
|
+
repeats of the same key; every attempt and every suppression is in
|
|
261
|
+
`records/notifications.jsonl`; an SMTP password is read from the environment
|
|
262
|
+
variable the channel names, never from the configuration. `gea notify
|
|
263
|
+
--example` prints a configuration to commit as `notifications` (Administration
|
|
264
|
+
has the editor and a "send a test" button per channel).
|
|
265
|
+
|
|
266
|
+
### Instruments and transients
|
|
267
|
+
|
|
268
|
+
A swapped gauge is a new instrument. Record the swap on the well page (or
|
|
269
|
+
confirm one the step detector proposes - it looks for a jump in a gauge's
|
|
270
|
+
offset against its peers, which a process change does not produce) and the
|
|
271
|
+
drift fit restarts at the swap, with the swap printed in the report. File the
|
|
272
|
+
calibration certificate of each instrument (serial, lab, dates, stated
|
|
273
|
+
accuracy; the document is kept and hashed) and its status - VALID, EXPIRING,
|
|
274
|
+
EXPIRED, MISSING - is on the well page, on Home, and beside the measured bias
|
|
275
|
+
in the drift report, so a reader sees whether a bias is inside the
|
|
276
|
+
instrument's own class.
|
|
277
|
+
|
|
278
|
+
Every shut-in in a record (found by the rate channel, the on-stream hours, or
|
|
279
|
+
the pressure signature alone when there is no rate - marked so) gets a
|
|
280
|
+
build-up analysis on the next refresh: Horner slope and p* on a middle-time
|
|
281
|
+
region chosen by the flat Bourdet derivative, wellbore storage, and - once the
|
|
282
|
+
rock and fluid parameters are saved on the well page - kh, k, skin and the
|
|
283
|
+
radius of investigation, each with a 90 % band from a residual bootstrap. The
|
|
284
|
+
Shut-in and Pressure Transient report prints the region and the rule that
|
|
285
|
+
chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
|
|
286
|
+
result follows. It is the first look every shut-in should get automatically,
|
|
287
|
+
not a replacement for a full interpretation, and it says so.
|
|
288
|
+
|
|
289
|
+
### Before a site goes live
|
|
290
|
+
|
|
291
|
+
`deploy/README.md` is the checklist: keep the service on the loopback
|
|
292
|
+
address and put a TLS proxy in front (`deploy/Caddyfile`,
|
|
293
|
+
`deploy/nginx-gea.conf`), start with `--behind-proxy`. The service itself
|
|
294
|
+
rate-limits sign-ins (five failures lock the name and the address for 15
|
|
295
|
+
minutes, audited), lists and revokes live sessions, sends the security
|
|
296
|
+
headers on every response, and `gea housekeeping --workspace C:\site --apply`
|
|
297
|
+
(schedule it daily from Administration) segments the append-only logs rather
|
|
298
|
+
than truncating them and prunes finished job folders and old recordings. `gea
|
|
299
|
+
loadtest --patches 16 --seconds 60 --with-service` tells you whether the site
|
|
300
|
+
machine carries the patches it will be given, with the page still answering.
|
|
301
|
+
|
|
302
|
+
## The standalone install kit
|
|
303
|
+
|
|
304
|
+
A client site often has no internet and no Python. The kit is one folder
|
|
305
|
+
(and one zip) that carries its own Python, the package and every dependency
|
|
306
|
+
as files, with the scripts a site needs; it installs without a network and
|
|
307
|
+
without administrator rights, and keeps the site's data in a separate
|
|
308
|
+
workspace folder it never deletes.
|
|
309
|
+
|
|
310
|
+
```
|
|
311
|
+
python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
|
|
312
|
+
python tools/build_installer.py --extras live,plotting,xls,desktop # add the PyQt6 desktop window (~100 MB)
|
|
313
|
+
python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
|
|
317
|
+
`http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
|
|
318
|
+
installed kit (the client's own evidence), `register-service.cmd` starts the
|
|
319
|
+
dashboard at logon, `uninstall.cmd` removes the kit and leaves the workspace.
|
|
320
|
+
`SHA256SUMS.txt` lets the site verify the kit after copying it. Every tag
|
|
321
|
+
builds the Windows and Linux kits in CI (`build-installer.yml`), installs
|
|
322
|
+
them the way a client does, runs the gate from the installed kit, and
|
|
323
|
+
attaches the zips to the GitHub release of that tag.
|
|
324
|
+
|
|
215
325
|
## Layout
|
|
216
326
|
|
|
217
327
|
```
|
|
@@ -221,7 +331,7 @@ gea/catalog/ 52 public archive entries, each with a provenance file
|
|
|
221
331
|
docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
|
|
222
332
|
SESSION_LOG.md (the working record, session by session),
|
|
223
333
|
commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
|
|
224
|
-
tools/ standalone_check.py (the self-contained guard
|
|
334
|
+
tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit)
|
|
225
335
|
CHANGELOG.md per-release summary (a tag ships only with its section); SHIP_LOG.md is written by ship.ps1
|
|
226
336
|
tests/ pytest wrapper around the acceptance suite and the standalone check
|
|
227
337
|
```
|
|
@@ -64,11 +64,16 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
64
64
|
gea client-report --report accuracy --out client_report
|
|
65
65
|
gea model-cards --out model_cards
|
|
66
66
|
gea sbom --out sbom
|
|
67
|
-
gea accept # the product gate (
|
|
67
|
+
gea accept # the product gate (237 checks)
|
|
68
|
+
gea help drift # the help library, by the job (14 pages; the same text is on every dashboard page)
|
|
68
69
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
69
70
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
70
71
|
gea workspace --path C:\site --action init --name "Pad 3" # a site folder
|
|
71
72
|
gea serve --workspace C:\site # the dashboard as the door: http://127.0.0.1:8765/
|
|
73
|
+
gea doctor --workspace C:\site # which code runs, can it serve, with every fix
|
|
74
|
+
gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
|
|
75
|
+
gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
|
|
76
|
+
gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
|
|
72
77
|
```
|
|
73
78
|
|
|
74
79
|
`gea` is the front door (`gea/cli.py`); every other subcommand passes through to
|
|
@@ -147,11 +152,23 @@ alarms and commits configuration; **approver** decides well tests and re-fits;
|
|
|
147
152
|
ranking), Wells (add from a file, the catalogue or a live tag map; each well's
|
|
148
153
|
reports, quality, trends, tests and alarms), Patch panel (supervised sources,
|
|
149
154
|
their state and live values, their maps, live values), Alarms (the wall, acknowledge, definitions), Approvals (one queue),
|
|
155
|
+
Files (the import and export roots an administrator allows, browse with
|
|
156
|
+
detection by content, import into a well, "save to..." on every report, the
|
|
157
|
+
evidence pack, watch folders), Alarms (the wall: acknowledge one or all, shelve
|
|
158
|
+
with a reason and an expiry, unshelve; definitions), Approvals (one queue),
|
|
150
159
|
Configuration (versioned JSON with history, diff and rollback), Reports
|
|
151
160
|
(generate and open every report), Verification (the acceptance suite, FAT/SAT,
|
|
152
161
|
SBOM and the standalone check from the page), Survey (a LAS file in, a strata
|
|
153
|
-
report out), Jobs (every run with its log), Administration (users,
|
|
154
|
-
audit log).
|
|
162
|
+
report out), Jobs (every run with its log), Administration (users, live
|
|
163
|
+
sessions, file roots, schedule, site settings, notifications, audit log). A
|
|
164
|
+
search box in the header spans wells, alarms, reports, jobs, configuration,
|
|
165
|
+
patches and schedules; the navigation shows badge counts (unacknowledged
|
|
166
|
+
alarms, decisions waiting, failed jobs, patches down); Home opens with what
|
|
167
|
+
happened since your last sign-in; every page has a help panel (the Help
|
|
168
|
+
button hides them); every timestamp is shown in your time zone and every
|
|
169
|
+
value in your units (field or SI - "Your preferences", with site defaults
|
|
170
|
+
under Administration); a first-run guide walks a new site through its
|
|
171
|
+
settings, first well, people and first refresh; every page prints cleanly.
|
|
155
172
|
|
|
156
173
|
Every action the page takes is a job: `python -m gea <command>` run by the
|
|
157
174
|
service with its log kept under `jobs/`, so one code path serves the page, the
|
|
@@ -173,6 +190,99 @@ evaluations and change logs), `reports/` (the printed dashboard and every
|
|
|
173
190
|
report), `jobs/` (every run), `records/audit.jsonl`, `users.json`. All of it is
|
|
174
191
|
text: JSON, JSON lines, CSV, Markdown, HTML.
|
|
175
192
|
|
|
193
|
+
### The help library
|
|
194
|
+
|
|
195
|
+
`gea help` lists fourteen pages indexed by the job a reader arrives with -
|
|
196
|
+
start, bring data in, quality rules, drift, well tests, alarms and the month,
|
|
197
|
+
the site, instruments, shut-ins and build-ups, patches, files, notifications,
|
|
198
|
+
which code is running, upkeep. Each page carries four lines and stops: the
|
|
199
|
+
command, what it writes, the one number to check, and what the page will not
|
|
200
|
+
call a measurement. The pages ship inside the package (`gea/help/`), and the
|
|
201
|
+
same text is what `/api/help` serves and what the dashboard shows under every
|
|
202
|
+
heading and under Help, so the terminal and the page cannot drift apart. The
|
|
203
|
+
click-by-click tester guide ships with them: `gea guide`.
|
|
204
|
+
|
|
205
|
+
### Which code is running
|
|
206
|
+
|
|
207
|
+
`gea doctor` answers the question every stale-page report comes down to:
|
|
208
|
+
which Python, which copy of the package, does pip's record match the code
|
|
209
|
+
that runs (an editable checkout or an installed release), is another copy
|
|
210
|
+
shadowing it, is the page present, which dependencies are installed, is a
|
|
211
|
+
newer release on PyPI; with `--workspace` it also checks the site folder, the
|
|
212
|
+
accounts, the patches, a free port and write access. Every finding carries
|
|
213
|
+
its fix. `gea serve` runs the same checks and does not start on a blocking
|
|
214
|
+
finding, so a stale page is never served silently.
|
|
215
|
+
|
|
216
|
+
### Notifications
|
|
217
|
+
|
|
218
|
+
Rules route events to channels: a webhook URL or an SMTP mailbox. Events:
|
|
219
|
+
`alarm.activated` (by priority), `alarm.shelved`, `job.failed`, `patch.down`
|
|
220
|
+
and `patch.up`, `approval.pending`, `file.imported`. A quiet window stops
|
|
221
|
+
repeats of the same key; every attempt and every suppression is in
|
|
222
|
+
`records/notifications.jsonl`; an SMTP password is read from the environment
|
|
223
|
+
variable the channel names, never from the configuration. `gea notify
|
|
224
|
+
--example` prints a configuration to commit as `notifications` (Administration
|
|
225
|
+
has the editor and a "send a test" button per channel).
|
|
226
|
+
|
|
227
|
+
### Instruments and transients
|
|
228
|
+
|
|
229
|
+
A swapped gauge is a new instrument. Record the swap on the well page (or
|
|
230
|
+
confirm one the step detector proposes - it looks for a jump in a gauge's
|
|
231
|
+
offset against its peers, which a process change does not produce) and the
|
|
232
|
+
drift fit restarts at the swap, with the swap printed in the report. File the
|
|
233
|
+
calibration certificate of each instrument (serial, lab, dates, stated
|
|
234
|
+
accuracy; the document is kept and hashed) and its status - VALID, EXPIRING,
|
|
235
|
+
EXPIRED, MISSING - is on the well page, on Home, and beside the measured bias
|
|
236
|
+
in the drift report, so a reader sees whether a bias is inside the
|
|
237
|
+
instrument's own class.
|
|
238
|
+
|
|
239
|
+
Every shut-in in a record (found by the rate channel, the on-stream hours, or
|
|
240
|
+
the pressure signature alone when there is no rate - marked so) gets a
|
|
241
|
+
build-up analysis on the next refresh: Horner slope and p* on a middle-time
|
|
242
|
+
region chosen by the flat Bourdet derivative, wellbore storage, and - once the
|
|
243
|
+
rock and fluid parameters are saved on the well page - kh, k, skin and the
|
|
244
|
+
radius of investigation, each with a 90 % band from a residual bootstrap. The
|
|
245
|
+
Shut-in and Pressure Transient report prints the region and the rule that
|
|
246
|
+
chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
|
|
247
|
+
result follows. It is the first look every shut-in should get automatically,
|
|
248
|
+
not a replacement for a full interpretation, and it says so.
|
|
249
|
+
|
|
250
|
+
### Before a site goes live
|
|
251
|
+
|
|
252
|
+
`deploy/README.md` is the checklist: keep the service on the loopback
|
|
253
|
+
address and put a TLS proxy in front (`deploy/Caddyfile`,
|
|
254
|
+
`deploy/nginx-gea.conf`), start with `--behind-proxy`. The service itself
|
|
255
|
+
rate-limits sign-ins (five failures lock the name and the address for 15
|
|
256
|
+
minutes, audited), lists and revokes live sessions, sends the security
|
|
257
|
+
headers on every response, and `gea housekeeping --workspace C:\site --apply`
|
|
258
|
+
(schedule it daily from Administration) segments the append-only logs rather
|
|
259
|
+
than truncating them and prunes finished job folders and old recordings. `gea
|
|
260
|
+
loadtest --patches 16 --seconds 60 --with-service` tells you whether the site
|
|
261
|
+
machine carries the patches it will be given, with the page still answering.
|
|
262
|
+
|
|
263
|
+
## The standalone install kit
|
|
264
|
+
|
|
265
|
+
A client site often has no internet and no Python. The kit is one folder
|
|
266
|
+
(and one zip) that carries its own Python, the package and every dependency
|
|
267
|
+
as files, with the scripts a site needs; it installs without a network and
|
|
268
|
+
without administrator rights, and keeps the site's data in a separate
|
|
269
|
+
workspace folder it never deletes.
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
|
|
273
|
+
python tools/build_installer.py --extras live,plotting,xls,desktop # add the PyQt6 desktop window (~100 MB)
|
|
274
|
+
python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
|
|
278
|
+
`http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
|
|
279
|
+
installed kit (the client's own evidence), `register-service.cmd` starts the
|
|
280
|
+
dashboard at logon, `uninstall.cmd` removes the kit and leaves the workspace.
|
|
281
|
+
`SHA256SUMS.txt` lets the site verify the kit after copying it. Every tag
|
|
282
|
+
builds the Windows and Linux kits in CI (`build-installer.yml`), installs
|
|
283
|
+
them the way a client does, runs the gate from the installed kit, and
|
|
284
|
+
attaches the zips to the GitHub release of that tag.
|
|
285
|
+
|
|
176
286
|
## Layout
|
|
177
287
|
|
|
178
288
|
```
|
|
@@ -182,7 +292,7 @@ gea/catalog/ 52 public archive entries, each with a provenance file
|
|
|
182
292
|
docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
|
|
183
293
|
SESSION_LOG.md (the working record, session by session),
|
|
184
294
|
commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
|
|
185
|
-
tools/ standalone_check.py (the self-contained guard
|
|
295
|
+
tools/ standalone_check.py (the self-contained guard; run by ci and ship.ps1), build_installer.py (the kit)
|
|
186
296
|
CHANGELOG.md per-release summary (a tag ships only with its section); SHIP_LOG.md is written by ship.ps1
|
|
187
297
|
tests/ pytest wrapper around the acceptance suite and the standalone check
|
|
188
298
|
```
|
|
@@ -99,6 +99,8 @@ from .modbus import (
|
|
|
99
99
|
)
|
|
100
100
|
from .opcua_port import ASYNCUA_AVAILABLE, OpcUaTap # registers the 'opcua' port at import
|
|
101
101
|
from .mqtt_port import PAHO_AVAILABLE, MqttTap # registers the 'mqtt' port at import
|
|
102
|
+
from .wits0 import Wits0Tap, SERIAL_AVAILABLE # registers the 'wits0' port at import
|
|
103
|
+
from .witsml import WitsmlTap # registers the 'witsml' port at import
|
|
102
104
|
from .well_assembler import (
|
|
103
105
|
WellAssembly, WellComponent, assemble, assemble_ktb_hb, assemble_odp_504b,
|
|
104
106
|
assemble_site_1027, assemble_u1324, BUILTIN_ASSEMBLIES,
|
|
@@ -127,7 +129,7 @@ from .profile_catalog import (
|
|
|
127
129
|
read_pangaea_txt,
|
|
128
130
|
)
|
|
129
131
|
|
|
130
|
-
__version__ = "0.
|
|
132
|
+
__version__ = "0.4.0"
|
|
131
133
|
__all__ = [
|
|
132
134
|
"calculate_quartz_transducer_hpht_program", "canonical_suppression",
|
|
133
135
|
"conventional_drift", "drift_comparison",
|