EfdClient#
- class lsst_efd_client.EfdClient(efd_name, db_name='efd', creds_service='https://roundtable.lsst.codes/segwarides/', timeout=900, client=None)#
Bases:
object
Class to handle connections and basic queries
- Parameters:
efd_name (
str
) – Name of the EFD instance for which to retrieve credentials.db_name (
str
, optional) – Name of the database within influxDB to query (‘efd’ by default).creds_service (
str
, optional) – URL to the service to retrieve credentials (https://roundtable.lsst.codes/segwarides/
by default).timeout (
int
, optional) – Timeout in seconds for async requests (aiohttp.ClientSession
). The default timeout is 900 seconds.client (
object
, optional) – An instance of a class that ducktypes asaioinflux.client.InfluxDBClient
. The intent is to be able to substitute a mocked client for testing.
Attributes Summary
The
aioinflux.client.InfluxDBClient
used for queries.Methods Summary
build_time_range_query
(topic_name, fields, ...)Build a query based on a time range.
from_name
(efd_name, *args, **kwargs)Construct a client for the specific named subclass.
get_fields
(topic_name)Query the list of field names for a topic.
get_schema
(topic)Givent a topic, get a list of dictionaries describing the fields
Query the list of possible topics.
list_efd_names
([creds_service])List all valid names for EFD deployments available.
select_packed_time_series
(topic_name, ...[, ...])Select fields that are time samples and unpack them into a dataframe.
select_time_series
(topic_name, fields, ...)Select a time series for a set of topics in a single subsystem
select_top_n
(topic_name, fields, num[, ...])Select the most recent N samples from a set of topics in a single subsystem.
Attributes Documentation
- deployment = ''#
- influx_client = None#
The
aioinflux.client.InfluxDBClient
used for queries.This should be used to execute queries not wrapped by this class.
- subclasses = {}#
Methods Documentation
- build_time_range_query(topic_name, fields, start, end, is_window=False, index=None, convert_influx_index=False, use_old_csc_indexing=False)#
Build a query based on a time range.
- Parameters:
topic_name (
str
) – Name of topic for which to build a query.start (
astropy.time.Time
) – Start time of the time range, ifis_window
is specified, this will be the midpoint of the range.end (
astropy.time.Time
orastropy.time.TimeDelta
) – End time of the range either as an absolute time or a time offset from the start time.is_window (
bool
, optional) – If set and the end time is specified as aTimeDelta
, compute a range centered on the start time (default isFalse
).index (
int
, optional) – When index is used, add an ‘AND salIndex = index’ to the query. (default isNone
).convert_influx_index (
bool
, optional) – Convert influxDB time index from TAI to UTC? This is for legacy instances that may still have timestamps stored internally as TAI. Modern instances all store index timestamps as UTC natively. Default isFalse
, don’t translate from TAI to UTC.use_old_csc_indexing (
bool
, optional) – When index is used, add an ‘AND {CSCName}ID = index’ to the query which is the old CSC indexing name. (default isFalse
).
- Returns:
query – A string containing the constructed query statement.
- Return type:
- from_name(efd_name, *args, **kwargs)#
Construct a client for the specific named subclass.
- Parameters:
efd_name (
str
) – Name of the EFD instance for which to construct a client.*args – Extra arguments to pass to the subclass constructor.
**kwargs – Extra keyword arguments to pass to the subclass constructor.
- Raises:
NotImplementedError – Raised if there is no subclass corresponding to the name.
- async get_fields(topic_name)#
Query the list of field names for a topic.
- async get_schema(topic)#
Givent a topic, get a list of dictionaries describing the fields
- Parameters:
topic (
str
) – The name of the topic to query. A full list of valid topic names can be obtained usingget_schema_topics
.- Returns:
result – A dataframe with the schema information for the topic. One row per field.
- Return type:
- async get_topics()#
Query the list of possible topics.
- Returns:
results – List of valid topics in the database.
- Return type:
- classmethod list_efd_names(creds_service='https://roundtable.lsst.codes/segwarides/')#
List all valid names for EFD deployments available.
- async select_packed_time_series(topic_name, base_fields, start, end, is_window=False, index=None, ref_timestamp_col='cRIO_timestamp', ref_timestamp_fmt='unix_tai', ref_timestamp_scale='tai', convert_influx_index=False, use_old_csc_indexing=False)#
Select fields that are time samples and unpack them into a dataframe.
- Parameters:
topic_name (
str
) – Name of topic to query.base_fields (
str
orlist
) – Base field name(s) that will be expanded to query all vector entries.start (
astropy.time.Time
) – Start time of the time range, ifis_window
is specified, this will be the midpoint of the range.end (
astropy.time.Time
orastropy.time.TimeDelta
) – End time of the range either as an absolute time or a time offset from the start time.is_window (
bool
, optional) – If set and the end time is specified as aTimeDelta
, compute a range centered on the start time (default isFalse
).index (
int
, optional) – When index is used, add an ‘AND salIndex = index’ to the query. (default isNone
).ref_timestamp_col (
str
, optional) – Name of the field name to use to assign timestamps to unpacked vector fields (default is ‘cRIO_timestamp’).ref_timestamp_fmt (
str
, optional) – Format to use to translatingref_timestamp_col
values (default is ‘unix_tai’).ref_timestamp_scale (
str
, optional) – Time scale to use in translatingref_timestamp_col
values (default is ‘tai’).convert_influx_index (
bool
, optional) – Convert influxDB time index from TAI to UTC? This is for legacy instances that may still have timestamps stored internally as TAI. Modern instances all store index timestamps as UTC natively. Default isFalse
, don’t translate from TAI to UTC.use_old_csc_indexing (
bool
, optional) – When index is used, add an ‘AND {CSCName}ID = index’ to the query which is the old CSC indexing name. (default isFalse
).
- Returns:
result – A
DataFrame
containing the results of the query.- Return type:
- async select_time_series(topic_name, fields, start, end, is_window=False, index=None, convert_influx_index=False, use_old_csc_indexing=False)#
Select a time series for a set of topics in a single subsystem
- Parameters:
topic_name (
str
) – Name of topic to query.start (
astropy.time.Time
) – Start time of the time range, ifis_window
is specified, this will be the midpoint of the range.end (
astropy.time.Time
orastropy.time.TimeDelta
) – End time of the range either as an absolute time or a time offset from the start time.is_window (
bool
, optional) – If set and the end time is specified as aTimeDelta
, compute a range centered on the start time (default isFalse
).index (
int
, optional) – When index is used, add an ‘AND salIndex = index’ to the query. (default isNone
).convert_influx_index (
bool
, optional) – Convert influxDB time index from TAI to UTC? This is for legacy instances that may still have timestamps stored internally as TAI. Modern instances all store index timestamps as UTC natively. Default isFalse
, don’t translate from TAI to UTC.use_old_csc_indexing (
bool
, optional) – When index is used, add an ‘AND {CSCName}ID = index’ to the query which is the old CSC indexing name. (default isFalse
).
- Returns:
result – A
DataFrame
containing the results of the query.- Return type:
- async select_top_n(topic_name, fields, num, time_cut=None, index=None, convert_influx_index=False, use_old_csc_indexing=False)#
Select the most recent N samples from a set of topics in a single subsystem.
This method does not guarantee sort direction of the returned rows.
- Parameters:
topic_name (
str
) – Name of topic to query.num (
int
) – Number of rows to return.time_cut (
astropy.time.Time
, optional) – Use a time cut instead of the most recent entry. (default isNone
)index (
int
, optional) – When index is used, add an ‘AND salIndex = index’ to the query. (default isNone
).convert_influx_index (
bool
, optional) – Convert influxDB time index from TAI to UTC? This is for legacy instances that may still have timestamps stored internally as TAI. Modern instances all store index timestamps as UTC natively. Default isFalse
, don’t translate from TAI to UTC.use_old_csc_indexing (
bool
, optional) – When index is used, add an ‘AND {CSCName}ID = index’ to the query which is the old CSC indexing name. (default isFalse
).
- Returns:
result – A
DataFrame
containing the results of the query.- Return type: