cgse 0.16.0__tar.gz → 0.16.2__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.16.0 → cgse-0.16.2}/PKG-INFO +1 -1
- cgse-0.16.2/docs/images/cli-cgse.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/user_guide/cli.md +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/env.py +9 -1
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/system.py +24 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/_start.py +8 -7
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/_stop.py +8 -6
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/settings.yaml +25 -15
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/confman/__init__.py +12 -16
- {cgse-0.16.0/libs/cgse-common → cgse-0.16.2/libs/cgse-core}/src/egse/connect.py +45 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/dummy.py +7 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/logger/__init__.py +9 -9
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/notifyhub/__init__.py +4 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/notifyhub/server.py +8 -5
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/procman/__init__.py +17 -17
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/registry/__init__.py +4 -4
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/storage/__init__.py +16 -18
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +6 -4
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +5 -20
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-fits/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/pyproject.toml +1 -1
- {cgse-0.16.0 → cgse-0.16.2}/service_registry.db +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/service_registry.db-shm +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/service_registry.db-wal +0 -0
- cgse-0.16.0/docs/images/cli-cgse.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/.gitignore +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/buffer_vat.log +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/buffer_vat.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/bump.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/conftest.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/bits.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/calibration.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/command.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/config.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/control.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/counter.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/decorators.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/device.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/dicts.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/dummy.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/env.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/exceptions.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/heartbeat.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/hk.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/listener.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/metrics.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/mixin.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/monitoring.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/observer.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/obsid.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/persistence.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/plugin.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/process.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/reload.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/settings.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/setup.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/api/system.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/custom_theme/main.html +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/docs.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/installation.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/nox.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/uv.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/getting_started.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/help.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/images/grafana-queries.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/initialize.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/libs/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/package_list.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/projects/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/roadmap.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/stylesheets/custom.css +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/stylesheets/extra.css +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/tutorial.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/docs/user_guide/index.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/duckdb_metrics.db +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/duckdb_metrics.db.wal +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/identifier.sqlite +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/justfile +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/justfile +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/service_registry.db +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/hk.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/log.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/ratelimit.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/scpi.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/socketdevice.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_ratelimit.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_avoidance.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_coordinates_plot.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_point.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_reference_frames.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-coordinates/tests/test_refmodel.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/.envrc.disabled +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/service_registry.db +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/async_control.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/async_control_claude.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/control.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/metricshub/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/metricshub/server.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/mixin.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/notifyhub/test.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/procman/procman_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/procman/procman_ui.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/registry/client.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/registry/server.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/fixtures/services.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_async_control.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.16.0/libs/cgse-common → cgse-0.16.2/libs/cgse-core}/tests/test_connect.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_dummy.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_event_notification.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_logger.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_mixin.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/mkdocs.yml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/noxfile.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/overrides/.icons/custom/gear.svg +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/src/cgse_tools/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/justfile +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/temperature_readings.log +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/ruff.toml +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/scratch/advanced-process-monitoring.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/scratch/live-process-monitoring.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/scratch/match-case.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/scratch/processes.json +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/scratch/simple-process-monitoring.py +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/temperature_readings.log +0 -0
- {cgse-0.16.0 → cgse-0.16.2}/test_service_registry.db +0 -0
|
Binary file
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# CLI Commands CGSE
|
|
3
3
|
|
|
4
4
|
The CGSE comes with a suite of CLI commands to start and stop services, get
|
|
5
|
-
status reports and check the installation.It's actually a suite of `cgse`
|
|
5
|
+
status reports and check the installation. It's actually a suite of `cgse`
|
|
6
6
|
sub-commands that is extendable by external packages. This section will
|
|
7
7
|
describe the commands that are available from the `cgse` packages.
|
|
8
8
|
|
|
@@ -384,7 +384,7 @@ def set_log_file_location(location: str | Path | None):
|
|
|
384
384
|
_env.set("LOG_FILE_LOCATION", location)
|
|
385
385
|
|
|
386
386
|
|
|
387
|
-
def get_log_file_location(site_id: str = None) -> str:
|
|
387
|
+
def get_log_file_location(site_id: str = None, check_exists: bool = False) -> str:
|
|
388
388
|
"""
|
|
389
389
|
Returns the full path of the location of the log files. The log file location is read from the environment
|
|
390
390
|
variable `${PROJECT}_LOG_FILE_LOCATION`. The location shall be independent of any setting that is subject to change.
|
|
@@ -392,8 +392,12 @@ def get_log_file_location(site_id: str = None) -> str:
|
|
|
392
392
|
If the environment variable is not set, a default log file location is created from the data storage location as
|
|
393
393
|
follows: `<PROJECT>_DATA_STORAGE_LOCATION/<SITE_ID>/log`.
|
|
394
394
|
|
|
395
|
+
There is no check for the existence of the returned location. The caller function shall check if the
|
|
396
|
+
returned value is a directory and if it exists.
|
|
397
|
+
|
|
395
398
|
Args:
|
|
396
399
|
site_id: the site identifier
|
|
400
|
+
check_exists: check if the location that will be returned is a directory and exists
|
|
397
401
|
|
|
398
402
|
Returns:
|
|
399
403
|
The full path of location of the log files as a string.
|
|
@@ -417,6 +421,10 @@ def get_log_file_location(site_id: str = None) -> str:
|
|
|
417
421
|
data_root = data_root.rstrip("/")
|
|
418
422
|
log_data_root = f"{data_root}/log"
|
|
419
423
|
|
|
424
|
+
if check_exists:
|
|
425
|
+
if not Path(log_data_root).is_dir():
|
|
426
|
+
raise ValueError(f"The location that was constructed doesn't exist: {log_data_root}")
|
|
427
|
+
|
|
420
428
|
return log_data_root
|
|
421
429
|
|
|
422
430
|
|
|
@@ -48,6 +48,7 @@ from typing import Callable
|
|
|
48
48
|
from typing import Iterable
|
|
49
49
|
from typing import List
|
|
50
50
|
from typing import Optional
|
|
51
|
+
from typing import TextIO
|
|
51
52
|
from typing import Tuple
|
|
52
53
|
from typing import Type
|
|
53
54
|
from typing import Union
|
|
@@ -60,6 +61,7 @@ from rich.tree import Tree
|
|
|
60
61
|
from typer.core import TyperCommand
|
|
61
62
|
|
|
62
63
|
import signal
|
|
64
|
+
from egse.env import get_log_file_location
|
|
63
65
|
from egse.log import logger
|
|
64
66
|
|
|
65
67
|
EPOCH_1958_1970 = 378691200
|
|
@@ -2307,6 +2309,28 @@ def caffeinate(pid: int = None):
|
|
|
2307
2309
|
subprocess.Popen([shutil.which("caffeinate"), "-i", "-w", str(pid)])
|
|
2308
2310
|
|
|
2309
2311
|
|
|
2312
|
+
def redirect_output_to_log(output_fn: str, append: bool = False) -> TextIO:
|
|
2313
|
+
"""
|
|
2314
|
+
Open file in the log folder where process output will be redirected.
|
|
2315
|
+
|
|
2316
|
+
When no location can be determined, the user's home directory will be used.
|
|
2317
|
+
|
|
2318
|
+
The file is opened in text mode at the given location and the stream (file descriptor) will be returned.
|
|
2319
|
+
"""
|
|
2320
|
+
|
|
2321
|
+
try:
|
|
2322
|
+
location = get_log_file_location()
|
|
2323
|
+
output_path = Path(location, output_fn).expanduser()
|
|
2324
|
+
except ValueError:
|
|
2325
|
+
output_path = Path.home() / output_fn
|
|
2326
|
+
|
|
2327
|
+
out = open(output_path, "a" if append else "w")
|
|
2328
|
+
|
|
2329
|
+
logger.info(f"Output will be redirected to {output_path!s}")
|
|
2330
|
+
|
|
2331
|
+
return out
|
|
2332
|
+
|
|
2333
|
+
|
|
2310
2334
|
ignore_m_warning("egse.system")
|
|
2311
2335
|
|
|
2312
2336
|
if __name__ == "__main__":
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import subprocess
|
|
2
2
|
import sys
|
|
3
|
-
from pathlib import Path
|
|
4
3
|
|
|
5
4
|
import rich
|
|
6
5
|
|
|
6
|
+
from egse.system import redirect_output_to_log
|
|
7
|
+
|
|
7
8
|
|
|
8
9
|
def start_rm_cs(log_level: str):
|
|
9
10
|
rich.print("Starting the service registry manager core service...")
|
|
10
11
|
|
|
11
|
-
out =
|
|
12
|
+
out = redirect_output_to_log(".rm_cs.start.log")
|
|
12
13
|
|
|
13
14
|
subprocess.Popen(
|
|
14
15
|
[sys.executable, "-m", "egse.registry.server", "start", "--log-level", log_level],
|
|
@@ -22,7 +23,7 @@ def start_rm_cs(log_level: str):
|
|
|
22
23
|
def start_log_cs():
|
|
23
24
|
rich.print("Starting the logging core service...")
|
|
24
25
|
|
|
25
|
-
out =
|
|
26
|
+
out = redirect_output_to_log(".log_cs.start.log")
|
|
26
27
|
|
|
27
28
|
subprocess.Popen(
|
|
28
29
|
[sys.executable, "-m", "egse.logger.log_cs", "start"],
|
|
@@ -36,7 +37,7 @@ def start_log_cs():
|
|
|
36
37
|
def start_sm_cs():
|
|
37
38
|
rich.print("Starting the storage manager core service...")
|
|
38
39
|
|
|
39
|
-
out =
|
|
40
|
+
out = redirect_output_to_log(".sm_cs.start.log")
|
|
40
41
|
|
|
41
42
|
subprocess.Popen(
|
|
42
43
|
[sys.executable, "-m", "egse.storage.storage_cs", "start"],
|
|
@@ -50,7 +51,7 @@ def start_sm_cs():
|
|
|
50
51
|
def start_cm_cs():
|
|
51
52
|
rich.print("Starting the configuration manager core service...")
|
|
52
53
|
|
|
53
|
-
out =
|
|
54
|
+
out = redirect_output_to_log(".cm_cs.start.log")
|
|
54
55
|
|
|
55
56
|
subprocess.Popen(
|
|
56
57
|
[sys.executable, "-m", "egse.confman.confman_cs", "start"],
|
|
@@ -64,7 +65,7 @@ def start_cm_cs():
|
|
|
64
65
|
def start_pm_cs():
|
|
65
66
|
rich.print("Starting the process manager core service...")
|
|
66
67
|
|
|
67
|
-
out =
|
|
68
|
+
out = redirect_output_to_log(".pm_cs.start.log")
|
|
68
69
|
|
|
69
70
|
subprocess.Popen(
|
|
70
71
|
[sys.executable, "-m", "egse.procman.procman_cs", "start"],
|
|
@@ -78,7 +79,7 @@ def start_pm_cs():
|
|
|
78
79
|
def start_notifyhub():
|
|
79
80
|
rich.print("Starting the notification hub core service...")
|
|
80
81
|
|
|
81
|
-
out =
|
|
82
|
+
out = redirect_output_to_log(".nh_cs.start.log")
|
|
82
83
|
|
|
83
84
|
subprocess.Popen(
|
|
84
85
|
[sys.executable, "-m", "egse.notifyhub.server", "start"],
|
|
@@ -8,13 +8,14 @@ import rich
|
|
|
8
8
|
from egse.log import logger
|
|
9
9
|
from egse.process import is_process_running
|
|
10
10
|
from egse.system import Timer
|
|
11
|
+
from egse.system import redirect_output_to_log
|
|
11
12
|
from egse.system import waiting_for
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def stop_rm_cs():
|
|
15
16
|
rich.print("Terminating the service registry manager core service...")
|
|
16
17
|
|
|
17
|
-
out =
|
|
18
|
+
out = redirect_output_to_log(".rm_cs.stop.log")
|
|
18
19
|
|
|
19
20
|
subprocess.Popen(
|
|
20
21
|
[sys.executable, "-m", "egse.registry.server", "stop"],
|
|
@@ -34,7 +35,7 @@ def stop_rm_cs():
|
|
|
34
35
|
def stop_log_cs():
|
|
35
36
|
rich.print("Terminating the logging core service...")
|
|
36
37
|
|
|
37
|
-
out =
|
|
38
|
+
out = redirect_output_to_log(".log_cs.stop.log")
|
|
38
39
|
|
|
39
40
|
subprocess.Popen(
|
|
40
41
|
[sys.executable, "-m", "egse.logger.log_cs", "stop"],
|
|
@@ -48,7 +49,7 @@ def stop_log_cs():
|
|
|
48
49
|
def stop_sm_cs():
|
|
49
50
|
rich.print("Terminating the storage manager core service...")
|
|
50
51
|
|
|
51
|
-
out =
|
|
52
|
+
out = redirect_output_to_log(".sm_cs.stop.log")
|
|
52
53
|
|
|
53
54
|
subprocess.Popen(
|
|
54
55
|
[sys.executable, "-m", "egse.storage.storage_cs", "stop"],
|
|
@@ -68,7 +69,7 @@ def stop_sm_cs():
|
|
|
68
69
|
def stop_cm_cs():
|
|
69
70
|
rich.print("Terminating the configuration manager core service...")
|
|
70
71
|
|
|
71
|
-
out =
|
|
72
|
+
out = redirect_output_to_log(".cm_cs.stop.log")
|
|
72
73
|
|
|
73
74
|
subprocess.Popen(
|
|
74
75
|
[sys.executable, "-m", "egse.confman.confman_cs", "stop"],
|
|
@@ -88,7 +89,8 @@ def stop_cm_cs():
|
|
|
88
89
|
def stop_pm_cs():
|
|
89
90
|
rich.print("Terminating the process manager core service...")
|
|
90
91
|
|
|
91
|
-
out =
|
|
92
|
+
out = redirect_output_to_log(".pm_cs.stop.log")
|
|
93
|
+
|
|
92
94
|
|
|
93
95
|
subprocess.Popen(
|
|
94
96
|
[sys.executable, "-m", "egse.procman.procman_cs", "stop"],
|
|
@@ -108,7 +110,7 @@ def stop_pm_cs():
|
|
|
108
110
|
def stop_notifyhub():
|
|
109
111
|
rich.print("Terminating the notification hub core service...")
|
|
110
112
|
|
|
111
|
-
out =
|
|
113
|
+
out = redirect_output_to_log(".nh_cs.stop.log")
|
|
112
114
|
|
|
113
115
|
subprocess.Popen(
|
|
114
116
|
[sys.executable, "-m", "egse.notifyhub.server", "stop"],
|
|
@@ -3,7 +3,12 @@ PACKAGES:
|
|
|
3
3
|
|
|
4
4
|
Service Registry:
|
|
5
5
|
|
|
6
|
-
CLEANUP_INTERVAL:
|
|
6
|
+
CLEANUP_INTERVAL: 30
|
|
7
|
+
REQUESTER_PORT: 6100
|
|
8
|
+
PUBLISHER_PORT: 6101
|
|
9
|
+
HEARTBEAT_PORT: 6102
|
|
10
|
+
DATABASE_PATH: service_registry.db
|
|
11
|
+
|
|
7
12
|
|
|
8
13
|
Logging Control Server: # LOG_CS
|
|
9
14
|
|
|
@@ -11,8 +16,8 @@ Logging Control Server: # LOG_CS
|
|
|
11
16
|
PROCESS_NAME: log_cs
|
|
12
17
|
MAX_NR_LOG_FILES: 20 # The maximum number of log files that will be maintained in a roll-over
|
|
13
18
|
MAX_SIZE_LOG_FILES: 20 # The maximum size one log file can become
|
|
14
|
-
RECEIVER_PORT:
|
|
15
|
-
COMMANDER_PORT:
|
|
19
|
+
RECEIVER_PORT: 6105
|
|
20
|
+
COMMANDER_PORT: 6106
|
|
16
21
|
TEXTUALOG_IP_ADDRESS: 127.0.0.1 # The IP address of the textualog listening server
|
|
17
22
|
TEXTUALOG_LISTENING_PORT: 19996 # The port number on which the textualog server is listening
|
|
18
23
|
|
|
@@ -20,9 +25,9 @@ Configuration Manager Control Server: # CM_CS
|
|
|
20
25
|
|
|
21
26
|
SERVICE_TYPE: CM_CS
|
|
22
27
|
PROCESS_NAME: cm_cs
|
|
23
|
-
COMMANDING_PORT:
|
|
24
|
-
MONITORING_PORT:
|
|
25
|
-
SERVICE_PORT:
|
|
28
|
+
COMMANDING_PORT: 6110 # The port on which the controller listens to commands - REQ-REP
|
|
29
|
+
MONITORING_PORT: 6111 # The port on which the controller sends periodic status information of the device - PUB-SUB
|
|
30
|
+
SERVICE_PORT: 6112 # The port on which the controller listens for configuration and administration - REQ-REP
|
|
26
31
|
DELAY: 1 # The delay time between publishing status information [seconds]
|
|
27
32
|
STORAGE_MNEMONIC: CM # The mnemonic to be used in the filename storing the housekeeping data
|
|
28
33
|
|
|
@@ -30,30 +35,35 @@ Storage Manager Control Server: # SM_CS
|
|
|
30
35
|
|
|
31
36
|
SERVICE_TYPE: SM_CS
|
|
32
37
|
PROCESS_NAME: sm_cs
|
|
33
|
-
COMMANDING_PORT:
|
|
34
|
-
MONITORING_PORT:
|
|
35
|
-
SERVICE_PORT:
|
|
38
|
+
COMMANDING_PORT: 6115 # The port on which the controller listens to commands - REQ-REP
|
|
39
|
+
MONITORING_PORT: 6116 # The port on which the controller sends periodic status information of the device - PUB-SUB
|
|
40
|
+
SERVICE_PORT: 6117 # The port on which the controller listens for configuration and administration - REQ-REP
|
|
36
41
|
DELAY: 1 # The delay time between publishing status information [seconds]
|
|
37
42
|
|
|
38
43
|
Process Manager Control Server: # PM_CS
|
|
39
44
|
|
|
40
45
|
SERVICE_TYPE: PM_CS
|
|
41
46
|
PROCESS_NAME: pm_cs
|
|
42
|
-
COMMANDING_PORT:
|
|
43
|
-
MONITORING_PORT:
|
|
44
|
-
SERVICE_PORT:
|
|
47
|
+
COMMANDING_PORT: 6120 # The port on which the controller listens to commands - REQ-REP
|
|
48
|
+
MONITORING_PORT: 6121 # The port on which the controller sends periodic status information of the devide - PUB-SUB
|
|
49
|
+
SERVICE_PORT: 6122 # The port number on which the controller listens for configuration and administration - REQ-REP
|
|
45
50
|
DELAY: 1 # The delay time between publishing status information [seconds]
|
|
46
51
|
STORAGE_MNEMONIC: PM # The mnemonic to be used in the filename storing the housekeeping data
|
|
47
52
|
|
|
48
53
|
Notify Hub:
|
|
49
54
|
|
|
50
55
|
SERVICE_TYPE: NOTIFY_HUB
|
|
56
|
+
SERVICE_ID: nh_cs_1
|
|
51
57
|
PROCESS_NAME: nh_cs
|
|
52
|
-
COLLECTOR_PORT:
|
|
53
|
-
PUBLISHER_PORT:
|
|
54
|
-
REQUESTS_PORT:
|
|
58
|
+
COLLECTOR_PORT: 6125
|
|
59
|
+
PUBLISHER_PORT: 6126
|
|
60
|
+
REQUESTS_PORT: 6167
|
|
55
61
|
|
|
56
62
|
Metrics Hub:
|
|
57
63
|
|
|
58
64
|
SERVICE_TYPE: METRICS_HUB
|
|
65
|
+
SERVICE_ID: mh_cs_1
|
|
59
66
|
PROCESS_NAME: mh_cs
|
|
67
|
+
COLLECTOR_PORT: 6130
|
|
68
|
+
PUBLISHER_PORT: 6131
|
|
69
|
+
REQUESTS_PORT: 6132
|
|
@@ -128,6 +128,7 @@ from egse.command import ClientServerCommand
|
|
|
128
128
|
from egse.command import stringify_function_call
|
|
129
129
|
from egse.config import find_file
|
|
130
130
|
from egse.config import find_files
|
|
131
|
+
from egse.connect import get_endpoint
|
|
131
132
|
from egse.control import ControlServer
|
|
132
133
|
from egse.control import is_control_server_active
|
|
133
134
|
from egse.decorators import dynamic_interface
|
|
@@ -992,27 +993,22 @@ class ConfigurationManagerProxy(Proxy, ConfigurationManagerInterface):
|
|
|
992
993
|
"""
|
|
993
994
|
The Configuration Manager Proxy class is used to connect to the Configuration Manager
|
|
994
995
|
Control Server and send commands and requests for the configuration manager.
|
|
996
|
+
|
|
997
|
+
When the port number passed is 0 (zero), the endpoint is requested from the
|
|
998
|
+
service registry.
|
|
999
|
+
|
|
1000
|
+
Args:
|
|
1001
|
+
protocol: the transport protocol [default is taken from settings file]
|
|
1002
|
+
hostname: location of the control server (IP address) [default is taken
|
|
1003
|
+
from settings file]
|
|
1004
|
+
port: TCP port on which the control server is listening for commands
|
|
1005
|
+
[default is taken from settings file]
|
|
995
1006
|
"""
|
|
996
1007
|
|
|
997
1008
|
def __init__(
|
|
998
1009
|
self, protocol: str = PROTOCOL, hostname: str = HOSTNAME, port: int = COMMANDING_PORT, timeout=PROXY_TIMEOUT
|
|
999
1010
|
):
|
|
1000
|
-
|
|
1001
|
-
Args:
|
|
1002
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
1003
|
-
hostname: location of the control server (IP address) [default is taken
|
|
1004
|
-
from settings file]
|
|
1005
|
-
port: TCP port on which the control server is listening for commands
|
|
1006
|
-
[default is taken from settings file]
|
|
1007
|
-
"""
|
|
1008
|
-
if port == 0:
|
|
1009
|
-
with RegistryClient() as reg:
|
|
1010
|
-
endpoint = reg.get_endpoint(settings.SERVICE_TYPE)
|
|
1011
|
-
|
|
1012
|
-
if not endpoint:
|
|
1013
|
-
raise RuntimeError(f"No service registered as {settings.SERVICE_TYPE}")
|
|
1014
|
-
else:
|
|
1015
|
-
endpoint = connect_address(protocol, hostname, port)
|
|
1011
|
+
endpoint = get_endpoint(settings.SERVICE_TYPE, protocol, hostname, port)
|
|
1016
1012
|
|
|
1017
1013
|
super().__init__(endpoint, timeout=timeout)
|
|
1018
1014
|
|
|
@@ -4,12 +4,57 @@ import time
|
|
|
4
4
|
from enum import Enum
|
|
5
5
|
|
|
6
6
|
from egse.log import logging
|
|
7
|
+
from egse.registry.client import RegistryClient
|
|
8
|
+
from egse.zmq_ser import connect_address
|
|
7
9
|
|
|
8
10
|
logger = logging.getLogger("egse.connect")
|
|
9
11
|
|
|
10
12
|
# random.seed(time.monotonic()) # uncomment for testing only, main application should set a seed.
|
|
11
13
|
|
|
12
14
|
|
|
15
|
+
def get_endpoint(
|
|
16
|
+
service_type: str,
|
|
17
|
+
protocol: str = None,
|
|
18
|
+
hostname: str = None,
|
|
19
|
+
port: int = 0,
|
|
20
|
+
):
|
|
21
|
+
"""
|
|
22
|
+
Returns the endpoint for a service, either from the registry or by constructing
|
|
23
|
+
it from protocol, hostname and port.
|
|
24
|
+
|
|
25
|
+
If port is 0 (the default), attempt to retrieve the endpoint from the service registry.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
service_type: The service type to look up in the registry.
|
|
29
|
+
protocol: Protocol to use if constructing the endpoint.
|
|
30
|
+
hostname: Hostname to use if constructing the endpoint.
|
|
31
|
+
port: Port to use if constructing the endpoint.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
The endpoint string.
|
|
35
|
+
|
|
36
|
+
Raises:
|
|
37
|
+
RuntimeError: If no endpoint can be determined.
|
|
38
|
+
"""
|
|
39
|
+
endpoint = None
|
|
40
|
+
|
|
41
|
+
if port == 0:
|
|
42
|
+
with RegistryClient() as reg:
|
|
43
|
+
endpoint = reg.get_endpoint(service_type)
|
|
44
|
+
if endpoint:
|
|
45
|
+
logger.info(f"Endpoint for {service_type} found in registry: {endpoint}")
|
|
46
|
+
else:
|
|
47
|
+
logger.warning(f"No endpoint for {service_type} found in registry.")
|
|
48
|
+
|
|
49
|
+
if not endpoint:
|
|
50
|
+
if port == 0:
|
|
51
|
+
raise RuntimeError(f"No service registered as {service_type} and no port provided.")
|
|
52
|
+
endpoint = connect_address(protocol, hostname, port)
|
|
53
|
+
logger.info(f"Endpoint constructed from protocol/hostname/port: {endpoint}")
|
|
54
|
+
|
|
55
|
+
return endpoint
|
|
56
|
+
|
|
57
|
+
|
|
13
58
|
class ConnectionState(Enum):
|
|
14
59
|
DISCONNECTED = "disconnected"
|
|
15
60
|
CONNECTING = "connecting"
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"""
|
|
2
2
|
This module provides a dummy implementation for classes of the commanding chain.
|
|
3
3
|
|
|
4
|
+
This is only a simplified implementation that is used for testing purposes.
|
|
5
|
+
|
|
6
|
+
If you need a more elaborate example of a device and commanding chain implementation,
|
|
7
|
+
check out the `cgse-dummy` project in PyPI. That project is a full implementation of
|
|
8
|
+
all aspects in device access, commanding, and services. It also handles both
|
|
9
|
+
synchronous and asynchronous implementations.
|
|
10
|
+
|
|
4
11
|
Start the control server with:
|
|
5
12
|
|
|
6
13
|
py -m egse.dummy start-cs
|
|
@@ -37,6 +37,7 @@ from egse.log import PackageFilter
|
|
|
37
37
|
from egse.log import egse_logger
|
|
38
38
|
from egse.log import logger
|
|
39
39
|
from egse.log import root_logger
|
|
40
|
+
from egse.registry.client import RegistryClient
|
|
40
41
|
from egse.settings import Settings
|
|
41
42
|
from egse.system import is_in_ipython
|
|
42
43
|
from egse.system import type_name
|
|
@@ -62,26 +63,25 @@ def get_log_file_name():
|
|
|
62
63
|
return settings.get("FILENAME", "general.log")
|
|
63
64
|
|
|
64
65
|
|
|
65
|
-
def get_endpoint_from_registry(
|
|
66
|
+
def get_endpoint_from_registry(service_type: str, port_type: str = "commander"):
|
|
66
67
|
"""Returns the endpoint that was constructed from information from the service registry."""
|
|
67
|
-
from egse.registry.client import RegistryClient
|
|
68
68
|
|
|
69
69
|
# logger.debug(f"Calling get_endpoint_from_registry(\"{port}\")")
|
|
70
70
|
|
|
71
71
|
try:
|
|
72
72
|
with RegistryClient() as reg:
|
|
73
|
-
if
|
|
74
|
-
endpoint = reg.get_endpoint(
|
|
75
|
-
elif
|
|
76
|
-
service = reg.discover_service(
|
|
73
|
+
if port_type == "commander":
|
|
74
|
+
endpoint = reg.get_endpoint(service_type)
|
|
75
|
+
elif port_type == "receiver":
|
|
76
|
+
service = reg.discover_service(service_type)
|
|
77
77
|
endpoint = (
|
|
78
78
|
f"{service.get('protocol', 'tcp')}://{service['host']}:{service['metadata']['receiver_port']}"
|
|
79
79
|
)
|
|
80
80
|
else:
|
|
81
|
-
logger.error(f"Incorrect argument {
|
|
81
|
+
logger.error(f"Incorrect argument {port_type=}, no endpoint returned.")
|
|
82
82
|
endpoint = None
|
|
83
83
|
except Exception: # noqa
|
|
84
|
-
logger.warning(f"Couldn't retrieve endpoint for {
|
|
84
|
+
logger.warning(f"Couldn't retrieve endpoint for {service_type}. Is the service registry process running?")
|
|
85
85
|
endpoint = None
|
|
86
86
|
|
|
87
87
|
return endpoint
|
|
@@ -92,7 +92,7 @@ class ZeroMQHandler(logging.Handler):
|
|
|
92
92
|
super().__init__()
|
|
93
93
|
|
|
94
94
|
if RECEIVER_PORT == 0:
|
|
95
|
-
endpoint = get_endpoint_from_registry(
|
|
95
|
+
endpoint = get_endpoint_from_registry(service_type=SERVICE_TYPE, port_type="receiver")
|
|
96
96
|
else:
|
|
97
97
|
endpoint = f"{PROTOCOL}://{HOSTNAME}:{RECEIVER_PORT}"
|
|
98
98
|
|
|
@@ -11,6 +11,10 @@ from egse.settings import Settings
|
|
|
11
11
|
|
|
12
12
|
settings = Settings.load("Notify Hub")
|
|
13
13
|
|
|
14
|
+
PROCESS_NAME = settings.get("PROCESS_NAME", "nh_cs")
|
|
15
|
+
SERVICE_ID = settings.get("SERVICE_ID", "nh_cs_1")
|
|
16
|
+
SERVICE_TYPE = settings.get("SERVICE_TYPE", "NOTIFY_HUB")
|
|
17
|
+
|
|
14
18
|
# Default ports that are assigned to PUSH-PULL, PUB-SUB, ROUTER-DEALER protocols of the notification hub.
|
|
15
19
|
# The actual ports are defined in the Settings.yaml, use local settings to change them.
|
|
16
20
|
DEFAULT_COLLECTOR_PORT = settings.get("COLLECTOR_PORT", 0)
|
|
@@ -18,6 +18,8 @@ from egse.logger import remote_logging
|
|
|
18
18
|
from egse.notifyhub import DEFAULT_COLLECTOR_PORT
|
|
19
19
|
from egse.notifyhub import DEFAULT_PUBLISHER_PORT
|
|
20
20
|
from egse.notifyhub import DEFAULT_REQUESTS_PORT
|
|
21
|
+
from egse.notifyhub import PROCESS_NAME
|
|
22
|
+
from egse.notifyhub import SERVICE_TYPE
|
|
21
23
|
from egse.notifyhub import STATS_INTERVAL
|
|
22
24
|
from egse.notifyhub.client import AsyncNotificationHubClient
|
|
23
25
|
from egse.registry import MessageType
|
|
@@ -30,12 +32,13 @@ from .event import NotificationEvent
|
|
|
30
32
|
REQUEST_POLL_TIMEOUT = 1.0
|
|
31
33
|
"""time to wait for while listening for requests [seconds]."""
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
|
|
36
|
+
app = typer.Typer(name=PROCESS_NAME)
|
|
34
37
|
|
|
35
38
|
|
|
36
39
|
class AsyncNotificationHub:
|
|
37
40
|
def __init__(self):
|
|
38
|
-
self.server_id =
|
|
41
|
+
self.server_id = PROCESS_NAME
|
|
39
42
|
|
|
40
43
|
self.context: zmq.asyncio.Context = zmq.asyncio.Context()
|
|
41
44
|
|
|
@@ -51,8 +54,8 @@ class AsyncNotificationHub:
|
|
|
51
54
|
# Register notification hub to the service registry
|
|
52
55
|
self.registry_client = AsyncRegistryClient(timeout=REQUEST_TIMEOUT)
|
|
53
56
|
self.service_id = None
|
|
54
|
-
self.service_name =
|
|
55
|
-
self.service_type =
|
|
57
|
+
self.service_name = PROCESS_NAME
|
|
58
|
+
self.service_type = SERVICE_TYPE
|
|
56
59
|
self.is_service_registered: bool = False
|
|
57
60
|
"""True if the service is registered to the service registry."""
|
|
58
61
|
|
|
@@ -123,7 +126,7 @@ class AsyncNotificationHub:
|
|
|
123
126
|
|
|
124
127
|
self.service_id = await self.registry_client.register(
|
|
125
128
|
name=self.service_name,
|
|
126
|
-
host=get_host_ip(),
|
|
129
|
+
host=get_host_ip() or "127.0.0.1",
|
|
127
130
|
port=DEFAULT_REQUESTS_PORT,
|
|
128
131
|
service_type=self.service_type,
|
|
129
132
|
metadata={"pub_port": DEFAULT_PUBLISHER_PORT, "collector_port": DEFAULT_COLLECTOR_PORT},
|
|
@@ -5,6 +5,7 @@ from pathlib import Path
|
|
|
5
5
|
from typing import Union
|
|
6
6
|
|
|
7
7
|
from egse.command import ClientServerCommand
|
|
8
|
+
from egse.connect import get_endpoint
|
|
8
9
|
from egse.control import is_control_server_active
|
|
9
10
|
from egse.decorators import dynamic_interface
|
|
10
11
|
from egse.listener import EventInterface, Event
|
|
@@ -20,10 +21,15 @@ from egse.zmq_ser import connect_address
|
|
|
20
21
|
HERE = Path(__file__).parent
|
|
21
22
|
LOGGER = logging.getLogger("egse.procman")
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
settings = Settings.load("Process Manager Control Server")
|
|
24
25
|
COMMAND_SETTINGS = Settings.load(location=HERE, filename="procman.yaml")
|
|
25
26
|
PROXY_TIMEOUT = 10_000
|
|
26
27
|
|
|
28
|
+
SERVICE_TYPE = settings.get("SERVICE_TYPE", "pm_cs")
|
|
29
|
+
PROTOCOL = settings.get("PROTOCOL", "tcp")
|
|
30
|
+
HOSTNAME = settings.get("HOSTNAME", "localhost")
|
|
31
|
+
COMMANDING_PORT = settings.get("COMMANDING_PORT", 0) # dynamically assigned by the system if 0
|
|
32
|
+
|
|
27
33
|
|
|
28
34
|
def is_process_manager_active(timeout: float = 0.5) -> bool:
|
|
29
35
|
"""Checks if the Process Manager Control Server is active.
|
|
@@ -39,7 +45,7 @@ def is_process_manager_active(timeout: float = 0.5) -> bool:
|
|
|
39
45
|
"""
|
|
40
46
|
|
|
41
47
|
with RegistryClient() as client:
|
|
42
|
-
endpoint = client.get_endpoint(
|
|
48
|
+
endpoint = client.get_endpoint(settings.SERVICE_TYPE)
|
|
43
49
|
|
|
44
50
|
if endpoint is None:
|
|
45
51
|
return False
|
|
@@ -394,11 +400,14 @@ class ProcessManagerController(ProcessManagerInterface):
|
|
|
394
400
|
class ProcessManagerProxy(Proxy, ProcessManagerInterface):
|
|
395
401
|
"""Proxy for process management, used to connect to the Process Manager Control Server and send commands remotely."""
|
|
396
402
|
|
|
397
|
-
def __init__(
|
|
398
|
-
|
|
403
|
+
def __init__(
|
|
404
|
+
self, protocol: str = PROTOCOL, hostname: str = HOSTNAME, port: int = COMMANDING_PORT, timeout=PROXY_TIMEOUT
|
|
405
|
+
):
|
|
406
|
+
"""
|
|
407
|
+
Initialisation of a new Proxy for Process Management.
|
|
399
408
|
|
|
400
|
-
|
|
401
|
-
settings file.
|
|
409
|
+
The connection details (transport protocol, hostname, and port) are by default taken from the
|
|
410
|
+
settings file. When the `port` is 0 (zero) the endpoint is retrieved from the service registry.
|
|
402
411
|
|
|
403
412
|
Args:
|
|
404
413
|
protocol (str): Transport protocol
|
|
@@ -406,15 +415,6 @@ class ProcessManagerProxy(Proxy, ProcessManagerInterface):
|
|
|
406
415
|
port (int): TCP port on which the Control Server is listening for commands
|
|
407
416
|
"""
|
|
408
417
|
|
|
409
|
-
|
|
410
|
-
with RegistryClient() as reg:
|
|
411
|
-
service = reg.discover_service(CTRL_SETTINGS.SERVICE_TYPE)
|
|
412
|
-
|
|
413
|
-
if service:
|
|
414
|
-
protocol = service.get("protocol", "tcp")
|
|
415
|
-
hostname = service["host"]
|
|
416
|
-
port = service["port"]
|
|
417
|
-
else:
|
|
418
|
-
raise RuntimeError(f"No service registered as {CTRL_SETTINGS.SERVICE_TYPE}")
|
|
418
|
+
endpoint = get_endpoint(settings.SERVICE_TYPE, protocol, hostname, port)
|
|
419
419
|
|
|
420
|
-
super().__init__(
|
|
420
|
+
super().__init__(endpoint, timeout=timeout)
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
from enum import Enum
|
|
3
2
|
|
|
3
|
+
from egse.log import logging
|
|
4
|
+
|
|
5
|
+
logger = logging.getLogger("egse.registry")
|
|
6
|
+
|
|
4
7
|
# Default ports that are assigned to REQ-REP and PUB-SUB protocols of the registry services
|
|
5
8
|
DEFAULT_RS_REQ_PORT = 4242 # Handle requests
|
|
6
9
|
DEFAULT_RS_PUB_PORT = 4243 # Publish events
|
|
@@ -19,9 +22,6 @@ class MessageType(Enum):
|
|
|
19
22
|
HEARTBEAT = b"HB" # Heartbeat/health check
|
|
20
23
|
|
|
21
24
|
|
|
22
|
-
logger = logging.getLogger("egse.registry")
|
|
23
|
-
|
|
24
|
-
|
|
25
25
|
def is_service_registry_active(timeout: float = 0.5):
|
|
26
26
|
"""Check if the service registry is running and active.
|
|
27
27
|
|