ait.core.server.plugins.openmct module

AIT Plugin for OpenMCT Telemetry service

The ait.core.servers.plugins.openmct module provides an a web service that implements the service API for the OpenMCT framework for realtime and, eventually, historical telemetry from AIT.

class ait.core.server.plugins.openmct.AITOpenMctPlugin(inputs, outputs, zmq_args=None, datastore='ait.core.db.InfluxDBBackend', **kwargs)

Bases: ait.core.server.plugin.Plugin

This is the implementation of the AIT plugin for interaction with OpenMCT framework. Telemetry dispatched from AIT server/broker is passed along to OpenMct in the expected format.

__init__(inputs, outputs, zmq_args=None, datastore='ait.core.db.InfluxDBBackend', **kwargs)
Params:

inputs: names of inbound streams plugin receives data from outputs: names of outbound streams plugin sends its data to zmq_args: dict containing the follow keys:

zmq_context zmq_proxy_xsub_url zmq_proxy_xpub_url

Defaults to empty dict. Default values assigned during instantiation of parent class.

datastore: path to database backend to use **kwargs: (optional) Dependent on requirements of child class.

broadcast_message(message)

Broadcast OpenMCT packet to web-socket clients :param openmct_pkt: Instance of OpenMCT packet to be emitted :return:

broadcast_packet(openmct_pkt)

Attempt to broadcast OpenMCT packet to web-socket clients, the managed web-socket themselves determine if the Packet will be emitted. :param openmct_pkt: Instance of OpenMCT packet to be emitted :return: True if packet was emitted by at least one web-socket,

False otherwise.
cleanup()

Clean-up the webservers

static datetime_jsonifier(obj)

Required for JSONifying datetime objects

dbg_message(msg)
static get_browser_name(browser)
get_historical_tlm(mct_pkt_id)

Handling of historical queries. Time range is retrieved from bottle request query. :param mct_pkt_id_part: OpenMCT id part (single entry or comma-separated list) :return: JSON string representing list of result dicts

get_historical_tlm_for_packet_fields(ait_pkt_id, ait_field_names, start_millis, end_millis)

Perform a historical query for a particular AIT packet type :param ait_pkt_id: AIT Packet definition Id :param ait_field_names: List of field names to include, use None to include all fields :param start_millis: Start time, milliseconds since UNIX epoch :param end_millis: End time, milliseconds since UNIX epoch :return: List of OpenMct measurements that satisfy query

get_historical_tlm_for_range(mct_pkt_ids, start_epoch_ms, end_epoch_ms)

Perform a historical query of a list of OpenMCT telemetry ids between the start and end time (as milliseconds since Epoch) :param mct_pkt_ids: List or openMct telemetry ids :param start_epoch_ms: Start time :param end_epoch_ms: End time :return: List of result dicts, where each entry contains {timestamp, id, value}.

get_realtime_tlm()

Handles realtime packet dispatch via websocket layers

get_realtime_tlm_original_dumb()

Handles realtime packet dispatch via websocket layers

get_tlm_dict_json()

Returns the OpenMCT-formatted dictionary

get_tlm_dict_raw_json()

Returns the AIT-formatted dictionary

init()

Initialize the web-server state

load_database(**kwargs)

If necessary database configuration is available, this method will create, connect and return a database connection. If configuration is not available, then None is returned.

Returns:Database instance or None
manage_web_socket(mws)

Adds mws instance to managed set (for receiving telemetry), and then continuously checks web socket for new messages, which may affect its state. When web-socket is considered closed, it is removed from the managed set and this method returns :param mws: Managed web-socket instance

static managed_web_socket_recv(mws)

Attempts to read message from the websocket with timeout. :param mws: Managed web-socket instance :return: Message retrieved from underlying-websocket, or None

static managed_web_socket_send(mws, message)

Sends message to underlying web-socket :param mws: Managed web-socket instance :param message: Message to be sent

mimic_tlm(ait_tlm_pkt_name, ait_tlm_pkt_fill=None)

Used for debugging, creates an instance of a packet based on packet name, and fills it with zero data. Special case for ‘1553_HS_Packet’ which will get random number data fills. If HTTP Request query includes a value for ‘repeat’, then this will continue emitting telemetry.

poll_telemetry()

Polls the telemetry queue for next available telem entry. If found, it is broadcast to all of the managed web-sockets, where they decide if they are interested in the telemetry. If nothing on queue, then empty probe messag is sent. :return: True if real telemetry emitted, False otherwise.

poll_telemetry_periodically()
poll_websocket(mws)

Polls instance of web-socket for message :return True if message was processed, False otherwise

poll_websocket_periodically_while_alive(mws)
poll_websockets()
Polls set of maintained web-sockets to test for:
  • web-socket is considered closed, in which case its removed from internal set;
  • web-socket has message available that affects its state.
process(input_data, topic=None)

Process received input message.

This plugin should be configured to only receive telemetry.

Received messaged is expected to be a tuple of the form produced by AITPacketHandler.

process_websocket_mesg(mws, message)

Processes message received from a web-socket. Handles the following directives: close, subscribe, unsubscribe :param mws: Managed web-socket instance associated with message :param message: Web-socket message

send_socket_pkt_mesg(mws, pkt_id, mct_pkt)

Attempts to send socket message if managed web-socket is alive and accepts the message by inspecting the pkt_id value :param mws: Managed web-socket :param pkt_id: Packet ID associated with message :param mct_pkt: OpenMCT telem packet :return: True if message sent to web-socket, False otherwise

start_browser(url, name=None)
wait()
DEFAULT_DATABASE_ENABLED = False
DEFAULT_DEBUG = False
DEFAULT_DEBUG_MAX_LEN = 512
DEFAULT_PORT = 8082
DEFAULT_TELEM_CHECK_SLEEP_SECS = 2
DEFAULT_TELEM_QUEUE_TIMEOUT_SECS = 10
DEFAULT_WEBSOCKET_CHECK_SLEEP_SECS = 2
DEFAULT_WS_EMPTY_MESSAGE = '{}'
DEFAULT_WS_RECV_TIMEOUT_SECS = 0.1
class ait.core.server.plugins.openmct.DictUtils

Bases: object

Encapsulates dictionary utilities, primarily for translating between AIT and OpenMCT dictionaries and packets

static create_mct_fieldmap(ait_pkt_fld_def)

Constructs an OpenMCT field declaration struct from an AIT packet definition

static create_mct_pkt_id(ait_pkt_id, ait_field_id)
static create_uid_pkt_map(ait_dict)

Creates a dictionary from packet def UID to package definition

static format_tlmdict_for_openmct(ait_tlm_dict)

Formats the AIT telemetry dictionary as an OpenMCT telemetry dictionary

static format_tlmpkt_for_openmct(ait_pkt)

Formats an AIT telemetry packet instance as an OpenMCT telemetry packet structure

static parse_mct_pkt_id(mct_pkt_id)
class ait.core.server.plugins.openmct.ManagedWebSocket(web_socket, client_ip=None)

Bases: object

A data structure to maintain state for OpenMCT websockets

__init__(web_socket, client_ip=None)

Initialize self. See help(type(self)) for accurate signature.

accepts_packet(pkt_id)

Returns True if pkt_id is considered subscribed to by this websocket If pkt_id is PACKET_ID_WILDCARD, it will be automatically accepted :param pkt_id: AIT Packet name :return: True if packet id is accepted, False otherwise

create_subscribed_packet(omc_packet)

Returns a modified OpenMCT packet that contains only fields for which the web-socket is subscribed :param omc_packet: Full OpenMCT packet with all fields :return: New modified packet if any match in fields, else None

set_error()

Sets error flag

subscribe_field(openmct_field_id)

Adds a subscription to an OpenMCT field :param openmct_field_id: OpenMCT Field id

unsubscribe_field(openmct_field_id)

Removes a subscription to an OpenMCT field :param openmct_field_id: OpenMCT Field id

PACKET_ID_WILDCARD = '*'
id_counter = 0
is_alive

Returns True if web-socket is active, False otherwise :return: Managed web-socket state