cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
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.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/logger/log_cs.py
DELETED
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The Log Server receives all log messages and events from control servers and client applications
|
|
3
|
-
and saves those messages in a log file at a given location.
|
|
4
|
-
"""
|
|
5
|
-
import datetime
|
|
6
|
-
import logging
|
|
7
|
-
import multiprocessing
|
|
8
|
-
import pickle
|
|
9
|
-
from logging import StreamHandler
|
|
10
|
-
from logging.handlers import SocketHandler
|
|
11
|
-
from logging.handlers import TimedRotatingFileHandler
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
from typing import Optional
|
|
14
|
-
from typing import Union
|
|
15
|
-
|
|
16
|
-
import click
|
|
17
|
-
import rich
|
|
18
|
-
import zmq
|
|
19
|
-
from prometheus_client import Counter
|
|
20
|
-
from prometheus_client import start_http_server
|
|
21
|
-
|
|
22
|
-
from egse.env import get_log_file_location
|
|
23
|
-
from egse.settings import Settings
|
|
24
|
-
from egse.system import format_datetime
|
|
25
|
-
from egse.system import replace_environment_variable
|
|
26
|
-
from egse.zmq_ser import bind_address
|
|
27
|
-
from egse.zmq_ser import connect_address
|
|
28
|
-
|
|
29
|
-
CTRL_SETTINGS = Settings.load("Logging Control Server")
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# The format for the log file.
|
|
33
|
-
# The line that is saved in the log file shall contain as much information as possible.
|
|
34
|
-
|
|
35
|
-
LOG_FORMAT_FILE = (
|
|
36
|
-
"%(asctime)s:%(processName)s:%(process)s:%(levelname)s:%(lineno)d:%(name)s:%(message)s"
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
LOG_FORMAT_KEY_VALUE = (
|
|
40
|
-
"level=%(levelname)s ts=%(asctime)s process=%(processName)s process_id=%(process)s caller=%(name)s:%(lineno)s msg=\"%(message)s\""
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
LOG_FORMAT_DATE = "%Y-%m-%dT%H:%M:%S,%f"
|
|
44
|
-
|
|
45
|
-
# The format for the console output.
|
|
46
|
-
# The line that is printed on the console shall be concise.
|
|
47
|
-
|
|
48
|
-
LOG_FORMAT_STREAM = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
|
|
49
|
-
|
|
50
|
-
LOG_RECORDS = Counter(
|
|
51
|
-
"log_records_count", "Count the number of log records processed", ["source", "name"]
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
LOG_LEVEL_FILE = logging.DEBUG
|
|
55
|
-
LOG_LEVEL_STREAM = logging.ERROR
|
|
56
|
-
LOG_LEVEL_SOCKET = 1 # ALL records shall go to the socket handler
|
|
57
|
-
|
|
58
|
-
LOGGER_NAME = "egse.logger.log_cs"
|
|
59
|
-
|
|
60
|
-
file_handler: Optional[TimedRotatingFileHandler] = None
|
|
61
|
-
stream_handler: Optional[StreamHandler] = None
|
|
62
|
-
socket_handler: Optional[SocketHandler] = None
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class DateTimeFormatter(logging.Formatter):
|
|
66
|
-
|
|
67
|
-
def formatTime(self, record, datefmt=None):
|
|
68
|
-
converted_time = datetime.datetime.fromtimestamp(record.created)
|
|
69
|
-
if datefmt:
|
|
70
|
-
return converted_time.strftime(datefmt)
|
|
71
|
-
formatted_time = converted_time.strftime("%Y-%m-%dT%H:%M:%S")
|
|
72
|
-
return f"{formatted_time}.{record.msecs:03.0f}"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
file_formatter = DateTimeFormatter(fmt=LOG_FORMAT_KEY_VALUE, datefmt=LOG_FORMAT_DATE)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
@click.group()
|
|
79
|
-
def cli():
|
|
80
|
-
pass
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
@cli.command()
|
|
84
|
-
def start():
|
|
85
|
-
"""Start the Logger Control Server."""
|
|
86
|
-
|
|
87
|
-
global file_handler, stream_handler, socket_handler
|
|
88
|
-
|
|
89
|
-
multiprocessing.current_process().name = "log_cs"
|
|
90
|
-
|
|
91
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
92
|
-
|
|
93
|
-
# TODO (rik):
|
|
94
|
-
# The `max_*` values should be read from the Settings (DONE) and it shall be possible to
|
|
95
|
-
# overwrite these values from the commandline maybe.
|
|
96
|
-
|
|
97
|
-
max_bytes = CTRL_SETTINGS.MAX_SIZE_LOG_FILES * 1024 * 1024
|
|
98
|
-
max_nr_log_files = CTRL_SETTINGS.MAX_NR_LOG_FILES
|
|
99
|
-
|
|
100
|
-
log_file_location = Path(get_log_file_location())
|
|
101
|
-
if not log_file_location.exists():
|
|
102
|
-
raise FileNotFoundError(f"The location for the log files doesn't exist: {log_file_location!s}.")
|
|
103
|
-
|
|
104
|
-
file_handler = TimedRotatingFileHandler(
|
|
105
|
-
filename=log_file_location / "general.log", when='midnight'
|
|
106
|
-
)
|
|
107
|
-
file_handler.setFormatter(file_formatter)
|
|
108
|
-
|
|
109
|
-
# There is no need to set the level for the handlers, because the level is checked by the
|
|
110
|
-
# Logger and we use the handlers directly here. Use a filter to restrict messages.
|
|
111
|
-
|
|
112
|
-
stream_handler = StreamHandler()
|
|
113
|
-
stream_handler.setFormatter(logging.Formatter(fmt=LOG_FORMAT_STREAM))
|
|
114
|
-
|
|
115
|
-
# Log records are also sent to the cutelog listening server
|
|
116
|
-
|
|
117
|
-
socket_handler = SocketHandler(CTRL_SETTINGS.CUTELOG_IP_ADDRESS, CTRL_SETTINGS.CUTELOG_LISTENING_PORT)
|
|
118
|
-
socket_handler.setFormatter(file_formatter)
|
|
119
|
-
|
|
120
|
-
context = zmq.Context()
|
|
121
|
-
|
|
122
|
-
endpoint = bind_address(CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.LOGGING_PORT)
|
|
123
|
-
receiver = context.socket(zmq.PULL)
|
|
124
|
-
receiver.bind(endpoint)
|
|
125
|
-
|
|
126
|
-
endpoint = bind_address(CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.COMMANDING_PORT)
|
|
127
|
-
commander = context.socket(zmq.REP)
|
|
128
|
-
commander.bind(endpoint)
|
|
129
|
-
|
|
130
|
-
poller = zmq.Poller()
|
|
131
|
-
poller.register(receiver, zmq.POLLIN)
|
|
132
|
-
poller.register(commander, zmq.POLLIN)
|
|
133
|
-
|
|
134
|
-
while True:
|
|
135
|
-
try:
|
|
136
|
-
socks = dict(poller.poll())
|
|
137
|
-
|
|
138
|
-
if commander in socks:
|
|
139
|
-
pickle_string = commander.recv()
|
|
140
|
-
command = pickle.loads(pickle_string)
|
|
141
|
-
|
|
142
|
-
if command.lower() == "quit":
|
|
143
|
-
commander.send(pickle.dumps("ACK"))
|
|
144
|
-
break
|
|
145
|
-
|
|
146
|
-
response = handle_command(command)
|
|
147
|
-
commander.send(pickle.dumps(response))
|
|
148
|
-
|
|
149
|
-
if receiver in socks:
|
|
150
|
-
pickle_string = receiver.recv()
|
|
151
|
-
record = pickle.loads(pickle_string)
|
|
152
|
-
record = logging.makeLogRecord(record)
|
|
153
|
-
|
|
154
|
-
handle_log_record(record)
|
|
155
|
-
|
|
156
|
-
except KeyboardInterrupt:
|
|
157
|
-
click.echo("KeyboardInterrupt caught!")
|
|
158
|
-
break
|
|
159
|
-
|
|
160
|
-
record = logging.LogRecord(
|
|
161
|
-
name=LOGGER_NAME,
|
|
162
|
-
level=logging.WARNING,
|
|
163
|
-
pathname=__file__,
|
|
164
|
-
lineno=137,
|
|
165
|
-
msg="Logger terminated.",
|
|
166
|
-
args=(),
|
|
167
|
-
exc_info=None,
|
|
168
|
-
func="start",
|
|
169
|
-
sinfo=None
|
|
170
|
-
)
|
|
171
|
-
handle_log_record(record)
|
|
172
|
-
|
|
173
|
-
file_handler.close()
|
|
174
|
-
stream_handler.close()
|
|
175
|
-
commander.close(linger=0)
|
|
176
|
-
receiver.close(linger=0)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
def handle_log_record(record):
|
|
180
|
-
"""Send the log record to the file handler and the stream handler."""
|
|
181
|
-
global file_handler, stream_handler, socket_handler
|
|
182
|
-
|
|
183
|
-
if record.levelno >= LOG_LEVEL_FILE:
|
|
184
|
-
file_handler.emit(record)
|
|
185
|
-
|
|
186
|
-
if record.levelno >= LOG_LEVEL_STREAM:
|
|
187
|
-
stream_handler.handle(record)
|
|
188
|
-
|
|
189
|
-
if record.levelno >= LOG_LEVEL_SOCKET:
|
|
190
|
-
socket_handler.handle(record)
|
|
191
|
-
|
|
192
|
-
LOG_RECORDS.labels(source="all", name="all").inc()
|
|
193
|
-
LOG_RECORDS.labels(source="logger", name=record.name).inc()
|
|
194
|
-
LOG_RECORDS.labels(source="process", name=record.processName).inc()
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
def handle_command(command) -> dict:
|
|
198
|
-
"""Handle commands that are sent to the commanding socket."""
|
|
199
|
-
global file_handler
|
|
200
|
-
global LOG_LEVEL_FILE
|
|
201
|
-
|
|
202
|
-
response = dict(
|
|
203
|
-
timestamp=format_datetime(),
|
|
204
|
-
)
|
|
205
|
-
if command.lower() == 'roll':
|
|
206
|
-
file_handler.doRollover()
|
|
207
|
-
response.update(dict(status="ACK"))
|
|
208
|
-
record = logging.LogRecord(
|
|
209
|
-
name=LOGGER_NAME,
|
|
210
|
-
level=logging.WARNING,
|
|
211
|
-
pathname=__file__,
|
|
212
|
-
lineno=197,
|
|
213
|
-
msg="Logger rolled over.",
|
|
214
|
-
args=(),
|
|
215
|
-
exc_info=None,
|
|
216
|
-
func="roll",
|
|
217
|
-
sinfo=None
|
|
218
|
-
)
|
|
219
|
-
handle_log_record(record)
|
|
220
|
-
|
|
221
|
-
elif command.lower() == 'status':
|
|
222
|
-
response.update(dict(
|
|
223
|
-
status="ACK",
|
|
224
|
-
file_logger_level=logging.getLevelName(LOG_LEVEL_FILE),
|
|
225
|
-
stream_logger_level=logging.getLevelName(LOG_LEVEL_STREAM),
|
|
226
|
-
file_logger_location=file_handler.baseFilename,
|
|
227
|
-
))
|
|
228
|
-
elif command.lower().startswith("set_level"):
|
|
229
|
-
new_level = command.split()[-1]
|
|
230
|
-
LOG_LEVEL_FILE = logging._nameToLevel[new_level]
|
|
231
|
-
response.update(dict(
|
|
232
|
-
status="ACK",
|
|
233
|
-
file_logger_level=logging.getLevelName(LOG_LEVEL_FILE),
|
|
234
|
-
))
|
|
235
|
-
|
|
236
|
-
return response
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
@cli.command()
|
|
240
|
-
def stop():
|
|
241
|
-
"""Stop the Logger Control Server."""
|
|
242
|
-
|
|
243
|
-
response = send_request("quit")
|
|
244
|
-
if response == "ACK":
|
|
245
|
-
rich.print("Logger successfully terminated.")
|
|
246
|
-
else:
|
|
247
|
-
rich.print(f"[red] ERROR: {response}")
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
@cli.command()
|
|
251
|
-
def roll():
|
|
252
|
-
"""Roll over the log file of the Logger Control Server."""
|
|
253
|
-
|
|
254
|
-
response = send_request("roll")
|
|
255
|
-
if response.get("status") == "ACK":
|
|
256
|
-
rich.print("[green]Logger files successfully rotated.")
|
|
257
|
-
else:
|
|
258
|
-
rich.print(f"[red]ERROR: {response}")
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
@cli.command()
|
|
262
|
-
def status():
|
|
263
|
-
"""Roll over the log file of the Logger Control Server."""
|
|
264
|
-
|
|
265
|
-
rich.print("Log Manager:")
|
|
266
|
-
|
|
267
|
-
response = send_request("status")
|
|
268
|
-
if response.get("status") == "ACK":
|
|
269
|
-
rich.print(" Status: [green]active")
|
|
270
|
-
rich.print(f" Level [grey50](file)[black]: {response.get('file_logger_level')}")
|
|
271
|
-
rich.print(f" Level [grey50](stdout)[black]: {response.get('stream_logger_level')}")
|
|
272
|
-
rich.print(f" Log file location: {response.get('file_logger_location')}")
|
|
273
|
-
else:
|
|
274
|
-
rich.print(" Status: [red]not active")
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
@cli.command()
|
|
278
|
-
@click.argument('level')
|
|
279
|
-
def level(level: Union[int, str]):
|
|
280
|
-
"""Set the logging level for """
|
|
281
|
-
try:
|
|
282
|
-
level = logging.getLevelName(int(level))
|
|
283
|
-
except ValueError:
|
|
284
|
-
if level not in logging._nameToLevel:
|
|
285
|
-
rich.print(f"[red]Invalid logging level given '{level}'.")
|
|
286
|
-
rich.print(f"Should be one of {logging._levelToName}.")
|
|
287
|
-
return
|
|
288
|
-
|
|
289
|
-
response = send_request(f"set_level {level}")
|
|
290
|
-
if response.get("status") == "ACK":
|
|
291
|
-
rich.print(f"Log level on the server is now set to {response.get('file_logger_level')}.")
|
|
292
|
-
else:
|
|
293
|
-
rich.print(f"[red]ERROR: {response}")
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
TIMEOUT_RECV = 1.0 # seconds
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
def send_request(command_request: str):
|
|
300
|
-
"""Sends a request to the Logger Control Server and waits for a response."""
|
|
301
|
-
ctx = zmq.Context().instance()
|
|
302
|
-
endpoint = connect_address(
|
|
303
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT
|
|
304
|
-
)
|
|
305
|
-
socket = ctx.socket(zmq.REQ)
|
|
306
|
-
socket.connect(endpoint)
|
|
307
|
-
|
|
308
|
-
socket.send(pickle.dumps(command_request))
|
|
309
|
-
rlist, _, _ = zmq.select([socket], [], [], timeout=TIMEOUT_RECV)
|
|
310
|
-
if socket in rlist:
|
|
311
|
-
response = socket.recv()
|
|
312
|
-
response = pickle.loads(response)
|
|
313
|
-
else:
|
|
314
|
-
response = {"error": "Receive from ZeroMQ socket timed out for Logger Control Server."}
|
|
315
|
-
socket.close(linger=0)
|
|
316
|
-
|
|
317
|
-
return response
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
if __name__ == "__main__":
|
|
321
|
-
cli()
|
egse/metrics.py
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
import numpy as np
|
|
5
|
-
from prometheus_client import Gauge
|
|
6
|
-
|
|
7
|
-
from egse.hk import TmDictionaryColumns
|
|
8
|
-
from egse.settings import Settings
|
|
9
|
-
from egse.setup import SetupError, load_setup, Setup
|
|
10
|
-
from egse.state import GlobalState
|
|
11
|
-
|
|
12
|
-
LOGGER = logging.getLogger(__name__)
|
|
13
|
-
SITE_ID = Settings.load("SITE").ID
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def define_metrics(origin: str, dashboard: str = None, use_site: bool = False, setup: Optional[Setup] = None) -> dict:
|
|
17
|
-
"""
|
|
18
|
-
Create a metrics dictionary from the TM dictionary.
|
|
19
|
-
|
|
20
|
-
Read the metric names and their descriptions from the TM dictionary, and create Prometheus
|
|
21
|
-
gauges based on this information.
|
|
22
|
-
|
|
23
|
-
If `dashboard` is not provided, all telemetry parameters for the given origin will be returned.
|
|
24
|
-
|
|
25
|
-
Args:
|
|
26
|
-
origin: the storage mnemonics for the requested metrics
|
|
27
|
-
dashboard: restrict the metrics selection to those that are defined for the given dashboard.
|
|
28
|
-
You can select all dashboards with `dashboard='*'`.
|
|
29
|
-
use_site: Indicate whether the prefixes of the new HK names are TH-specific
|
|
30
|
-
setup: Setup.
|
|
31
|
-
Returns:
|
|
32
|
-
Dictionary with all Prometheus gauges for the given origin and dashboard.
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
setup = setup or load_setup()
|
|
36
|
-
|
|
37
|
-
try:
|
|
38
|
-
hk_info_table = setup.telemetry.dictionary
|
|
39
|
-
except AttributeError:
|
|
40
|
-
raise SetupError("Version of the telemetry dictionary not specified in the current setup")
|
|
41
|
-
|
|
42
|
-
hk_info_table = hk_info_table.replace(np.nan, "")
|
|
43
|
-
|
|
44
|
-
storage_mnemonic = hk_info_table[TmDictionaryColumns.STORAGE_MNEMONIC].values
|
|
45
|
-
hk_names = hk_info_table[TmDictionaryColumns.CORRECT_HK_NAMES].values
|
|
46
|
-
descriptions = hk_info_table[TmDictionaryColumns.DESCRIPTION].values
|
|
47
|
-
mon_screen = hk_info_table[TmDictionaryColumns.DASHBOARD].values
|
|
48
|
-
|
|
49
|
-
condition = storage_mnemonic == origin.upper()
|
|
50
|
-
if dashboard is not None:
|
|
51
|
-
if dashboard == "*":
|
|
52
|
-
extra_condition = mon_screen != ""
|
|
53
|
-
else:
|
|
54
|
-
extra_condition = mon_screen == dashboard.upper()
|
|
55
|
-
condition = np.all((condition, extra_condition), axis=0)
|
|
56
|
-
|
|
57
|
-
selection = np.where(condition)
|
|
58
|
-
|
|
59
|
-
syn_names = hk_names[selection]
|
|
60
|
-
descriptions = descriptions[selection]
|
|
61
|
-
|
|
62
|
-
if not use_site:
|
|
63
|
-
return {
|
|
64
|
-
syn_name: Gauge(syn_name, description)
|
|
65
|
-
for syn_name, description in zip(syn_names, descriptions)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
th_prefix = f"G{SITE_ID}_"
|
|
69
|
-
|
|
70
|
-
th_syn_names = []
|
|
71
|
-
th_descriptions = []
|
|
72
|
-
for syn_name, description in zip(syn_names, descriptions):
|
|
73
|
-
if syn_name.startswith(th_prefix):
|
|
74
|
-
th_syn_names.append(syn_name)
|
|
75
|
-
th_descriptions.append(description)
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
syn_name: Gauge(syn_name, description)
|
|
79
|
-
for syn_name, description in zip(th_syn_names, th_descriptions)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def update_metrics(metrics: dict, updates: dict):
|
|
84
|
-
"""
|
|
85
|
-
Updates the metrics parameters with the values from the updates dictionary.
|
|
86
|
-
Only the metrics parameters for which the names are keys in the given updates dict are actually updated. Other
|
|
87
|
-
metrics remain untouched.
|
|
88
|
-
|
|
89
|
-
The functions logs a warning when the updates dict contains a name which is not known as a metrics parameter.
|
|
90
|
-
|
|
91
|
-
Args:
|
|
92
|
-
metrics: the metrics dictionary previously defined with the define_metrics function
|
|
93
|
-
updates: a dictionary with key=metrics name and value is the to-be-updated value
|
|
94
|
-
"""
|
|
95
|
-
for metric_name, value in updates.items():
|
|
96
|
-
try:
|
|
97
|
-
if value is None:
|
|
98
|
-
metrics[metric_name].set(float('nan'))
|
|
99
|
-
else:
|
|
100
|
-
metrics[metric_name].set(float(value))
|
|
101
|
-
except KeyError as exc:
|
|
102
|
-
LOGGER.warning(f"Unknown metric name: {metric_name=}")
|