ODA Command Line Interface (CLI)
The ODA Command Line Interface package provides the user with a simple interface for accessing and querying different entities stored in the ODA.
Currently supported entity types (followed by the CLI abbreviation) are:
Scheduling Block Definitions (sbds)
Scheduling Block Instances (sbis)
Execution Blocks (ebs)
Projects (prjs)
Scheduling Block Definitions Status history (sbd_status_history)
Scheduling Block Instances Status history (sbi_status_history)
Execution Blocks Status history (eb_status_history)
Projects Status history (prj_status_history)
Configuration
ODA CLI is installed as part of the ska-db-oda package:
$ pip install ska-db-oda --extra-index-url=https://artefact.skao.int/repository/pypi-internal/simple
The CLI can be configured to query an ODA API via an environment variable
$ export ODA_URL=``http://<minikube_ip>/<kube_namespace>/oda/api/v<MAJOR_VERSION>``
To ensure the CLI is available, and for more help, run oda --help.
The typical use pattern is then as below, and specific examples can be seen in the following sections.
$ oda <entity abbreviation> <command> <parameters>
Commands
ODA CLI command |
Parameters |
Description |
|
|---|---|---|---|
get get |
entity_id associated_entity |
Get entity by ID, first specifying entity type. Example: oda sbis get sbi-mvp01-20200325-00001 Get associated entity data by specifying entity id. Example: oda ebs get ‘eb-t0001-20240521-00003’ ‘sbds’ |
|
query |
Query ODA for entity IDs. The query can be one of the following: |
||
user |
User query: Specify a name of the creator of the entity |
||
starts_with |
set starts_with to True if only wanting to match the beginning of the user |
||
contains |
set contains to True if only wanting to match the pattern of the entity_id/user |
||
created_before |
Date created query: Specify a start and/or end date for when the entity was first created |
||
created_after |
|||
last_modified_before |
Date modified query: Specify a start and/or end date for when the entity was last modified. |
||
last_modified_after |
|||
entity_id |
EntityID query: Specify a entity_id of the creator of entity, set starts_with to True if only wanting to match beginning of the entity_id or set contains to True if want to match the pattern.(False by default) |
||
Examples
A typical use case would be to query for entities created in a certain time window or by a certain user, then to retrieve the full entity.
For example, to query all ExecutionBlocks created on a certain day
$ oda sbis query --created_after='2022-10-18 00:00' --created_before='2024-10-18 23:59'
Query Parameters
---------------
query_type = QueryType.CREATED_BETWEEN
start = 2022-10-18 00:00:00
end = 2024-10-18 23:59:00
Result
-------
[
{
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-07T16:28:41.314279+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-07T16:28:41.314279+00:00",
"version": 1
},
"sbd_ref": "sbd-mvp01-20220923-00003",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00003",
"subarray_id": 3,
"telescope": "ska_mid"
},
{
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-03T18:26:50.416261+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-03T18:26:50.416261+00:00",
"version": 1
},
"sbd_ref": "sbi-mvp01-20220923-00002",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00002",
"subarray_id": 3,
"telescope": "ska_mid"
},
{
"activities": [
{
"activity_ref": "test activity",
"executed_at": "2022-09-23T15:43:53.971548+00:00",
"runtime_args": [
{
"function_args": {
"kwargs": {
"foo": "bar"
}
},
"function_name": "test_fn"
}
]
}
],
"eb_ref": "eb-mvp01-20220923-00001",
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-18T17:02:53.611151+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-18T17:02:53.611151+00:00",
"version": 1
},
"sbd_ref": "sbd-mvp01-20220923-00001",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00001",
"subarray_id": 3,
"telescope": "ska_mid"
}
]
Then fetch the full ExecutionBlock for one of the IDs.
$ oda ebs get eb-t0001-20231018-00004
{
"interface": "https://schema.skao.int/ska-oso-pdm-eb/0.1",
"eb_id": "eb-t0001-20231018-00004",
"metadata": {
"version": 1,
"created_by": "DefaultUser",
"created_on": "2023-10-18T08:36:46.710630+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-18T08:36:46.710630+00:00"
},
"telescope": "ska_mid",
"sbd_ref": "sbd-mvp01-20220923-00001",
"sbd_version": 1,
"sbi_ref": "sbi-mvp01-20220923-00001",
"request_responses": [
{
"request": "ska_oso_scripting.functions.devicecontrol.release_all_resources",
"request_args": "{'args': None, 'kwargs': {'subarray_id': '1'}}",
"status": "OK",
"response": {
"result": "this is a result"
},
"request_sent_at": "2022-09-23T15:43:53.971548+00:00",
"response_received_at": "2022-09-23T15:43:53.971548+00:00"
},
{
"request": "ska_oso_scripting.functions.devicecontrol.scan",
"status": "ERROR",
"error": {
"detail": "this is an error"
},
"request_sent_at": "2022-09-23T15:43:53.971548+00:00"
}
]
}
Another example, to query SBInstances by user
$ oda sbis query -user='DefaultUser' --starts-with
Query Parameters
---------------
user = DefaultUser
match_type = MatchType.STARTS_WITH
Result
-------
[
{
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-07T16:28:41.314279+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-07T16:28:41.314279+00:00",
"version": 1
},
"sbd_ref": "sbd-mvp01-20220923-00003",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00003",
"subarray_id": 3,
"telescope": "ska_mid"
},
{
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-03T18:26:50.416261+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-03T18:26:50.416261+00:00",
"version": 1
},
"sbd_ref": "sbi-mvp01-20220923-00002",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00002",
"subarray_id": 3,
"telescope": "ska_mid"
},
{
"activities": [
{
"activity_ref": "test activity",
"executed_at": "2022-09-23T15:43:53.971548+00:00",
"runtime_args": [
{
"function_args": {
"kwargs": {
"foo": "bar"
}
},
"function_name": "test_fn"
}
]
}
],
"eb_ref": "eb-mvp01-20220923-00001",
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-18T17:02:53.611151+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-18T17:02:53.611151+00:00",
"version": 1
},
"sbd_ref": "sbd-mvp01-20220923-00001",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00001",
"subarray_id": 3,
"telescope": "ska_mid"
}
]
$ oda sbis query --entity_id='sbi' --contains
Query Parameters
---------------
entity_id = sbi
match_type = MatchType.CONTAINS
Result
-------
[
{
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-07T16:28:41.314279+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-07T16:28:41.314279+00:00",
"version": 1
},
"sbd_ref": "sbd-mvp01-20220923-00003",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00003",
"subarray_id": 3,
"telescope": "ska_mid"
},
{
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-03T18:26:50.416261+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-03T18:26:50.416261+00:00",
"version": 1
},
"sbd_ref": "sbi-mvp01-20220923-00002",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00002",
"subarray_id": 3,
"telescope": "ska_mid"
},
{
"activities": [
{
"activity_ref": "test activity",
"executed_at": "2022-09-23T15:43:53.971548+00:00",
"runtime_args": [
{
"function_args": {
"kwargs": {
"foo": "bar"
}
},
"function_name": "test_fn"
}
]
}
],
"eb_ref": "eb-mvp01-20220923-00001",
"interface": "https://schema.skao.int/ska-oso-pdm-sbi/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2023-10-18T17:02:53.611151+00:00",
"last_modified_by": "DefaultUser",
"last_modified_on": "2023-10-18T17:02:53.611151+00:00",
"version": 1
},
"sbd_ref": "sbd-mvp01-20220923-00001",
"sbd_version": 1,
"sbi_id": "sbi-mvp01-20220923-00001",
"subarray_id": 3,
"telescope": "ska_mid"
}
]
For fetching any entity status history data the output will be in list / array form.
$ oda eb_status_history query -entity-id="eb-mvp01-20240426-7785"
[
{
"current_status": "Created",
"eb_id": "eb-mvp01-20240426-7785",
"eb_version": 1,
"metadata":
{
"created_by": "DefaultUser",
"created_on": "2024-05-09T06:43:56.816443Z",
"last_modified_by": "DefaultUser",
"last_modified_on": "2024-05-09T06:43:56.816443Z"
},
"previous_status": "Created"
},
{
"current_status": "Fully Observed",
"eb_id": "eb-mvp01-20240426-7785",
"eb_version": 1,
"metadata":
{
"created_by": "DefaultUser",
"created_on": "2024-05-09T06:44:18.040906Z",
"last_modified_by": "DefaultUser",
"last_modified_on": "2024-05-09T06:44:18.040906Z"
},
"previous_status": "Created"
}
]
For fetching any entity status data.
$ oda eb_status_history get eb-mvp01-20240426-7785
{
"current_status": "Fully Observed",
"eb_id": "eb-mvp01-20240426-7785",
"eb_version": 1,
"metadata":
{
"created_by": "DefaultUser",
"created_on": "2024-05-09T06:44:18.040906Z",
"last_modified_by": "DefaultUser",
"last_modified_on": "2024-05-09T06:44:18.040906Z"
},
"previous_status": "Created"
}
For example, Retrieving the Scheduling Block Definition using Execution Block
$ oda ebs get 'eb-t0001-20240521-00003' 'sbds'
{
"activities": {
"allocate": {
"function_args": {
"init": {
"args": [
"posarg1",
"posarg2"
],
"kwargs": {
"argname": "argval"
}
},
"main": {
"args": [
"posarg1",
"posarg2"
],
"kwargs": {
"argname": "argval"
}
}
},
"kind": "filesystem",
"path": "file:///path/to/allocatescript.py"
},
"observe": {
"branch": "main",
"function_args": {
"init": {
"args": [
"posarg1",
"posarg2"
],
"kwargs": {
"argname": "argval"
}
},
"main": {
"args": [
"posarg1",
"posarg2"
],
"kwargs": {
"argname": "argval"
}
}
},
"kind": "git",
"path": "git://relative/path/to/scriptinsiderepo.py",
"repo": "https://gitlab.com/script_repo/operational_scripts"
}
},
"csp_configurations": [
{
"cbf": {
"fsps": [
{
"channel_averaging_map": [
[
0,
2
],
[
744,
0
]
],
"channel_offset": 0,
"frequency_slice_id": 1,
"fsp_id": 1,
"function_mode": "CORR",
"integration_factor": 1,
"output_link_map": [
[
0,
0
],
[
200,
1
]
],
"zoom_factor": 0
},
{
"frequency_slice_id": 2,
"fsp_id": 2,
"function_mode": "CORR",
"integration_factor": 1,
"zoom_factor": 1,
"zoom_window_tuning": 650000
}
]
},
"common": {
"band_5_tuning": [
5.85,
7.25
],
"subarray_id": 1
},
"config_id": "csp config 123",
"subarray": {
"subarray_name": "science period 23"
}
}
],
"dish_allocations": {
"receptor_ids": [
"0002",
"0001"
]
},
"dish_configurations": [
{
"dish_configuration_id": "dish config 123",
"receiver_band": "5a"
}
],
"interface": "https://schema.skao.int/ska-oso-pdm-sbd/0.1",
"metadata": {
"created_by": "DefaultUser",
"created_on": "2024-05-20T15:13:53.971548+05:30",
"last_modified_by": "DefaultUser",
"last_modified_on": "2024-05-20T19:09:04.112314+05:30",
"version": 2
},
"sbd_id": "sbd-mvp01-20200325-00001",
"scan_definitions": [
{
"csp_configuration_ref": "csp config 123",
"dish_configuration_ref": "dish config 123",
"pointing_correction": "MAINTAIN",
"scan_definition_id": "calibrator scan",
"scan_duration": 60000,
"scan_type_ref": "calibration_B",
"target_ref": "Polaris Australis"
},
{
"csp_configuration_ref": "csp config 123",
"dish_configuration_ref": "dish config 123",
"pointing_correction": "UPDATE",
"scan_definition_id": "science scan",
"scan_duration": 60000,
"scan_type_ref": "science_A",
"target_ref": "M83"
}
],
"scan_sequence": [
"calibrator scan",
"science scan",
"science scan",
"calibrator scan"
],
"sdp_configuration": {
"execution_block": {
"beams": [
{
"beam_id": "vis0",
"function": "visibilities"
},
{
"beam_id": "pss1",
"function": "pulsar search",
"search_beam_id": 1
},
{
"beam_id": "pss2",
"function": "pulsar search",
"search_beam_id": 2
},
{
"beam_id": "pst1",
"function": "pulsar search",
"timing_beam_id": 1
},
{
"beam_id": "pst2",
"function": "pulsar search",
"timing_beam_id": 2
},
{
"beam_id": "vlbi",
"function": "vlbi",
"vlbi_beam_id": 1
}
],
"channels": [
{
"channels_id": "vis_channels",
"spectral_windows": [
{
"count": 744,
"freq_max": 368000000,
"freq_min": 350000000,
"link_map": [
[
0,
0
],
[
200,
1
],
[
744,
2
],
[
944,
3
]
],
"spectral_window_id": "fsp_1_channels",
"start": 0,
"stride": 2
},
{
"count": 744,
"freq_max": 368000000,
"freq_min": 360000000,
"link_map": [
[
2000,
4
],
[
2200,
5
]
],
"spectral_window_id": "fsp_2_channels",
"start": 2000,
"stride": 1
},
{
"count": 744,
"freq_max": 361000000,
"freq_min": 360000000,
"link_map": [
[
4000,
6
],
[
4200,
7
]
],
"spectral_window_id": "zoom_window_1",
"start": 4000,
"stride": 1
}
]
},
{
"channels_id": "pulsar_channels",
"spectral_windows": [
{
"count": 744,
"freq_max": 368000000,
"freq_min": 350000000,
"spectral_window_id": "pulsar_fsp_channels",
"start": 0
}
]
}
],
"context": {
"baz": 123,
"foo": "bar"
},
"eb_id": "eb-mvp01-20200325-00001",
"max_length": 100,
"polarisations": [
{
"corr_type": [
"XX",
"XY",
"YY",
"YX"
],
"polarisations_id": "all"
}
],
"scan_types": [
{
"beams": [
{
"beam_ref": "vis0",
"channels_ref": "vis_channels",
"polarisations_ref": "all"
},
{
"beam_ref": "pss1",
"channels_ref": "pulsar_channels",
"field_ref": "M83",
"polarisations_ref": "all"
},
{
"beam_ref": "pss2",
"channels_ref": "pulsar_channels",
"field_ref": "Polaris Australis",
"polarisations_ref": "all"
},
{
"beam_ref": "pst1",
"channels_ref": "pulsar_channels",
"field_ref": "M83",
"polarisations_ref": "all"
},
{
"beam_ref": "pst2",
"channels_ref": "pulsar_channels",
"field_ref": "Polaris Australis",
"polarisations_ref": "all"
},
{
"beam_ref": "vlbi",
"channels_ref": "vlbi_channels",
"field_ref": "Polaris Australis",
"polarisations_ref": "all"
}
],
"scan_type_id": ".default"
},
{
"beams": [
{
"beam_ref": "vis0",
"field_ref": "M83"
}
],
"derive_from": ".default",
"scan_type_id": ".default"
}
]
},
"processing_blocks": [
{
"pb_id": "pb-mvp01-20200325-00001",
"sbi_refs": [
"sbi-mvp01-20200325-00001"
],
"script": {
"kind": "realtime",
"name": "vis_receive",
"version": "0.1.0"
}
},
{
"pb_id": "pb-mvp01-20200325-00002",
"sbi_refs": [
"sbi-mvp01-20200325-00001"
],
"script": {
"kind": "realtime",
"name": "test_realtime",
"version": "0.1.0"
}
},
{
"dependencies": [
{
"kind": [
"visibilities"
],
"pb_ref": "pb-mvp01-20200325-00001"
}
],
"pb_id": "pb-mvp01-20200325-00003",
"sbi_refs": [
"sbi-mvp01-20200325-00001"
],
"script": {
"kind": "batch",
"name": "ical",
"version": "0.1.0"
}
},
{
"dependencies": [
{
"kind": [
"calibration"
],
"pb_ref": "pb-mvp01-20200325-00003"
}
],
"pb_id": "pb-mvp01-20200325-00004",
"sbi_refs": [
"sbi-mvp01-20200325-00001"
],
"script": {
"kind": "batch",
"name": "dpreb",
"version": "0.1.0"
}
}
],
"resources": {
"csp_links": [
1,
2,
3,
4
],
"receive_nodes": 10,
"receptors": [
"FS4",
"FS8",
"FS16",
"FS17",
"FS22",
"FS23",
"FS30",
"FS31",
"FS32",
"FS33",
"FS36",
"FS52",
"FS56",
"FS57",
"FS59",
"FS62",
"FS66",
"FS69",
"FS70",
"FS72",
"FS73",
"FS78",
"FS80",
"FS88",
"FS89",
"FS90",
"FS91",
"FS98",
"FS108",
"FS111",
"FS132",
"FS144",
"FS146",
"FS158",
"FS165",
"FS167",
"FS176",
"FS183",
"FS193",
"FS200",
"FS345",
"FS346",
"FS347",
"FS348",
"FS349",
"FS350",
"FS351",
"FS352",
"FS353",
"FS354",
"FS355",
"FS356",
"FS429",
"FS430",
"FS431",
"FS432",
"FS433",
"FS434",
"FS465",
"FS466",
"FS467",
"FS468",
"FS469",
"FS470"
]
}
},
"targets": [
{
"pointing_pattern": {
"active": "FivePointParameters",
"parameters": [
{
"kind": "FivePointParameters",
"offset_arcsec": 5
},
{
"kind": "RasterParameters",
"n_rows": 2,
"pa": 7.89,
"row_length_arcsec": 1.23,
"row_offset_arcsec": 4.56,
"unidirectional": true
},
{
"kind": "StarRasterParameters",
"n_rows": 2,
"row_length_arcsec": 1.23,
"row_offset_angle": 4.56,
"unidirectional": true
}
]
},
"radial_velocity": {
"definition": "OPTICAL",
"quantity": {
"unit": "km / s",
"value": -12.345
},
"redshift": 1.23,
"reference_frame": "LSRK"
},
"reference_coordinate": {
"dec": "-88:57:22.9",
"kind": "equatorial",
"ra": "21:08:47.92",
"reference_frame": "icrs",
"unit": [
"hourangle",
"deg"
]
},
"target_id": "Polaris Australis"
},
{
"pointing_pattern": {
"active": "SinglePointParameters",
"parameters": [
{
"kind": "SinglePointParameters",
"offset_x_arcsec": 0,
"offset_y_arcsec": 0
}
]
},
"radial_velocity": {
"definition": "RADIO",
"quantity": {
"unit": "km / s",
"value": 0
},
"redshift": 0,
"reference_frame": "LSRK"
},
"reference_coordinate": {
"dec": "-29:51:56.74",
"kind": "equatorial",
"ra": "13:37:00.919",
"reference_frame": "icrs",
"unit": [
"hourangle",
"deg"
]
},
"target_id": "M83"
}
],
"telescope": "ska_mid"
}