From 558ee9f1d27a919eefee1fdc5920c305d213c4d5 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Fri, 7 Jul 2023 08:52:14 +0000 Subject: [PATCH] L2SS-1316: Added antenna_field selection to observation. Renamed /1 devices to /HBA --- .gitlab-ci.yml | 2 + CDB/LOFAR_ConfigDb.json | 65 +++++++------------ .../digitalbeam_cluster_ConfigDb.json | 38 +++++------ .../tilebeam_cluster_ConfigDb.json | 13 ---- CDB/stations/LTS_ConfigDb.json | 10 +-- CDB/stations/simulators_ConfigDb.json | 12 ++-- docker-compose/device-antennafield.yml | 2 +- docker-compose/device-aps.yml | 2 +- docker-compose/device-apsct.yml | 2 +- docker-compose/device-apspu.yml | 2 +- docker-compose/device-beamlet.yml | 2 +- docker-compose/device-boot.yml | 2 +- docker-compose/device-bst.yml | 2 +- docker-compose/device-calibration.yml | 2 +- docker-compose/device-ccd.yml | 2 +- docker-compose/device-configuration.yml | 2 +- docker-compose/device-digitalbeam.yml | 2 +- docker-compose/device-docker.yml | 2 +- docker-compose/device-ec.yml | 2 +- docker-compose/device-observation-control.yml | 2 +- docker-compose/device-pcon.yml | 2 +- docker-compose/device-psoc.yml | 2 +- docker-compose/device-recvh.yml | 2 +- docker-compose/device-recvl.yml | 2 +- docker-compose/device-sdp.yml | 2 +- docker-compose/device-sdpfirmware.yml | 2 +- docker-compose/device-sst.yml | 2 +- docker-compose/device-station-manager.yml | 2 +- docker-compose/device-temperature-manager.yml | 2 +- docker-compose/device-tilebeam.yml | 2 +- docker-compose/device-unb2.yml | 2 +- docker-compose/device-xst.yml | 2 +- .../definitions/observation-settings.json | 12 ++++ .../configDB/LOFAR_ConfigDb.json | 12 ++-- .../configDB/simulators_ConfigDb.json | 12 ++-- .../interfaces/test_power_hierarchy.py | 6 +- .../devices/test_device_antennafield.py | 6 +- .../default/devices/test_device_beamlet.py | 4 +- .../default/devices/test_device_bst.py | 4 +- .../devices/test_device_calibration.py | 6 +- .../devices/test_device_digitalbeam.py | 6 +- .../devices/test_device_observation.py | 6 +- .../test_device_observation_control.py | 6 +- .../default/devices/test_device_sdp.py | 2 +- .../devices/test_device_sdpfirmware.py | 2 +- .../default/devices/test_device_sst.py | 6 +- .../test_device_temperature_manager.py | 4 +- .../default/devices/test_device_xst.py | 4 +- .../default/devices/test_observation.py | 4 +- .../test_tango_prometheus_client.py | 10 ++- .../test_digitalbeam_performance.py | 8 +-- .../test_tilebeam_performance.py | 6 +- tangostationcontrol/requirements.txt | 2 +- .../configuration/observation_settings.py | 4 ++ .../tangostationcontrol/devices/boot.py | 12 ++-- .../devices/interfaces/hierarchy.py | 8 ++- .../devices/observation.py | 20 ++++-- .../devices/sdp/beamlet.py | 2 +- .../devices/sdp/digitalbeam.py | 2 +- .../devices/temperature_manager.py | 2 +- .../test/devices/test_observation_base.py | 1 + .../common/test_observation_controller.py | 1 + .../test/configuration/_mock_requests.py | 4 ++ .../test_observation_settings.py | 36 ++++++---- 64 files changed, 216 insertions(+), 196 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1f25acdf1..8bbc48ec8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -417,6 +417,8 @@ integration_test_docker: echo "Saving log for container $container" docker logs "${container}" >& "log/${container}.log" done + # Collect content of the TangoDB + - $CI_PROJECT_DIR/bin/dump_ConfigDb.sh >& log/dump_ConfigDb.log artifacts: when: always paths: diff --git a/CDB/LOFAR_ConfigDb.json b/CDB/LOFAR_ConfigDb.json index fa6f9b91b..8e4cbe065 100644 --- a/CDB/LOFAR_ConfigDb.json +++ b/CDB/LOFAR_ConfigDb.json @@ -23,7 +23,6 @@ "STAT/CCD/1", "STAT/PSOC/1", "STAT/AntennaField/HBA", - "STAT/AntennaField/LBA", "STAT/PCON/1", "STAT/ObservationControl/1", "STAT/TemperatureManager/1", @@ -110,20 +109,12 @@ "STAT/AntennaField/HBA": { "properties": { "Control_Children": [ - "STAT/SDPFirmware/1", + "STAT/SDPFirmware/HBA", "STAT/TileBeam/HBA", "STAT/DigitalBeam/HBA", "STAT/APS/H0" ] } - }, - "STAT/AntennaField/LBA": { - "properties": { - "Control_Children": [ - "STAT/SDPFirmware/1", - "STAT/APS/L0" - ] - } } } } @@ -163,7 +154,7 @@ ], "Power_Children": [ "STAT/CCD/1", - "STAT/SDPFirmware/1" + "STAT/SDPFirmware/HBA" ] } } @@ -215,8 +206,8 @@ "RECVL, RECV_TEMP_error_R" ], "Shutdown_Device_List": [ - "STAT/SDPFirmware/1", - "STAT/SDP/1", + "STAT/SDPFirmware/HBA", + "STAT/SDP/HBA", "STAT/UNB2/1", "STAT/RECVH/1", "STAT/RECVL/1", @@ -242,14 +233,14 @@ "DigitalBeam": { "STAT/DigitalBeam/HBA": { "properties": { + "Control_Children": [ + "STAT/Beamlet/HBA" + ], "Beam_tracking_interval": [ "1.0" ], "Beam_tracking_preparation_period": [ "0.5" - ], - "Control_Children": [ - "STAT/Beamlet/1" ] } } @@ -259,7 +250,7 @@ "Beamlet": { "STAT": { "Beamlet": { - "STAT/Beamlet/1": { + "STAT/Beamlet/HBA": { "properties": { "FPGA_beamlet_output_hdr_eth_source_mac_RW_default": [ "00:22:86:08:00:00", @@ -350,16 +341,6 @@ "STAT/RECVH/1" ] } - }, - "STAT/APS/L0": { - "properties": { - "Control_Children": [ - "STAT/APSCT/1", - "STAT/APSPU/1", - "STAT/UNB2/1", - "STAT/RECVL/1" - ] - } } } } @@ -407,19 +388,20 @@ "SDPFirmware": { "STAT": { "SDPFirmware": { - "STAT/SDPFirmware/1": { + "STAT/SDPFirmware/HBA": { "properties": { "Control_Children": [ - "STAT/SDP/1", - "STAT/XST/1", - "STAT/SST/1", - "STAT/BST/1" + "STAT/SDP/HBA", + "STAT/XST/HBA", + "STAT/SST/HBA", + "STAT/BST/HBA" ], "Power_Children": [ - "STAT/SDP/1", - "STAT/BST/1", - "STAT/SST/1", - "STAT/XST/1" + "STAT/SDP/HBA", + "STAT/BST/HBA", + "STAT/SST/HBA", + "STAT/XST/HBA", + "STAT/Beamlet/HBA" ] } } @@ -429,11 +411,8 @@ "SDP": { "STAT": { "SDP": { - "STAT/SDP/1": { + "STAT/SDP/HBA": { "properties": { - "Power_Children": [ - "STAT/Beamlet/1" - ] } } } @@ -442,7 +421,7 @@ "BST": { "STAT": { "BST": { - "STAT/BST/1": { + "STAT/BST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5003" @@ -473,7 +452,7 @@ "SST": { "STAT": { "SST": { - "STAT/SST/1": { + "STAT/SST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5001" @@ -507,7 +486,7 @@ "XST": { "STAT": { "XST": { - "STAT/XST/1": { + "STAT/XST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5002" diff --git a/CDB/integrations/digitalbeam_cluster_ConfigDb.json b/CDB/integrations/digitalbeam_cluster_ConfigDb.json index 21daaa805..17b7e675e 100644 --- a/CDB/integrations/digitalbeam_cluster_ConfigDb.json +++ b/CDB/integrations/digitalbeam_cluster_ConfigDb.json @@ -3,10 +3,10 @@ "SDPFirmware":{ "STAT": { "SDPFirmware": { - "STAT/SDPFirmware/1":{ + "STAT/SDPFirmware/HBA":{ "properties": { "Control_Children": [ - "STAT/SDP/1" + "STAT/SDP/HBA" ], "OPC_Server_Name": [ "sdptr-sim" @@ -18,14 +18,14 @@ "5.0" ], "Power_Children": [ - "STAT/SDP/1" + "STAT/SDP/HBA" ] } }, - "STAT/SDPFirmware/2":{ + "STAT/SDPFirmware/LBA":{ "properties": { "Control_Children": [ - "STAT/SDP/2" + "STAT/SDP/LBA" ], "OPC_Server_Name": [ "sdptr-sim" @@ -37,7 +37,7 @@ "5.0" ], "Power_Children": [ - "STAT/SDP/2" + "STAT/SDP/LBA" ] } } @@ -47,7 +47,7 @@ "SDP": { "STAT": { "SDP": { - "STAT/SDP/1": { + "STAT/SDP/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -60,7 +60,7 @@ ] } }, - "STAT/SDP/2": { + "STAT/SDP/LBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -79,10 +79,10 @@ "Beamlet": { "STAT": { "Beamlet": { - "STAT/Beamlet/1": { + "STAT/Beamlet/HBA": { "properties": { "SDP_device": [ - "STAT/SDP/1" + "STAT/SDP/HBA" ], "OPC_Server_Name": [ "sdptr-sim" @@ -167,10 +167,10 @@ ] } }, - "STAT/Beamlet/2": { + "STAT/Beamlet/LBA": { "properties": { "SDP_device": [ - "STAT/SDP/2" + "STAT/SDP/LBA" ], "OPC_Server_Name": [ "sdptr-sim" @@ -303,7 +303,7 @@ "STAT/AntennaField/HBA" ], "Beamlet_Device": [ - "STAT/Beamlet/1" + "STAT/Beamlet/HBA" ], "Beam_tracking_interval": [ "1.0" @@ -312,7 +312,7 @@ "0.5" ], "Control_Children": [ - "STAT/Beamlet/1" + "STAT/Beamlet/HBA" ] } }, @@ -322,7 +322,7 @@ "STAT/AntennaField/LBA" ], "Beamlet_Device": [ - "STAT/Beamlet/2" + "STAT/Beamlet/LBA" ], "Beam_tracking_interval": [ "1.0" @@ -331,7 +331,7 @@ "0.5" ], "Control_Children": [ - "STAT/Beamlet/2" + "STAT/Beamlet/LBA" ] } } @@ -344,7 +344,7 @@ "STAT/AntennaField/LBA": { "properties": { "Control_Children": [ - "STAT/SDPFirmware/2", + "STAT/SDPFirmware/LBA", "STAT/digitalbeam/LBA", "STAT/RECVL/1", "STAT/RECVL/2" @@ -558,8 +558,8 @@ "STAT/AntennaField/HBA": { "properties": { "Control_Children": [ - "STAT/SDPFirmware/1", - "STAT/digitalbeam/HBA", + "STAT/SDPFirmware/HBA", + "STAT/DigitalBeam/HBA", "STAT/RECVH/1", "STAT/RECVH/2" ], diff --git a/CDB/integrations/tilebeam_cluster_ConfigDb.json b/CDB/integrations/tilebeam_cluster_ConfigDb.json index d334521b2..f9fe278be 100644 --- a/CDB/integrations/tilebeam_cluster_ConfigDb.json +++ b/CDB/integrations/tilebeam_cluster_ConfigDb.json @@ -579,19 +579,6 @@ } } } - }, - "SDPFirmware":{ - "STAT": { - "SDPFirmware": { - "STAT/SDPFirmware/1":{ - "properties": { - "Control_Children": [ - "STAT/SDP/1" - ] - } - } - } - } } } } diff --git a/CDB/stations/LTS_ConfigDb.json b/CDB/stations/LTS_ConfigDb.json index a6af15dbd..65333660b 100644 --- a/CDB/stations/LTS_ConfigDb.json +++ b/CDB/stations/LTS_ConfigDb.json @@ -147,7 +147,7 @@ "SDPFirmware":{ "STAT": { "SDPFirmware": { - "STAT/SDPFirmware/1": { + "STAT/SDPFirmware/HBA": { "properties": { "OPC_Server_Name": [ "dop369.astron.nl" @@ -172,7 +172,7 @@ "SDP": { "STAT": { "SDP": { - "STAT/SDP/1": { + "STAT/SDP/HBA": { "properties": { "OPC_Server_Name": [ "dop369.astron.nl" @@ -209,7 +209,7 @@ "BST": { "STAT": { "BST": { - "STAT/BST/1": { + "STAT/BST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5003" @@ -288,7 +288,7 @@ "SST": { "STAT": { "SST": { - "STAT/SST/1": { + "STAT/SST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5001" @@ -367,7 +367,7 @@ "XST": { "STAT": { "XST": { - "STAT/XST/1": { + "STAT/XST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5002" diff --git a/CDB/stations/simulators_ConfigDb.json b/CDB/stations/simulators_ConfigDb.json index 3342f9bef..e298e70ae 100644 --- a/CDB/stations/simulators_ConfigDb.json +++ b/CDB/stations/simulators_ConfigDb.json @@ -99,7 +99,7 @@ "Beamlet": { "STAT": { "Beamlet": { - "STAT/Beamlet/1": { + "STAT/Beamlet/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -238,7 +238,7 @@ "SDPFirmware": { "STAT": { "SDPFirmware": { - "STAT/SDPFirmware/1": { + "STAT/SDPFirmware/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -257,7 +257,7 @@ "SDP": { "STAT": { "SDP": { - "STAT/SDP/1": { + "STAT/SDP/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -276,7 +276,7 @@ "BST": { "STAT": { "BST": { - "STAT/BST/1": { + "STAT/BST/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -331,7 +331,7 @@ "SST": { "STAT": { "SST": { - "STAT/SST/1": { + "STAT/SST/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -386,7 +386,7 @@ "XST": { "STAT": { "XST": { - "STAT/XST/1": { + "STAT/XST/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" diff --git a/docker-compose/device-antennafield.yml b/docker-compose/device-antennafield.yml index b1f4dc6c0..21461e4ec 100644 --- a/docker-compose/device-antennafield.yml +++ b/docker-compose/device-antennafield.yml @@ -40,7 +40,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5815 - TANGO_ZMQ_HEARTBEAT_PORT=5915 healthcheck: - test: l2ss-health STAT/AntennaField/HBA + test: l2ss-health dserver/AntennaField/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-aps.yml b/docker-compose/device-aps.yml index 5944909d5..6094efb52 100644 --- a/docker-compose/device-aps.yml +++ b/docker-compose/device-aps.yml @@ -31,7 +31,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5828 - TANGO_ZMQ_HEARTBEAT_PORT=5928 healthcheck: - test: l2ss-health STAT/APS/H0 + test: l2ss-health dserver/APS/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-apsct.yml b/docker-compose/device-apsct.yml index 57a90c10c..921c4cfa5 100644 --- a/docker-compose/device-apsct.yml +++ b/docker-compose/device-apsct.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5809 - TANGO_ZMQ_HEARTBEAT_PORT=5909 healthcheck: - test: l2ss-health STAT/Apsct/1 + test: l2ss-health dserver/APSCT/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-apspu.yml b/docker-compose/device-apspu.yml index 5e2de1a66..88752625b 100644 --- a/docker-compose/device-apspu.yml +++ b/docker-compose/device-apspu.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5810 - TANGO_ZMQ_HEARTBEAT_PORT=5910 healthcheck: - test: l2ss-health STAT/Apspu/1 + test: l2ss-health dserver/APSPU/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-beamlet.yml b/docker-compose/device-beamlet.yml index def12d9ab..b998eaf7e 100644 --- a/docker-compose/device-beamlet.yml +++ b/docker-compose/device-beamlet.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5812 - TANGO_ZMQ_HEARTBEAT_PORT=5912 healthcheck: - test: l2ss-health STAT/Beamlet/1 + test: l2ss-health dserver/Beamlet/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-boot.yml b/docker-compose/device-boot.yml index 5c4a58689..77585f8da 100644 --- a/docker-compose/device-boot.yml +++ b/docker-compose/device-boot.yml @@ -38,7 +38,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5808 - TANGO_ZMQ_HEARTBEAT_PORT=5908 healthcheck: - test: l2ss-health STAT/BOOT/1 + test: l2ss-health dserver/BOOT/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-bst.yml b/docker-compose/device-bst.yml index 0f4a39eeb..e199b3dba 100644 --- a/docker-compose/device-bst.yml +++ b/docker-compose/device-bst.yml @@ -46,7 +46,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5817 - TANGO_ZMQ_HEARTBEAT_PORT=5917 healthcheck: - test: l2ss-health STAT/BST/1 + test: l2ss-health dserver/BST/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-calibration.yml b/docker-compose/device-calibration.yml index 3ff6353c5..7c7388660 100644 --- a/docker-compose/device-calibration.yml +++ b/docker-compose/device-calibration.yml @@ -41,7 +41,7 @@ services: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} healthcheck: - test: l2ss-health STAT/Calibration/1 + test: l2ss-health dserver/Calibration/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-ccd.yml b/docker-compose/device-ccd.yml index 4e2810dda..1621c7257 100644 --- a/docker-compose/device-ccd.yml +++ b/docker-compose/device-ccd.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5821 - TANGO_ZMQ_HEARTBEAT_PORT=5921 healthcheck: - test: l2ss-health STAT/CCD/1 + test: l2ss-health dserver/CCD/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-configuration.yml b/docker-compose/device-configuration.yml index 346a999a5..d3dbeb273 100644 --- a/docker-compose/device-configuration.yml +++ b/docker-compose/device-configuration.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5822 - TANGO_ZMQ_HEARTBEAT_PORT=5922 healthcheck: - test: l2ss-health STAT/Configuration/1 + test: l2ss-health dserver/Configuration/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-digitalbeam.yml b/docker-compose/device-digitalbeam.yml index 766c4317d..e6ba98a0e 100644 --- a/docker-compose/device-digitalbeam.yml +++ b/docker-compose/device-digitalbeam.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5813 - TANGO_ZMQ_HEARTBEAT_PORT=5913 healthcheck: - test: l2ss-health STAT/DigitalBeam/HBA + test: l2ss-health dserver/DigitalBeam/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-docker.yml b/docker-compose/device-docker.yml index bf51663ae..9ef0917b0 100644 --- a/docker-compose/device-docker.yml +++ b/docker-compose/device-docker.yml @@ -41,7 +41,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5805 - TANGO_ZMQ_HEARTBEAT_PORT=5905 healthcheck: - test: l2ss-health STAT/Docker/1 + test: l2ss-health dserver/Docker/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-ec.yml b/docker-compose/device-ec.yml index cdb95022b..48e015f2a 100644 --- a/docker-compose/device-ec.yml +++ b/docker-compose/device-ec.yml @@ -34,7 +34,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5829 - TANGO_ZMQ_HEARTBEAT_PORT=5929 healthcheck: - test: l2ss-health STAT/ec/1 + test: l2ss-health dserver/ec/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-observation-control.yml b/docker-compose/device-observation-control.yml index f5fcaa1a6..baf3b68c7 100644 --- a/docker-compose/device-observation-control.yml +++ b/docker-compose/device-observation-control.yml @@ -38,7 +38,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5803 - TANGO_ZMQ_HEARTBEAT_PORT=5903 healthcheck: - test: l2ss-health STAT/ObservationControl/1 + test: l2ss-health dserver/ObservationControl/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-pcon.yml b/docker-compose/device-pcon.yml index 093c22c10..e5b9d1d30 100644 --- a/docker-compose/device-pcon.yml +++ b/docker-compose/device-pcon.yml @@ -34,7 +34,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5820 - TANGO_ZMQ_HEARTBEAT_PORT=5920 healthcheck: - test: l2ss-health STAT/pcon/1 + test: l2ss-health dserver/pcon/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-psoc.yml b/docker-compose/device-psoc.yml index 3610a7e34..ab8ee4388 100644 --- a/docker-compose/device-psoc.yml +++ b/docker-compose/device-psoc.yml @@ -34,7 +34,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5819 - TANGO_ZMQ_HEARTBEAT_PORT=5919 healthcheck: - test: l2ss-health STAT/PSOC/1 + test: l2ss-health dserver/PSOC/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-recvh.yml b/docker-compose/device-recvh.yml index f23371840..0f16da4f6 100644 --- a/docker-compose/device-recvh.yml +++ b/docker-compose/device-recvh.yml @@ -31,7 +31,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5825 - TANGO_ZMQ_HEARTBEAT_PORT=5925 healthcheck: - test: l2ss-health STAT/RECVH/1 + test: l2ss-health dserver/RECVH/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-recvl.yml b/docker-compose/device-recvl.yml index 67d098e2f..f6c905623 100644 --- a/docker-compose/device-recvl.yml +++ b/docker-compose/device-recvl.yml @@ -31,7 +31,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5826 - TANGO_ZMQ_HEARTBEAT_PORT=5926 healthcheck: - test: l2ss-health STAT/RECVL/1 + test: l2ss-health dserver/RECVL/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml index e47185925..52bb3d72c 100644 --- a/docker-compose/device-sdp.yml +++ b/docker-compose/device-sdp.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5801 - TANGO_ZMQ_HEARTBEAT_PORT=5901 healthcheck: - test: l2ss-health STAT/SDP/1 + test: l2ss-health dserver/SDP/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-sdpfirmware.yml b/docker-compose/device-sdpfirmware.yml index b643bb0b0..731c975ab 100644 --- a/docker-compose/device-sdpfirmware.yml +++ b/docker-compose/device-sdpfirmware.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5827 - TANGO_ZMQ_HEARTBEAT_PORT=5927 healthcheck: - test: l2ss-health STAT/SDPFirmware/1 + test: l2ss-health dserver/SDPFirmware/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-sst.yml b/docker-compose/device-sst.yml index 8020af212..b1712b91d 100644 --- a/docker-compose/device-sst.yml +++ b/docker-compose/device-sst.yml @@ -46,7 +46,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5802 - TANGO_ZMQ_HEARTBEAT_PORT=5902 healthcheck: - test: l2ss-health STAT/SST/1 + test: l2ss-health dserver/SST/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-station-manager.yml b/docker-compose/device-station-manager.yml index fb27bec2d..f35e7f1e9 100644 --- a/docker-compose/device-station-manager.yml +++ b/docker-compose/device-station-manager.yml @@ -34,7 +34,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5823 - TANGO_ZMQ_HEARTBEAT_PORT=5923 healthcheck: - test: l2ss-health STAT/StationManager/1 + test: l2ss-health dserver/StationManager/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-temperature-manager.yml b/docker-compose/device-temperature-manager.yml index a62613803..14c8f3bb6 100644 --- a/docker-compose/device-temperature-manager.yml +++ b/docker-compose/device-temperature-manager.yml @@ -34,7 +34,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5816 - TANGO_ZMQ_HEARTBEAT_PORT=5916 healthcheck: - test: l2ss-health STAT/TemperatureManager/1 + test: l2ss-health dserver/TemperatureManager/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-tilebeam.yml b/docker-compose/device-tilebeam.yml index 5f36c7b30..ecad1f162 100644 --- a/docker-compose/device-tilebeam.yml +++ b/docker-compose/device-tilebeam.yml @@ -35,7 +35,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5811 - TANGO_ZMQ_HEARTBEAT_PORT=5911 healthcheck: - test: l2ss-health STAT/TileBeam/HBA + test: l2ss-health dserver/TileBeam/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-unb2.yml b/docker-compose/device-unb2.yml index fdfa1938e..9377bc0c6 100644 --- a/docker-compose/device-unb2.yml +++ b/docker-compose/device-unb2.yml @@ -39,7 +39,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5804 - TANGO_ZMQ_HEARTBEAT_PORT=5904 healthcheck: - test: l2ss-health STAT/UNB2/1 + test: l2ss-health dserver/UNB2/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/device-xst.yml b/docker-compose/device-xst.yml index bb9a3e6d4..104472ebf 100644 --- a/docker-compose/device-xst.yml +++ b/docker-compose/device-xst.yml @@ -46,7 +46,7 @@ services: - TANGO_ZMQ_EVENT_PORT=5806 - TANGO_ZMQ_HEARTBEAT_PORT=5906 healthcheck: - test: l2ss-health STAT/XST/1 + test: l2ss-health dserver/XST/STAT interval: 1m timeout: 30s retries: 3 diff --git a/docker-compose/http-json-schemas/definitions/observation-settings.json b/docker-compose/http-json-schemas/definitions/observation-settings.json index 7e0aef69c..2162b6007 100644 --- a/docker-compose/http-json-schemas/definitions/observation-settings.json +++ b/docker-compose/http-json-schemas/definitions/observation-settings.json @@ -4,6 +4,7 @@ "required": [ "observation_id", "stop_time", + "antenna_field", "antenna_set", "filter", "SAPs" @@ -17,6 +18,17 @@ "type": "string", "format": "date-time" }, + "antenna_field": { + "default": "HBA", + "description": "Antenna field to use", + "type": "string", + "enum": [ + "LBA", + "HBA", + "HBA0", + "HBA1" + ] + }, "antenna_set": { "default": "ALL", "description": "Fields & antennas to use", diff --git a/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json b/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json index d569a7f99..799763fc6 100644 --- a/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json +++ b/tangostationcontrol/integration_test/configuration/configDB/LOFAR_ConfigDb.json @@ -101,7 +101,7 @@ "RECVL, RECV_TEMP_error_R" ], "Shutdown_Device_List":[ - "STAT/SDP/1", "STAT/UNB2/1", "STAT/RECVH/1", "STAT/RECVL/1", "STAT/APSCT/1", "STAT/CCD/1", "STAT/APSPU/1" + "STAT/SDP/HBA", "STAT/UNB2/1", "STAT/RECVH/1", "STAT/RECVL/1", "STAT/APSCT/1", "STAT/CCD/1", "STAT/APSPU/1" ] } } @@ -119,7 +119,7 @@ "Beamlet": { "STAT": { "Beamlet": { - "STAT/Beamlet/1": { + "STAT/Beamlet/HBA": { "properties": { "FPGA_beamlet_output_hdr_eth_source_mac_RW_default": [ "00:22:86:08:00:00", @@ -274,7 +274,7 @@ "SDP": { "STAT": { "SDP": { - "STAT/SDP/1": { + "STAT/SDP/HBA": { "properties": { } } @@ -284,7 +284,7 @@ "BST": { "STAT": { "BST": { - "STAT/BST/1": { + "STAT/BST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5003" @@ -318,7 +318,7 @@ "SST": { "STAT": { "SST": { - "STAT/SST/1": { + "STAT/SST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5001" @@ -352,7 +352,7 @@ "XST": { "STAT": { "XST": { - "STAT/XST/1": { + "STAT/XST/HBA": { "properties": { "Statistics_Client_UDP_Port": [ "5002" diff --git a/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json b/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json index 4d7cc3644..ec768aa28 100644 --- a/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json +++ b/tangostationcontrol/integration_test/configuration/configDB/simulators_ConfigDb.json @@ -73,7 +73,7 @@ "Beamlet": { "STAT": { "Beamlet": { - "STAT/Beamlet/1": { + "STAT/Beamlet/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -186,7 +186,7 @@ "SDPFirmware": { "STAT": { "SDPFirmware": { - "STAT/SDPFirmware/1": { + "STAT/SDPFirmware/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -205,7 +205,7 @@ "SDP": { "STAT": { "SDP": { - "STAT/SDP/1": { + "STAT/SDP/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -224,7 +224,7 @@ "BST": { "STAT": { "BST": { - "STAT/BST/1": { + "STAT/BST/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -279,7 +279,7 @@ "SST": { "STAT": { "SST": { - "STAT/SST/1": { + "STAT/SST/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" @@ -334,7 +334,7 @@ "XST": { "STAT": { "XST": { - "STAT/XST/1": { + "STAT/XST/HBA": { "properties": { "OPC_Server_Name": [ "sdptr-sim" diff --git a/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py b/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py index 8fcb8592c..8e6cbd04d 100644 --- a/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py +++ b/tangostationcontrol/integration_test/default/devices/interfaces/test_power_hierarchy.py @@ -24,12 +24,12 @@ class TestPowerHierarchy(base.IntegrationTestCase): ccd_name = "STAT/CCD/1" pcon_name = "STAT/PCON/1" psoc_name = "STAT/PSOC/1" - sdp_name = "STAT/SDP/1" + sdp_name = "STAT/SDP/HBA" unb2_name = "STAT/UNB2/1" recvh_name = "STAT/RECVH/1" recvl_name = "STAT/RECVL/1" - sdp_name = "STAT/SDP/1" - sdpfirmware_name = "STAT/SDPFirmware/1" + sdp_name = "STAT/SDP/HBA" + sdpfirmware_name = "STAT/SDPFirmware/HBA" def setUp(self): super().setUp() diff --git a/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py b/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py index 084798625..85c81dc5d 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_antennafield.py @@ -61,7 +61,7 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase): @staticmethod def shutdown_sdp(): - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() def setup_recv_proxy(self): @@ -74,14 +74,14 @@ class TestAntennaFieldDevice(AbstractTestBases.TestDeviceBase): def setup_sdpfirmware_proxy(self): # setup SDPFirmware - sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1") + sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA") sdpfirmware_proxy.off() sdpfirmware_proxy.warm_boot() return sdpfirmware_proxy def setup_sdp_proxy(self): # setup SDP - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() return sdp_proxy diff --git a/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py b/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py index 3e6bb3d09..02814dcbe 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_beamlet.py @@ -22,7 +22,7 @@ from integration_test.default.devices.base import AbstractTestBases class TestDeviceBeamlet(AbstractTestBases.TestDeviceBase): def setUp(self): """Intentionally recreate the device object in each test""" - super().setUp("STAT/Beamlet/1") + super().setUp("STAT/Beamlet/HBA") def test_device_read_all_attributes(self): # We need to connect to SDP first to read some of our attributes @@ -32,7 +32,7 @@ class TestDeviceBeamlet(AbstractTestBases.TestDeviceBase): def setup_sdp(self, antenna_type="HBA", clock=CLK_200_MHZ): # setup SDP, on which this device depends - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() sdp_proxy.set_defaults() diff --git a/tangostationcontrol/integration_test/default/devices/test_device_bst.py b/tangostationcontrol/integration_test/default/devices/test_device_bst.py index aadefbc35..c4a08d430 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_bst.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_bst.py @@ -8,7 +8,7 @@ from integration_test.default.devices.base import AbstractTestBases class TestDeviceBST(AbstractTestBases.TestDeviceBase): def setUp(self): """Intentionally recreate the device object in each test""" - super().setUp("STAT/BST/1") + super().setUp("STAT/BST/HBA") def test_device_read_all_attributes(self): # We need to connect to SDP first to read some of our attributes @@ -18,7 +18,7 @@ class TestDeviceBST(AbstractTestBases.TestDeviceBase): def setup_sdp(self): # setup SDP, on which this device depends - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() sdp_proxy.set_defaults() diff --git a/tangostationcontrol/integration_test/default/devices/test_device_calibration.py b/tangostationcontrol/integration_test/default/devices/test_device_calibration.py index 7f9313d90..725d50a60 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_calibration.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_calibration.py @@ -106,7 +106,7 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase): @staticmethod def shutdown_sdp(): - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() @staticmethod @@ -127,14 +127,14 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase): def setup_sdpfirmware_proxy(self): # setup SDP - sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1") + sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA") sdpfirmware_proxy.off() sdpfirmware_proxy.warm_boot() return sdpfirmware_proxy def setup_sdp_proxy(self): # setup SDP - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() return sdp_proxy diff --git a/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py b/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py index 4fcbae3f1..76cfd79e1 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_digitalbeam.py @@ -34,10 +34,10 @@ class TestDeviceDigitalBeam(AbstractTestBases.TestDeviceBase): antenna_use_ok = numpy.array([AntennaUse.AUTO] * MAX_ANTENNA) antennafield_iden = "STAT/AntennaField/HBA" - beamlet_iden = "STAT/Beamlet/1" + beamlet_iden = "STAT/Beamlet/HBA" recv_iden = "STAT/RECVH/1" - sdpfirmware_iden = "STAT/SDPFirmware/1" - sdp_iden = "STAT/SDP/1" + sdpfirmware_iden = "STAT/SDPFirmware/HBA" + sdp_iden = "STAT/SDP/HBA" def setUp(self): """Intentionally recreate the device object in each test""" diff --git a/tangostationcontrol/integration_test/default/devices/test_device_observation.py b/tangostationcontrol/integration_test/default/devices/test_device_observation.py index 83332db52..4c41ef96d 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_observation.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_observation.py @@ -140,14 +140,14 @@ class TestDeviceObservation(AbstractTestBases.TestDeviceBase): def setup_sdpfirmware_proxy(self): # setup SDPFirmware - sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1") + sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA") sdpfirmware_proxy.off() sdpfirmware_proxy.warm_boot() return sdpfirmware_proxy def setup_sdp_proxy(self): # setup SDP - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() return sdp_proxy @@ -181,7 +181,7 @@ class TestDeviceObservation(AbstractTestBases.TestDeviceBase): def setup_beamlet_proxy(self): # setup Digitalbeam - beamlet_proxy = TestDeviceProxy("STAT/Beamlet/1") + beamlet_proxy = TestDeviceProxy("STAT/Beamlet/HBA") beamlet_proxy.off() beamlet_proxy.warm_boot() beamlet_proxy.set_defaults() diff --git a/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py b/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py index c570b79d3..1f27234f5 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_observation_control.py @@ -136,14 +136,14 @@ class TestObservationControlDevice(AbstractTestBases.TestDeviceBase): def setup_sdpfirmware_proxy(self): # setup SDPFirmware - sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1") + sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA") sdpfirmware_proxy.off() sdpfirmware_proxy.warm_boot() return sdpfirmware_proxy def setup_sdp_proxy(self): # setup SDP - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() return sdp_proxy @@ -166,7 +166,7 @@ class TestObservationControlDevice(AbstractTestBases.TestDeviceBase): def setup_beamlet_proxy(self): # setup Digitalbeam - beamlet_proxy = TestDeviceProxy("STAT/Beamlet/1") + beamlet_proxy = TestDeviceProxy("STAT/Beamlet/HBA") beamlet_proxy.off() beamlet_proxy.warm_boot() beamlet_proxy.set_defaults() diff --git a/tangostationcontrol/integration_test/default/devices/test_device_sdp.py b/tangostationcontrol/integration_test/default/devices/test_device_sdp.py index bfcf1bb6a..ec89efef3 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_sdp.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_sdp.py @@ -7,4 +7,4 @@ from integration_test.default.devices.base import AbstractTestBases class TestDeviceSDP(AbstractTestBases.TestDeviceBase): def setUp(self): """Intentionally recreate the device object in each test""" - super().setUp("STAT/SDP/1") + super().setUp("STAT/SDP/HBA") diff --git a/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py b/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py index deb9ef968..dfaf90301 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_sdpfirmware.py @@ -9,7 +9,7 @@ from integration_test.default.devices.base import AbstractTestBases class TestDeviceSDPFirmware(AbstractTestBases.TestDeviceBase): def setUp(self): """Intentionally recreate the device object in each test""" - super().setUp("STAT/SDPFirmware/1") + super().setUp("STAT/SDPFirmware/HBA") def test_device_sdpfirmware_read_attribute(self): """Test if we can read an attribute obtained over OPC-UA""" diff --git a/tangostationcontrol/integration_test/default/devices/test_device_sst.py b/tangostationcontrol/integration_test/default/devices/test_device_sst.py index 9ad21fcbe..1f0781110 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_sst.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_sst.py @@ -14,7 +14,7 @@ from integration_test.default.devices.base import AbstractTestBases class TestDeviceSST(AbstractTestBases.TestDeviceBase): def setUp(self): """Intentionally recreate the device object in each test""" - super().setUp("STAT/SST/1") + super().setUp("STAT/SST/HBA") def test_device_read_all_attributes(self): # We need to connect to SDP first to read some of our attributes @@ -25,7 +25,7 @@ class TestDeviceSST(AbstractTestBases.TestDeviceBase): def setup_sdpfirmware(self): # setup SDP Firmware - sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1") + sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA") sdpfirmware_proxy.off() sdpfirmware_proxy.warm_boot() sdpfirmware_proxy.set_defaults() @@ -33,7 +33,7 @@ class TestDeviceSST(AbstractTestBases.TestDeviceBase): def setup_sdp(self): # setup SDP, on which this device depends - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() sdp_proxy.set_defaults() diff --git a/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py b/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py index ac0484695..32bf3719c 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_temperature_manager.py @@ -21,8 +21,8 @@ logger = logging.getLogger() class TestDeviceTemperatureManager(AbstractTestBases.TestDeviceBase): - sdp_name = "STAT/SDP/1" - sdp_firmware_name = "STAT/SDPFirmware/1" + sdp_name = "STAT/SDP/HBA" + sdp_firmware_name = "STAT/SDPFirmware/HBA" rcu2h_name = "STAT/RECVH/1" temperature_manager_name = "STAT/TemperatureManager/1" diff --git a/tangostationcontrol/integration_test/default/devices/test_device_xst.py b/tangostationcontrol/integration_test/default/devices/test_device_xst.py index 4b0811b2a..806f3148d 100644 --- a/tangostationcontrol/integration_test/default/devices/test_device_xst.py +++ b/tangostationcontrol/integration_test/default/devices/test_device_xst.py @@ -8,7 +8,7 @@ from integration_test.default.devices.base import AbstractTestBases class TestDeviceSST(AbstractTestBases.TestDeviceBase): def setUp(self): """Intentionally recreate the device object in each test""" - super().setUp("STAT/XST/1") + super().setUp("STAT/XST/HBA") def test_device_read_all_attributes(self): # We need to connect to SDP first to read some of our attributes @@ -18,7 +18,7 @@ class TestDeviceSST(AbstractTestBases.TestDeviceBase): def setup_sdp(self): # setup SDP, on which this device depends - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() sdp_proxy.warm_boot() sdp_proxy.set_defaults() diff --git a/tangostationcontrol/integration_test/default/devices/test_observation.py b/tangostationcontrol/integration_test/default/devices/test_observation.py index 05b26a192..e262c512d 100644 --- a/tangostationcontrol/integration_test/default/devices/test_observation.py +++ b/tangostationcontrol/integration_test/default/devices/test_observation.py @@ -25,8 +25,8 @@ class TestObservation(base.IntegrationTestCase): # make sure any devices we depend on are also started for device in [ "STAT/RECVH/1", - "STAT/SDP/1", - "STAT/Beamlet/1", + "STAT/SDP/HBA", + "STAT/Beamlet/HBA", "STAT/DigitalBeam/HBA", "STAT/TileBeam/HBA", "STAT/AntennaField/HBA", diff --git a/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py b/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py index e67423f9d..533366f5d 100644 --- a/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py +++ b/tangostationcontrol/integration_test/default/prometheus/test_tango_prometheus_client.py @@ -4,6 +4,7 @@ import importlib import os import sys +import fnmatch import numpy from tango import Database @@ -70,9 +71,12 @@ class TestPrometheusClient(BaseIntegrationTestCase): config_retrieved_devices = [ *policy.config["devices"].keys() ] # list of device names from policy file - for d in config_retrieved_devices: - if "*" not in d: # filter out wildcards - self.assertIn(d, policy_devices) + + # any device in the db matching a key should be present + for d in db_devices: + for c in config_retrieved_devices: + if fnmatch.fnmatch(d.casefold(), c.casefold()): + self.assertIn(d, policy_devices) def test_archiver_policy_attribute_list(self): """Test if the full set of archiving policy for the given device is retrieved""" diff --git a/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py b/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py index 0f92a29ee..0b48e86d4 100644 --- a/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py +++ b/tangostationcontrol/integration_test/digitalbeam_performance/test_digitalbeam_performance.py @@ -37,10 +37,10 @@ class TestDigitalbeamPerformance(base.IntegrationTestCase): tracking=False, ): # Setup multi SDP / recv and separate hba / lba antennafield / digitalbeam - for i, item in enumerate(["HBA", "LBA"]): - sdpfirmware_proxies.append(TestDeviceProxy(f"STAT/SDPFirmware/{i + 1}")) - sdp_proxies.append(TestDeviceProxy(f"STAT/SDP/{i + 1}")) - beamlet_proxies.append(TestDeviceProxy(f"STAT/Beamlet/{i + 1}")) + for item in ["HBA", "LBA"]: + sdpfirmware_proxies.append(TestDeviceProxy(f"STAT/SDPFirmware/{item}")) + sdp_proxies.append(TestDeviceProxy(f"STAT/SDP/{item}")) + beamlet_proxies.append(TestDeviceProxy(f"STAT/Beamlet/{item}")) antenna_field_proxies.append(TestDeviceProxy(f"STAT/AntennaField/{item}")) beam_proxies.append(TestDeviceProxy(f"STAT/DigitalBeam/{item}")) recv_proxies.append(TestDeviceProxy(f"STAT/RECV{item[0]}/1")) diff --git a/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py b/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py index 247f1188e..8eda5ab52 100644 --- a/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py +++ b/tangostationcontrol/integration_test/tilebeam_performance/test_tilebeam_performance.py @@ -40,14 +40,14 @@ class TestTilebeamPerformance(base.IntegrationTestCase): manager_proxy.put_property({"Control_Children": manager_children}) # SDPFirmware and SDP must be ready before AntennaField - sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/1") + sdpfirmware_proxy = TestDeviceProxy("STAT/SDPFirmware/HBA") sdpfirmware_proxy.off() self.assertTrue(sdpfirmware_proxy.state() is DevState.OFF) sdpfirmware_proxy.warm_boot() sdpfirmware_proxy.set_defaults() self.assertTrue(sdpfirmware_proxy.state() is DevState.ON) - sdp_proxy = TestDeviceProxy("STAT/SDP/1") + sdp_proxy = TestDeviceProxy("STAT/SDP/HBA") sdp_proxy.off() self.assertTrue(sdp_proxy.state() is DevState.OFF) sdp_proxy.warm_boot() @@ -78,7 +78,7 @@ class TestTilebeamPerformance(base.IntegrationTestCase): proxy.put_property( { "Control_Children": [ - "STAT/SDPFirmware/1", + "STAT/SDPFirmware/HBA", f"STAT/RECVH/{n}", f"STAT/tilebeam/HBA{n-1}", ], diff --git a/tangostationcontrol/requirements.txt b/tangostationcontrol/requirements.txt index 235750e1e..0c2234af9 100644 --- a/tangostationcontrol/requirements.txt +++ b/tangostationcontrol/requirements.txt @@ -10,7 +10,7 @@ psycopg2-binary >= 2.9.2 # LGPL pyasn1 == 0.4.8 # BSD, pinned because https://github.com/pyasn1/pyasn1/issues/28 pysnmp >= 0.1.7 # BSD h5py >= 3.1.0 # BSD -jsonschema >= 4.0.0 # MIT +jsonschema == 4.17.3 # MIT docker >= 5.0.3 # Apache 2 python-logstash-async >= 2.5.0 # MIT python-casacore >= 3.3.1 # LGPLv3 diff --git a/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py b/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py index 19cf94f2b..4e8c4e5df 100644 --- a/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py +++ b/tangostationcontrol/tangostationcontrol/configuration/observation_settings.py @@ -14,6 +14,7 @@ class ObservationSettings(_ConfigurationBase): self, observation_id: int, stop_time: datetime, + antenna_field: str, antenna_set: str, filter: str, SAPs: Sequence[Sap], @@ -22,6 +23,7 @@ class ObservationSettings(_ConfigurationBase): ): self.observation_id = observation_id self.stop_time = stop_time + self.antenna_field = antenna_field self.antenna_set = antenna_set self.filter = filter self.SAPs = SAPs @@ -32,6 +34,7 @@ class ObservationSettings(_ConfigurationBase): yield from { "observation_id": self.observation_id, "stop_time": self.stop_time.isoformat(), + "antenna_field": self.antenna_field, "antenna_set": self.antenna_set, "filter": self.filter, "SAPs": [dict(s) for s in self.SAPs], @@ -45,6 +48,7 @@ class ObservationSettings(_ConfigurationBase): return ObservationSettings( json_dct["observation_id"], datetime.fromisoformat(json_dct["stop_time"]), + json_dct["antenna_field"], json_dct["antenna_set"], json_dct["filter"], json_dct["SAPs"], diff --git a/tangostationcontrol/tangostationcontrol/devices/boot.py b/tangostationcontrol/tangostationcontrol/devices/boot.py index 152fdf154..d942e27da 100644 --- a/tangostationcontrol/tangostationcontrol/devices/boot.py +++ b/tangostationcontrol/tangostationcontrol/devices/boot.py @@ -263,13 +263,13 @@ class Boot(LOFARDevice): "STAT/RECVH/1", "STAT/RECVL/1", "STAT/UNB2/1", # Uniboards host SDP, so initialise them first - "STAT/SDPFirmware/1", - "STAT/SDP/1", + "STAT/SDPFirmware/HBA", + "STAT/SDP/HBA", # SDP controls the mask for SST/XST/BST/Beamlet, so initialise it first - "STAT/BST/1", - "STAT/SST/1", - "STAT/XST/1", - "STAT/Beamlet/1", + "STAT/BST/HBA", + "STAT/SST/HBA", + "STAT/XST/HBA", + "STAT/Beamlet/HBA", "STAT/AntennaField/HBA", # Accesses RECVH # "STAT/AntennaField/LBA", # Accesses RECVL "STAT/TileBeam/HBA", # Accesses AntennaField diff --git a/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py b/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py index 2eef35a17..a6c72933a 100644 --- a/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py +++ b/tangostationcontrol/tangostationcontrol/devices/interfaces/hierarchy.py @@ -163,7 +163,13 @@ class AbstractHierarchy(ABC): proxies = {} for child in children: child = child.casefold() - proxies[child] = self._get_children(child, depth - 1) + + try: + proxies[child] = self._get_children(child, depth - 1) + except Exception as e: + raise ValueError( + f"Could not obtain proxy to child {child} of parent {proxy.dev_name()}" + ) from e return {"proxy": proxy, "children": proxies} diff --git a/tangostationcontrol/tangostationcontrol/devices/observation.py b/tangostationcontrol/tangostationcontrol/devices/observation.py index 8a9a2427d..f7c871f68 100644 --- a/tangostationcontrol/tangostationcontrol/devices/observation.py +++ b/tangostationcontrol/tangostationcontrol/devices/observation.py @@ -52,6 +52,7 @@ class Observation(LOFARDevice): ) observation_id_R = attribute(dtype=numpy.int64, access=AttrWriteType.READ) stop_time_R = attribute(dtype=numpy.float64, access=AttrWriteType.READ) + antenna_field_R = attribute(dtype=str, access=AttrWriteType.READ) antenna_set_R = attribute(dtype=str, access=AttrWriteType.READ) filter_R = attribute(dtype=str, access=AttrWriteType.READ) saps_subband_R = attribute( @@ -107,26 +108,30 @@ class Observation(LOFARDevice): self._num_saps = len(self._observation_settings.SAPs) self._saps_pointing = self._build_saps_pointing(self._observation_settings) + antennafield = self._observation_settings.antenna_field + # Set a reference of AntennaField device that is correlated to this device util = Util.instance() # TODO(Stefano): set a proper policy for the devices instance number # It cannot be inherited from the Observation instance number # (i.e. Observation_id) self.antennafield_proxy = create_device_proxy( - f"{util.get_ds_inst_name()}/AntennaField/HBA" + f"{util.get_ds_inst_name()}/AntennaField/{antennafield}" ) # Set a reference of Beamlet device that is correlated to this device - self.beamlet_proxy = create_device_proxy(f"{util.get_ds_inst_name()}/Beamlet/1") + self.beamlet_proxy = create_device_proxy( + f"{util.get_ds_inst_name()}/Beamlet/{antennafield}" + ) # Set a reference of DigitalBeam device that is correlated to this device self.digitalbeam_proxy = create_device_proxy( - f"{util.get_ds_inst_name()}/DigitalBeam/HBA" + f"{util.get_ds_inst_name()}/DigitalBeam/{antennafield}" ) # Set a reference of TileBeam device that is correlated to this device self.tilebeam_proxy = create_device_proxy( - f"{util.get_ds_inst_name()}/Tilebeam/HBA" + f"{util.get_ds_inst_name()}/Tilebeam/{antennafield}" ) logger.info( @@ -202,6 +207,13 @@ class Observation(LOFARDevice): """Return the stop_time_R attribute.""" return self._observation_settings.stop_time.timestamp() + @only_in_states([DevState.STANDBY, DevState.ON]) + @fault_on_error() + @log_exceptions() + def read_antenna_field_R(self): + """Return the antenna_field_R attribute.""" + return self._observation_settings.antenna_field + @only_in_states([DevState.STANDBY, DevState.ON]) @fault_on_error() @log_exceptions() diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py b/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py index f5c6dd33e..4bd3906a9 100644 --- a/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py +++ b/tangostationcontrol/tangostationcontrol/devices/sdp/beamlet.py @@ -101,7 +101,7 @@ class Beamlet(OPCUADevice): dtype=str, doc="Which SDP device subscribed for this beamlet", mandatory=False, - default_value="STAT/SDP/1", + default_value="STAT/SDP/HBA", ) FIRST_DEFAULT_SETTINGS = [ diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py index 4e9656dbe..15c06b24d 100644 --- a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py +++ b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py @@ -70,7 +70,7 @@ class DigitalBeam(BeamDevice): dtype=str, doc="Which Beamlet represents the FPGAs to steer.", mandatory=False, - default_value="STAT/Beamlet/1", + default_value="STAT/Beamlet/HBA", ) # ---------- diff --git a/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py b/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py index ba6ce85c2..bd006b767 100644 --- a/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py +++ b/tangostationcontrol/tangostationcontrol/devices/temperature_manager.py @@ -69,7 +69,7 @@ class TemperatureManager(LOFARDevice): dtype=[str], mandatory=False, default_value=[ - "STAT/SDP/1", + "STAT/SDP/HBA", "STAT/UNB2/1", "STAT/RECVH/1", "STAT/RECVL/1", diff --git a/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py b/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py index a8740461a..18cb8feb5 100644 --- a/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py +++ b/tangostationcontrol/tangostationcontrol/test/devices/test_observation_base.py @@ -7,6 +7,7 @@ class TestObservationBase: { "observation_id": 12345, "stop_time": "2106-02-07T00:00:00", + "antenna_field": "HBA", "antenna_set": "ALL", "filter": "HBA_110_190", "SAPs": [{ diff --git a/tangostationcontrol/test/common/test_observation_controller.py b/tangostationcontrol/test/common/test_observation_controller.py index 16e81ad5c..3aa1091ab 100644 --- a/tangostationcontrol/test/common/test_observation_controller.py +++ b/tangostationcontrol/test/common/test_observation_controller.py @@ -43,6 +43,7 @@ class TestRunningObservation(base.TestCase): SETTINGS = ObservationSettings( 5, datetime.fromisoformat("2022-10-26T11:35:54.704150"), + "HBA", "ALL", "filter settings", [Sap([3, 2], Pointing(1.2, 2.1, "LMN")), Sap([1], Pointing(3.3, 4.4, "MOON"))], diff --git a/tangostationcontrol/test/configuration/_mock_requests.py b/tangostationcontrol/test/configuration/_mock_requests.py index cf9c17700..314c1b40d 100644 --- a/tangostationcontrol/test/configuration/_mock_requests.py +++ b/tangostationcontrol/test/configuration/_mock_requests.py @@ -79,6 +79,7 @@ OBSERVATION_SETTINGS_SCHEMA = """ "required": [ "observation_id", "stop_time", + "antenna_field", "antenna_set", "filter", "SAPs" @@ -92,6 +93,9 @@ OBSERVATION_SETTINGS_SCHEMA = """ "type": "string", "format": "date-time" }, + "antenna_field": { + "type": "string" + }, "antenna_set": { "type": "string" }, diff --git a/tangostationcontrol/test/configuration/test_observation_settings.py b/tangostationcontrol/test/configuration/test_observation_settings.py index 4a3effeaa..7f67d02e1 100644 --- a/tangostationcontrol/test/configuration/test_observation_settings.py +++ b/tangostationcontrol/test/configuration/test_observation_settings.py @@ -18,6 +18,7 @@ class TestObservationSettings(base.TestCase): def test_from_json(self, _): sut = ObservationSettings.from_json( '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", ' + '"antenna_field": "HBA", ' '"antenna_set": "ALL", "filter": "filter_settings",' '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}]}' ) @@ -30,6 +31,7 @@ class TestObservationSettings(base.TestCase): sut = ObservationSettings.from_json( '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", ' + '"antenna_field": "HBA", ' '"antenna_set": "ALL", "filter": "filter_settings",' '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],' '"tile_beam": {"angle1":2.2, "angle2": 3.1, "direction_type":"MOON"} }' @@ -41,6 +43,7 @@ class TestObservationSettings(base.TestCase): sut = ObservationSettings.from_json( '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", ' + '"antenna_field": "HBA", ' '"antenna_set": "ALL", "filter": "filter_settings",' '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],' '"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}' @@ -51,19 +54,19 @@ class TestObservationSettings(base.TestCase): def test_from_json_type_missmatch(self, _): for json in [ # observation_id - '{"observation_id": "3", "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": "3", "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # stop_time - '{"observation_id": 3, "stop_time": "test", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "test", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # antenna_set - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": 4, "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": 4, "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # filter - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": 1,"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": 1,"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # SAPs - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": {"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}},"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', - # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [1],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', - # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": 1, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": {"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}},"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [1],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + # '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": 1, "first_beamlet": 2}', # first_beamlet - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": "2"}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": "2"}', ]: with self.assertRaises((ValidationError, ValueError), msg=f"{json}"): ObservationSettings.from_json(json) @@ -71,17 +74,19 @@ class TestObservationSettings(base.TestCase): def test_from_json_missing_fields(self, _): for json in [ # observation_id - '{"stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # stop_time - '{"observation_id": 3, "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + # antenna_field + '{"observation_id": 3, "antenna_set": "ALL", "stop_time": "2012-04-23T18:25:43", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # antenna_set - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "antenna_field": "HBA", "stop_time": "2012-04-23T18:25:43", "filter": "filter_settings","SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # filter - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # SAPs - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', # SAPs (empty list) - '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', + '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", "antenna_field": "HBA", "antenna_set": "ALL", "filter": "filter_settings","SAPs": [],"tile_beam": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}, "first_beamlet": 2}', ]: with self.assertRaises((ValidationError, ValueError), msg=f"{json}"): ObservationSettings.from_json(json) @@ -90,6 +95,7 @@ class TestObservationSettings(base.TestCase): sut = ObservationSettings( 5, datetime.fromisoformat("2022-10-26T11:35:54.704150"), + "HBA", "ALL", "filter settings", [ @@ -100,6 +106,7 @@ class TestObservationSettings(base.TestCase): self.assertEqual( sut.to_json(), '{"observation_id": 5, "stop_time": "2022-10-26T11:35:54.704150", ' + '"antenna_field": "HBA", ' '"antenna_set": "ALL", "filter": "filter settings", "SAPs": ' '[{"subbands": [3, 2], "pointing": {"angle1": 1.2, "angle2": 2.1, ' '"direction_type": "LMN"}}, {"subbands": [1], "pointing": {"angle1": 3.3, ' @@ -112,6 +119,7 @@ class TestObservationSettings(base.TestCase): with self.assertRaises(RefResolutionError): ObservationSettings.from_json( '{"observation_id": 3, "stop_time": "2012-04-23T18:25:43", ' + '"antenna_field": "HBA", ' '"antenna_set": "ALL", "filter": "filter_settings",' '"SAPs": [{"subbands": [3, 2, 1], "pointing": {"angle1":1.2, "angle2": 2.1, "direction_type":"LMN"}}]}' ) -- GitLab