From a78f2f447fadce834f02ead9a2a04511ac97d687 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Mon, 18 Jun 2012 19:01:23 -0400 Subject: [PATCH] Start defining DB engine API Sketch in API to support queries defined in http://wiki.openstack.org/EfficientMetering/APIProposalv1 Change-Id: I282f1d5893c55fca684a74395a82e603c799343f --- ceilometer/storage/base.py | 115 ++++++++++++++++++++++++++++++++- ceilometer/storage/impl_log.py | 104 +++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+), 2 deletions(-) diff --git a/ceilometer/storage/base.py b/ceilometer/storage/base.py index 7a1b82c3..8806fd47 100644 --- a/ceilometer/storage/base.py +++ b/ceilometer/storage/base.py @@ -60,5 +60,116 @@ class Connection(object): ceilometer.meter.meter_message_from_counter """ - # FIXME(dhellmann): We will eventually need to add query methods - # for the API server to use, too. + @abc.abstractmethod + def get_users(self, source=None): + """Return an iterable of user id strings. + + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_resources_by_user(self, user=None, source=None): + """Return an iterable of tuples containing resource ids and + the most recent version of the metadata for the resource. + + :param user: The event owner. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_raw_events_by_user(self, user, start=None, end=None, + resource=None, meter=None, source=None): + """Return an iterable of event data. + + :param user: The event owner. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param meter: Optional filter for meter type using the meter name. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_volume_sum_by_user(self, user, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of the volume field for the events + described by the query parameters. + + :param user: The event owner. + :param meter: Filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_duration_sum_by_user(self, user, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of time for the events described by the + query parameters. + + :param user: The event owner. + :param meter: Filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_projects(self, source=None): + """Return an iterable of project id strings. + + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_resources_by_project(self, project=None, source=None): + """Return an iterable of tuples containing resource ids and + the most recent version of the metadata for the resource. + + :param project: The event owner. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_raw_events_by_project(self, project, start=None, end=None, + resource=None, meter=None, source=None): + """Return an iterable of event data. + + :param project: The event owner. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param meter: Optional filter for meter type using the meter name. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_volume_sum_by_project(self, project, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of the volume field for the events + described by the query parameters. + + :param project: The event owner. + :param meter: Optional filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ + + @abc.abstractmethod + def get_duration_sum_by_project(self, project, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of time for the events described by the + query parameters. + + :param project: The event owner. + :param meter: Optional filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ diff --git a/ceilometer/storage/impl_log.py b/ceilometer/storage/impl_log.py index 16dfd184..ba18c2bc 100644 --- a/ceilometer/storage/impl_log.py +++ b/ceilometer/storage/impl_log.py @@ -55,3 +55,107 @@ class Connection(base.Connection): data['counter_name'], data['resource_id'], data['counter_volume']) + + def get_users(self, source=None): + """Return an iterable of user id strings. + + :param source: Optional source filter. + """ + + def get_resources_by_user(self, user=None, source=None): + """Return an iterable of tuples containing resource ids and + the most recent version of the metadata for the resource. + + :param user: The event owner. + :param source: Optional source filter. + """ + + def get_raw_events_by_user(self, user, start=None, end=None, + resource=None, meter=None, source=None): + """Return an iterable of event data. + + :param user: The event owner. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param meter: Optional filter for meter type using the meter name. + :param source: Optional source filter. + """ + + def get_volume_sum_by_user(self, user, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of the volume field for the events + described by the query parameters. + + :param user: The event owner. + :param meter: Filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ + + def get_duration_sum_by_user(self, user, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of time for the events described by the + query parameters. + + :param user: The event owner. + :param meter: Filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ + + def get_projects(self, source=None): + """Return an iterable of project id strings. + + :param source: Optional source filter. + """ + + def get_resources_by_project(self, project=None, source=None): + """Return an iterable of tuples containing resource ids and + the most recent version of the metadata for the resource. + + :param project: The event owner. + :param source: Optional source filter. + """ + + def get_raw_events_by_project(self, project, start=None, end=None, + resource=None, meter=None, source=None): + """Return an iterable of event data. + + :param project: The event owner. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param meter: Optional filter for meter type using the meter name. + :param source: Optional source filter. + """ + + def get_volume_sum_by_project(self, project, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of the volume field for the events + described by the query parameters. + + :param project: The event owner. + :param meter: Optional filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """ + + def get_duration_sum_by_project(self, project, meter, start=None, end=None, + resource=None, source=None): + """Return the sum of time for the events described by the + query parameters. + + :param project: The event owner. + :param meter: Optional filter for meter type using the meter name. + :param start: Earliest timestamp to include. + :param end: Only include events with timestamp less than this. + :param resource: Optional filter for resource id. + :param source: Optional source filter. + """