cgse 0.14.1__tar.gz → 0.15.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.
- {cgse-0.14.1 → cgse-0.15.0}/PKG-INFO +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/logger/__init__.py +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/logger/log_cs.py +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/notifyhub/server.py +6 -5
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/registry/__init__.py +3 -3
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/registry/client.py +51 -34
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/registry/server.py +0 -2
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/pyproject.toml +1 -1
- {cgse-0.14.1 → cgse-0.15.0}/service_registry.db +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/.gitignore +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/bump.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/conftest.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/bits.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/calibration.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/command.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/config.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/control.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/counter.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/decorators.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/device.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/dicts.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/dummy.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/env.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/exceptions.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/heartbeat.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/hk.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/listener.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/metrics.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/mixin.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/monitoring.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/observer.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/obsid.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/persistence.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/plugin.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/process.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/reload.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/settings.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/setup.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/api/system.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/custom_theme/main.html +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/docs.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/installation.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/nox.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/uv.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/getting_started.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/help.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/images/grafana-queries.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/initialize.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/libs/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/package_list.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/projects/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/roadmap.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/stylesheets/custom.css +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/stylesheets/extra.css +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/tutorial.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/docs/user_guide/index.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/duckdb_metrics.db +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/duckdb_metrics.db.wal +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/identifier.sqlite +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/justfile +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/justfile +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/log.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/scpi.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/socketdevice.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/system.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/_stop.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/async_control.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/control.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/dummy.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/mixin.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/fixtures/services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_async_control.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_dummy.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_event_notification.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_mixin.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/mkdocs.yml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/noxfile.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/ruff.toml +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/scratch/match-case.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/scratch/processes.json +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/temperature_readings.log +0 -0
- {cgse-0.14.1 → cgse-0.15.0}/test_service_registry.db +0 -0
|
@@ -67,7 +67,7 @@ def get_endpoint_from_registry(port: str = "commander"):
|
|
|
67
67
|
from egse.registry.client import RegistryClient
|
|
68
68
|
|
|
69
69
|
try:
|
|
70
|
-
with RegistryClient(
|
|
70
|
+
with RegistryClient() as reg:
|
|
71
71
|
if port == "commander":
|
|
72
72
|
endpoint = reg.get_endpoint(SERVICE_TYPE)
|
|
73
73
|
elif port == "receiver":
|
|
@@ -317,7 +317,7 @@ def handle_command(command) -> dict:
|
|
|
317
317
|
|
|
318
318
|
elif command.lower() == "status":
|
|
319
319
|
with RegistryClient() as client:
|
|
320
|
-
service = client.discover_service(
|
|
320
|
+
service = client.discover_service(SERVICE_TYPE)
|
|
321
321
|
if service:
|
|
322
322
|
response.update(
|
|
323
323
|
dict(
|
|
@@ -19,12 +19,13 @@ from egse.notifyhub import DEFAULT_REQUESTS_PORT
|
|
|
19
19
|
from egse.notifyhub import STATS_INTERVAL
|
|
20
20
|
from egse.notifyhub.client import AsyncNotificationHubClient
|
|
21
21
|
from egse.registry import MessageType
|
|
22
|
-
from egse.registry.client import AsyncRegistryClient
|
|
22
|
+
from egse.registry.client import AsyncRegistryClient, REQUEST_TIMEOUT
|
|
23
23
|
from egse.system import TyperAsyncCommand
|
|
24
24
|
from egse.system import get_host_ip
|
|
25
25
|
from .event import NotificationEvent
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
REQUEST_POLL_TIMEOUT = 1.0
|
|
28
|
+
"""time to wait for while listening for requests [seconds]."""
|
|
28
29
|
|
|
29
30
|
app = typer.Typer(name="notify_hub")
|
|
30
31
|
|
|
@@ -45,7 +46,7 @@ class AsyncNotificationHub:
|
|
|
45
46
|
self.requests_socket: zmq.asyncio.Socket = self.context.socket(zmq.ROUTER)
|
|
46
47
|
|
|
47
48
|
# Register notification hub to the service registry
|
|
48
|
-
self.registry_client = AsyncRegistryClient(
|
|
49
|
+
self.registry_client = AsyncRegistryClient(timeout=REQUEST_TIMEOUT)
|
|
49
50
|
self.service_id = None
|
|
50
51
|
self.service_name = "Notification Hub"
|
|
51
52
|
self.service_type = "notification-hub"
|
|
@@ -206,14 +207,14 @@ class AsyncNotificationHub:
|
|
|
206
207
|
self.running = False
|
|
207
208
|
|
|
208
209
|
async def _handle_requests(self):
|
|
209
|
-
"""
|
|
210
|
+
"""Handle basic requests like e.g. health check."""
|
|
210
211
|
self.logger.info("Started request handler task")
|
|
211
212
|
|
|
212
213
|
while self.running:
|
|
213
214
|
try:
|
|
214
215
|
try:
|
|
215
216
|
message_parts = await asyncio.wait_for(
|
|
216
|
-
self.requests_socket.recv_multipart(), timeout=
|
|
217
|
+
self.requests_socket.recv_multipart(), timeout=REQUEST_POLL_TIMEOUT
|
|
217
218
|
)
|
|
218
219
|
except asyncio.TimeoutError:
|
|
219
220
|
# self.logger.debug("waiting for command request...")
|
|
@@ -13,8 +13,8 @@ class MessageType(Enum):
|
|
|
13
13
|
"""Message types using the envelope frame in the ROUTER-DEALER protocol."""
|
|
14
14
|
|
|
15
15
|
REQUEST_WITH_REPLY = b"REQ" # Client expects a reply
|
|
16
|
-
REQUEST_NO_REPLY = b"
|
|
17
|
-
RESPONSE = b"
|
|
16
|
+
REQUEST_NO_REPLY = b"REQ_NO_REPLY" # No reply expected by the client
|
|
17
|
+
RESPONSE = b"RESPONSE" # Response to a request
|
|
18
18
|
NOTIFICATION = b"NOTIF" # Server-initiated notification
|
|
19
19
|
HEARTBEAT = b"HB" # Heartbeat/health check
|
|
20
20
|
|
|
@@ -34,7 +34,7 @@ def is_service_registry_active(timeout: float = 0.5):
|
|
|
34
34
|
|
|
35
35
|
from egse.registry.client import RegistryClient # prevent circular import
|
|
36
36
|
|
|
37
|
-
with RegistryClient(
|
|
37
|
+
with RegistryClient(timeout=timeout) as client:
|
|
38
38
|
if not client.health_check():
|
|
39
39
|
return False
|
|
40
40
|
else:
|
|
@@ -22,8 +22,22 @@ from egse.registry import DEFAULT_RS_REQ_PORT
|
|
|
22
22
|
from egse.registry import MessageType
|
|
23
23
|
from egse.system import do_every
|
|
24
24
|
|
|
25
|
-
REQUEST_TIMEOUT =
|
|
26
|
-
|
|
25
|
+
REQUEST_TIMEOUT = 0.5
|
|
26
|
+
"""time to wait for a request-reply [seconds]. For responsive message handling."""
|
|
27
|
+
EVENT_POLL_TIMEOUT = 0.5
|
|
28
|
+
"""time to wait for while listening for events [seconds]."""
|
|
29
|
+
TASK_COMPLETION_TIMEOUT = 5.0
|
|
30
|
+
"""time to wait for Tasks to complete [seconds]."""
|
|
31
|
+
HEALTH_CHECK_TIMEOUT = 2.0
|
|
32
|
+
"""Health checks shouldn't take too long. Recommended: 1-5s."""
|
|
33
|
+
HEART_BEAT_TIMEOUT = 1.0
|
|
34
|
+
"""Heart beat should fail fast to detect network issues. Recommended: 0.5-2s."""
|
|
35
|
+
HEART_BEAT_RECONNECT = 1.0
|
|
36
|
+
"""Time to wait between a disconnect an a connect to the heartbeat socket."""
|
|
37
|
+
THREAD_JOIN_TIMEOUT = 10.0
|
|
38
|
+
"""Joining threads should be longer, but the key is balancing graceful cleanup with reasonable shutdown times."""
|
|
39
|
+
PROCESS_SHUTDOWN_TIMEOUT = 10.0
|
|
40
|
+
"""Waiting for a process shutdown confirmation message."""
|
|
27
41
|
|
|
28
42
|
class RegistryClient:
|
|
29
43
|
"""
|
|
@@ -35,7 +49,7 @@ class RegistryClient:
|
|
|
35
49
|
registry_req_endpoint: str = None,
|
|
36
50
|
registry_sub_endpoint: str = None,
|
|
37
51
|
registry_hb_endpoint: str = None,
|
|
38
|
-
|
|
52
|
+
timeout: float = REQUEST_TIMEOUT,
|
|
39
53
|
client_id: str = "registry-client",
|
|
40
54
|
):
|
|
41
55
|
"""
|
|
@@ -45,14 +59,15 @@ class RegistryClient:
|
|
|
45
59
|
registry_req_endpoint: ZeroMQ endpoint for REQ-REP socket, defaults to DEFAULT_RS_REQ_PORT on localhost.
|
|
46
60
|
registry_sub_endpoint: ZeroMQ endpoint for SUB socket, defaults to DEFAULT_RS_PUB_PORT on localhost.
|
|
47
61
|
registry_hb_endpoint: ZeroMQ endpoint for Heartbeat socket, defaults to DEFAULT_RS_HB_PORT on localhost.
|
|
48
|
-
|
|
62
|
+
timeout: Timeout for requests in seconds, defaults to 0.5s.
|
|
49
63
|
client_id: client identification, default='registry-client'
|
|
50
64
|
"""
|
|
51
65
|
self.registry_req_endpoint = registry_req_endpoint or f"tcp://localhost:{DEFAULT_RS_REQ_PORT}"
|
|
52
66
|
self.registry_sub_endpoint = registry_sub_endpoint or f"tcp://localhost:{DEFAULT_RS_PUB_PORT}"
|
|
53
67
|
self.registry_hb_endpoint = registry_hb_endpoint or f"tcp://localhost:{DEFAULT_RS_HB_PORT}"
|
|
54
68
|
|
|
55
|
-
self.
|
|
69
|
+
self.timeout = timeout
|
|
70
|
+
self.timeout_ms = int(timeout * 1000)
|
|
56
71
|
self.logger = logger
|
|
57
72
|
|
|
58
73
|
# Service state
|
|
@@ -122,17 +137,20 @@ class RegistryClient:
|
|
|
122
137
|
self.hb_socket.close()
|
|
123
138
|
self.hb_socket = None
|
|
124
139
|
|
|
125
|
-
def _send_request(self, msg_type: MessageType, request: dict[str, Any]) -> dict[str, Any]:
|
|
140
|
+
def _send_request(self, msg_type: MessageType, request: dict[str, Any], timeout: float = None) -> dict[str, Any]:
|
|
126
141
|
"""
|
|
127
142
|
Send a request to the registry and get the response.
|
|
128
143
|
|
|
129
144
|
Args:
|
|
130
145
|
msg_type: the type of message and reply
|
|
131
146
|
request: The request to send
|
|
147
|
+
timeout: The number of seconds to wait, if None, instance variable is used.
|
|
132
148
|
|
|
133
149
|
Returns:
|
|
134
150
|
The response from the registry.
|
|
135
151
|
"""
|
|
152
|
+
timeout_ms = int(timeout * 1000) if timeout else self.timeout_ms
|
|
153
|
+
|
|
136
154
|
try:
|
|
137
155
|
self.logger.debug(f"Sending request: {request}")
|
|
138
156
|
self.req_socket.send_multipart([msg_type.value, json.dumps(request).encode()])
|
|
@@ -140,7 +158,7 @@ class RegistryClient:
|
|
|
140
158
|
if msg_type == MessageType.REQUEST_NO_REPLY:
|
|
141
159
|
return {"success": True}
|
|
142
160
|
|
|
143
|
-
if self.poller.poll(timeout=
|
|
161
|
+
if self.poller.poll(timeout=timeout_ms):
|
|
144
162
|
message_parts = self.req_socket.recv_multipart()
|
|
145
163
|
|
|
146
164
|
if len(message_parts) >= 2:
|
|
@@ -163,7 +181,7 @@ class RegistryClient:
|
|
|
163
181
|
"data": message_parts,
|
|
164
182
|
}
|
|
165
183
|
else:
|
|
166
|
-
self.logger.error(f"Request timed out after {self.
|
|
184
|
+
self.logger.error(f"Request timed out after {self.timeout:.2f}s")
|
|
167
185
|
return {"success": False, "error": "Request timed out"}
|
|
168
186
|
except zmq.ZMQError as exc:
|
|
169
187
|
self.logger.error(f"ZMQ error: {exc}", exc_info=True)
|
|
@@ -187,7 +205,7 @@ class RegistryClient:
|
|
|
187
205
|
self.logger.debug(f"Sending heartbeat request: {request}")
|
|
188
206
|
self.hb_socket.send_string(json.dumps(request))
|
|
189
207
|
|
|
190
|
-
ready_sockets, _, _ = zmq.select([self.hb_socket], [], [], timeout=
|
|
208
|
+
ready_sockets, _, _ = zmq.select([self.hb_socket], [], [], timeout=HEART_BEAT_TIMEOUT)
|
|
191
209
|
|
|
192
210
|
if ready_sockets:
|
|
193
211
|
response_json = self.hb_socket.recv_string()
|
|
@@ -195,9 +213,9 @@ class RegistryClient:
|
|
|
195
213
|
self.logger.debug(f"Received response: {response}")
|
|
196
214
|
return response
|
|
197
215
|
else:
|
|
198
|
-
self.logger.error(f"Request timed out after {
|
|
216
|
+
self.logger.error(f"Request timed out after {HEART_BEAT_TIMEOUT:.2f}s")
|
|
199
217
|
self._disconnect_hb_socket()
|
|
200
|
-
time.sleep(
|
|
218
|
+
time.sleep(HEART_BEAT_RECONNECT)
|
|
201
219
|
self._connect_hb_socket()
|
|
202
220
|
return {"success": False, "error": "Request timed out"}
|
|
203
221
|
|
|
@@ -392,7 +410,7 @@ class RegistryClient:
|
|
|
392
410
|
"""
|
|
393
411
|
request = {"action": "health"}
|
|
394
412
|
|
|
395
|
-
response = self._send_request(MessageType.REQUEST_WITH_REPLY, request)
|
|
413
|
+
response = self._send_request(MessageType.REQUEST_WITH_REPLY, request, timeout=HEALTH_CHECK_TIMEOUT)
|
|
396
414
|
return response.get("success", False)
|
|
397
415
|
|
|
398
416
|
def terminate_registry_server(self) -> bool:
|
|
@@ -400,7 +418,7 @@ class RegistryClient:
|
|
|
400
418
|
Send a terminate request to the service registry server. Returns True when successful.
|
|
401
419
|
"""
|
|
402
420
|
request = {"action": "terminate"}
|
|
403
|
-
response = self._send_request(MessageType.REQUEST_WITH_REPLY, request)
|
|
421
|
+
response = self._send_request(MessageType.REQUEST_WITH_REPLY, request, timeout=PROCESS_SHUTDOWN_TIMEOUT)
|
|
404
422
|
return response.get("success", False)
|
|
405
423
|
|
|
406
424
|
def server_status(self) -> dict[str, Any]:
|
|
@@ -459,7 +477,7 @@ class RegistryClient:
|
|
|
459
477
|
def stop_heartbeat(self) -> None:
|
|
460
478
|
self._hb_stop_event.set()
|
|
461
479
|
if self._hb_thread.is_alive():
|
|
462
|
-
self._hb_thread.join(timeout=
|
|
480
|
+
self._hb_thread.join(timeout=THREAD_JOIN_TIMEOUT)
|
|
463
481
|
|
|
464
482
|
def close(self) -> None:
|
|
465
483
|
"""Clean up resources."""
|
|
@@ -488,7 +506,7 @@ class AsyncRegistryClient:
|
|
|
488
506
|
registry_req_endpoint: str = None,
|
|
489
507
|
registry_sub_endpoint: str = None,
|
|
490
508
|
registry_hb_endpoint: str = None,
|
|
491
|
-
|
|
509
|
+
timeout: float = REQUEST_TIMEOUT,
|
|
492
510
|
client_id: str = "registry-client",
|
|
493
511
|
):
|
|
494
512
|
"""
|
|
@@ -498,14 +516,15 @@ class AsyncRegistryClient:
|
|
|
498
516
|
registry_req_endpoint: ZeroMQ endpoint for REQ-REP socket, defaults to DEFAULT_RS_REQ_PORT on localhost.
|
|
499
517
|
registry_sub_endpoint: ZeroMQ endpoint for SUB socket, defaults to DEFAULT_RS_PUB_PORT on localhost.
|
|
500
518
|
registry_hb_endpoint: ZeroMQ endpoint for heartbeat socket, defaults to DEFAULT_RS_HB_PORT on localhost.
|
|
501
|
-
|
|
519
|
+
timeout: Timeout for requests in seconds, defaults to 5000.
|
|
502
520
|
client_id: client identification, default='registry-client'
|
|
503
521
|
"""
|
|
504
522
|
self.registry_req_endpoint = registry_req_endpoint or f"tcp://localhost:{DEFAULT_RS_REQ_PORT}"
|
|
505
523
|
self.registry_sub_endpoint = registry_sub_endpoint or f"tcp://localhost:{DEFAULT_RS_PUB_PORT}"
|
|
506
524
|
self.registry_hb_endpoint = registry_hb_endpoint or f"tcp://localhost:{DEFAULT_RS_HB_PORT}"
|
|
507
525
|
|
|
508
|
-
self.
|
|
526
|
+
self.timeout = timeout
|
|
527
|
+
self.timeout_ms = int(timeout * 1000)
|
|
509
528
|
self.logger = logging.getLogger("egse.registry.client")
|
|
510
529
|
|
|
511
530
|
# Service state
|
|
@@ -585,7 +604,7 @@ class AsyncRegistryClient:
|
|
|
585
604
|
return self._service_cache_lock
|
|
586
605
|
|
|
587
606
|
async def _send_request(
|
|
588
|
-
self, msg_type: MessageType, request: dict[str, Any], timeout:
|
|
607
|
+
self, msg_type: MessageType, request: dict[str, Any], timeout: float = None
|
|
589
608
|
) -> dict[str, Any]:
|
|
590
609
|
"""
|
|
591
610
|
Send a request to the registry and get the response.
|
|
@@ -593,14 +612,14 @@ class AsyncRegistryClient:
|
|
|
593
612
|
Args:
|
|
594
613
|
msg_type: the type of message and reply
|
|
595
614
|
request: The request to send to the service registry server.
|
|
596
|
-
timeout: The number of
|
|
615
|
+
timeout: The number of seconds to wait, if None, instance variable is used.
|
|
597
616
|
|
|
598
617
|
Returns:
|
|
599
618
|
The response from the registry as a dictionary.
|
|
600
619
|
"""
|
|
601
620
|
self.logger.debug(f"Sending request: {request}")
|
|
602
621
|
|
|
603
|
-
timeout =
|
|
622
|
+
timeout = timeout or self.timeout
|
|
604
623
|
try:
|
|
605
624
|
await self.req_socket.send_multipart([msg_type.value, json.dumps(request).encode()])
|
|
606
625
|
|
|
@@ -636,32 +655,28 @@ class AsyncRegistryClient:
|
|
|
636
655
|
self.logger.error(f"Error sending request: {exc}", exc_info=True)
|
|
637
656
|
return {"success": False, "error": str(exc)}
|
|
638
657
|
|
|
639
|
-
async def _send_heartbeat(self, request: dict[str, Any]
|
|
658
|
+
async def _send_heartbeat(self, request: dict[str, Any]) -> dict[str, Any]:
|
|
640
659
|
"""
|
|
641
660
|
Send a heartbreak request to the registry and get the response.
|
|
642
661
|
|
|
643
662
|
Args:
|
|
644
663
|
request: The request to send to the service registry server.
|
|
645
|
-
timeout: The number of milliseconds to wait
|
|
646
664
|
|
|
647
665
|
Returns:
|
|
648
666
|
The response from the registry as a dictionary.
|
|
649
667
|
"""
|
|
650
668
|
|
|
651
|
-
timeout = (timeout or self.request_timeout) / 1000
|
|
652
669
|
try:
|
|
653
|
-
# Send the request
|
|
654
670
|
self.logger.debug(f"Sending heartbeat request: {request}")
|
|
655
671
|
await self.hb_socket.send_string(json.dumps(request))
|
|
656
672
|
|
|
657
|
-
# Wait for the response with timeout
|
|
658
673
|
try:
|
|
659
|
-
response_json = await asyncio.wait_for(self.hb_socket.recv_string(), timeout=
|
|
674
|
+
response_json = await asyncio.wait_for(self.hb_socket.recv_string(), timeout=HEART_BEAT_TIMEOUT)
|
|
660
675
|
response = json.loads(response_json)
|
|
661
676
|
self.logger.debug(f"Received heartbeat response: {response = }")
|
|
662
677
|
return response
|
|
663
678
|
except asyncio.TimeoutError:
|
|
664
|
-
self.logger.error(f"Heartbeat request timed out after {
|
|
679
|
+
self.logger.error(f"Heartbeat request timed out after {HEART_BEAT_TIMEOUT:.2f}s")
|
|
665
680
|
# Reset the socket to avoid invalid state
|
|
666
681
|
self.hb_socket.close()
|
|
667
682
|
self.hb_socket = self.context.socket(zmq.REQ)
|
|
@@ -698,7 +713,7 @@ class AsyncRegistryClient:
|
|
|
698
713
|
The service ID if successful, None otherwise
|
|
699
714
|
"""
|
|
700
715
|
# Prepare service info
|
|
701
|
-
service_info = {"name": name, "host": host, "port": port}
|
|
716
|
+
service_info: dict[str, Any] = {"name": name, "host": host, "port": port}
|
|
702
717
|
|
|
703
718
|
# Add optional fields
|
|
704
719
|
if service_type:
|
|
@@ -854,7 +869,7 @@ class AsyncRegistryClient:
|
|
|
854
869
|
# Wait for tasks to complete (with timeout)
|
|
855
870
|
if self._tasks:
|
|
856
871
|
try:
|
|
857
|
-
await asyncio.wait(self._tasks, timeout=
|
|
872
|
+
await asyncio.wait(self._tasks, timeout=TASK_COMPLETION_TIMEOUT)
|
|
858
873
|
except asyncio.CancelledError:
|
|
859
874
|
pass
|
|
860
875
|
|
|
@@ -896,7 +911,9 @@ class AsyncRegistryClient:
|
|
|
896
911
|
try:
|
|
897
912
|
# Use a timeout to allow for clean shutdown
|
|
898
913
|
try:
|
|
899
|
-
message = await asyncio.wait_for(
|
|
914
|
+
message = await asyncio.wait_for(
|
|
915
|
+
self.sub_socket.recv_multipart(), timeout=EVENT_POLL_TIMEOUT
|
|
916
|
+
)
|
|
900
917
|
except asyncio.TimeoutError:
|
|
901
918
|
continue
|
|
902
919
|
|
|
@@ -942,7 +959,7 @@ class AsyncRegistryClient:
|
|
|
942
959
|
Update the service cache based on registry events.
|
|
943
960
|
|
|
944
961
|
Args:
|
|
945
|
-
event_type: Type of event
|
|
962
|
+
event_type: Type of the event.
|
|
946
963
|
event: Event data
|
|
947
964
|
"""
|
|
948
965
|
async with self._get_service_cache_lock():
|
|
@@ -1097,7 +1114,7 @@ class AsyncRegistryClient:
|
|
|
1097
1114
|
"""
|
|
1098
1115
|
request = {"action": "health"}
|
|
1099
1116
|
|
|
1100
|
-
response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request)
|
|
1117
|
+
response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request, timeout=HEALTH_CHECK_TIMEOUT)
|
|
1101
1118
|
return response.get("success", False)
|
|
1102
1119
|
|
|
1103
1120
|
async def terminate_registry_server(self) -> bool:
|
|
@@ -1105,7 +1122,7 @@ class AsyncRegistryClient:
|
|
|
1105
1122
|
Send a terminate request to the service registry server. Returns True when successful.
|
|
1106
1123
|
"""
|
|
1107
1124
|
request = {"action": "terminate"}
|
|
1108
|
-
response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request)
|
|
1125
|
+
response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request, timeout=PROCESS_SHUTDOWN_TIMEOUT)
|
|
1109
1126
|
return response.get("success", False)
|
|
1110
1127
|
|
|
1111
1128
|
async def server_status(self) -> dict[str, Any]:
|
|
@@ -1115,7 +1132,7 @@ class AsyncRegistryClient:
|
|
|
1115
1132
|
request = {
|
|
1116
1133
|
"action": "info",
|
|
1117
1134
|
}
|
|
1118
|
-
response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request
|
|
1135
|
+
response = await self._send_request(MessageType.REQUEST_WITH_REPLY, request)
|
|
1119
1136
|
return response
|
|
1120
1137
|
|
|
1121
1138
|
async def close(self) -> None:
|
|
@@ -554,7 +554,6 @@ async def status(
|
|
|
554
554
|
registry_req_endpoint=f"tcp://{host}:{req_port}",
|
|
555
555
|
registry_sub_endpoint=f"tcp://{host}:{pub_port}",
|
|
556
556
|
registry_hb_endpoint=f"tcp://{host}:{hb_port}",
|
|
557
|
-
request_timeout=5000, # 5 second timeout
|
|
558
557
|
) as client:
|
|
559
558
|
response = await client.server_status()
|
|
560
559
|
|
|
@@ -585,7 +584,6 @@ async def stop(
|
|
|
585
584
|
registry_req_endpoint=f"tcp://{host}:{req_port}",
|
|
586
585
|
registry_sub_endpoint=f"tcp://{host}:{pub_port}",
|
|
587
586
|
registry_hb_endpoint=f"tcp://{host}:{hb_port}",
|
|
588
|
-
request_timeout=5000, # 5 second timeout
|
|
589
587
|
) as client:
|
|
590
588
|
response = await client.terminate_registry_server()
|
|
591
589
|
|
|
index f41b610..ac88403 100644
|
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|