b773a18ed8
This will allow us to reimplement the logs data model against a non-database system in the near future
62 lines
3.1 KiB
Python
62 lines
3.1 KiB
Python
from abc import ABCMeta, abstractmethod
|
|
from six import add_metaclass
|
|
|
|
class LogsIterationTimeout(Exception):
|
|
""" Exception raised if logs iteration times out. """
|
|
|
|
|
|
@add_metaclass(ABCMeta)
|
|
class ActionLogsDataInterface(object):
|
|
""" Interface for code to work with the logs data model. The logs data model consists
|
|
of all access for reading and writing action logs.
|
|
"""
|
|
@abstractmethod
|
|
def lookup_logs(self, start_datetime, end_datetime, performer_name=None, repository_name=None,
|
|
namespace_name=None, filter_kinds=None, page_token=None, max_page_count=None):
|
|
""" Looks up all logs between the start_datetime and end_datetime, filtered
|
|
by performer (a user), repository or namespace. Note that one (and only one) of the three
|
|
can be specified. Returns a LogEntriesPage. filter, if specified, is a set/list of the
|
|
kinds of logs to filter.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def get_aggregated_log_counts(self, start_datetime, end_datetime, performer_name=None,
|
|
repository_name=None, namespace_name=None, filter_kinds=None):
|
|
""" Returns the aggregated count of logs, by kind, between the start_datetime and end_datetime,
|
|
filtered by performer (a user), repository or namespace. Note that one (and only one) of
|
|
the three can be specified. Returns a list of AggregatedLogCount.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def count_repository_actions(self, repository, day):
|
|
""" Returns the total number of repository actions over the given day, in the given repository
|
|
or None on error.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def queue_logs_export(self, start_datetime, end_datetime, export_action_logs_queue,
|
|
namespace_name=None, repository_name=None, callback_url=None,
|
|
callback_email=None, filter_kinds=None):
|
|
""" Queues logs between the start_datetime and end_time, filtered by a repository or namespace,
|
|
for export to the specified URL and/or email address. Returns the ID of the export job
|
|
queued or None if error.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def log_action(self, kind_name, namespace_name=None, performer=None, ip=None, metadata=None,
|
|
repository=None, repository_name=None, timestamp=None):
|
|
""" Logs a single action as having taken place. """
|
|
|
|
@abstractmethod
|
|
def yield_logs_for_export(self, start_datetime, end_datetime, repository_id=None,
|
|
namespace_id=None, max_query_time=None):
|
|
""" Returns an iterator that yields bundles of all logs found between the start_datetime and
|
|
end_datetime, optionally filtered by the repository or namespace. This function should be
|
|
used for any bulk lookup operations, and should be implemented by implementors to put
|
|
minimal strain on the backing storage for large operations. If there was an error in setting
|
|
up, returns None.
|
|
|
|
If max_query_time is specified, each iteration that yields a log bundle will have its
|
|
queries run with a maximum timeout of that specified, and, if any exceed that threshold,
|
|
LogsIterationTimeout will be raised instead of returning the logs bundle.
|
|
"""
|