15"""Storage backend management
18from oslo_config
import cfg
19from oslo_log
import log
21import six.moves.urllib.parse
as urlparse
22from stevedore
import driver
25from panko
import utils
27LOG = log.getLogger(__name__)
31 cfg.IntOpt(
'event_time_to_live',
33 help=(
"Number of seconds that events are kept "
34 "in the database for (<= 0 means forever).")),
35 cfg.IntOpt(
'events_delete_batch_size',
38 help=(
"Number of events to be deleted in one iteration "
39 "from the database for (0 means all).")),
40 cfg.StrOpt(
'event_connection',
42 deprecated_for_removal=
True,
43 help=
'The connection string used to connect '
44 'to the event database - rather use ${database.connection}'),
45 cfg.BoolOpt(
'es_ssl_enabled',
47 help=
"Enable HTTPS connection in the Elasticsearch "
49 cfg.StrOpt(
'es_index_name',
51 help=
'The name of the index in Elasticsearch')
56 """Error raised when an unknown error occurs while recording."""
60 """Error raised when the storage backend version is not good enough."""
64 """Error raised when an aggregate is unacceptable to storage backend."""
69 """Invalid pagination marker parameters"""
73 retries = conf.database.max_retries
77 wait=tenacity.wait_fixed(conf.database.retry_interval),
78 stop=(tenacity.stop_after_attempt(retries)
if retries >= 0
79 else tenacity.stop_never)
82 url = (conf.database.connection
or
83 getattr(conf.database,
'event_connection',
None))
90 """Return an open connection to the database."""
91 connection_scheme = urlparse.urlparse(url).scheme
94 engine_name = connection_scheme.split(
'+')[0]
96 LOG.debug(
'looking for %(name)r driver in panko.storage',
97 {
'name': engine_name})
98 mgr = driver.DriverManager(
'panko.storage', engine_name)
99 return mgr.driver(url, conf)
103 """Properties for building an Event query.
105 :param start_timestamp: UTC start datetime (mandatory)
106 :param end_timestamp: UTC end datetime (mandatory)
107 :param event_type: the name of the event. None for all.
108 :param message_id: the message_id of the event.
None for all.
109 :param admin_proj: the project_id of admin role.
None if non-admin user.
110 :param traits_filter: the trait filter dicts, all of which are optional.
111 This parameter
is a list of dictionaries that specify trait values:
113 .. code-block:: python
120 'op': <eq, lt, le, ne, gt
or ge> }
123 def __init__(self, start_timestamp=None, end_timestamp=None,
124 event_type=None, message_id=None, traits_filter=None,
134 return (
"<EventFilter(start_timestamp: %s,"
135 " end_timestamp: %s,"
def __init__(self, start_timestamp=None, end_timestamp=None, event_type=None, message_id=None, traits_filter=None, admin_proj=None)
def get_connection(url, conf)
def get_connection_from_config(conf)