mirror of
https://github.com/quay/quay.git
synced 2026-01-27 18:42:52 +03:00
165 lines
4.9 KiB
Python
165 lines
4.9 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_kinds`, if specified, is a set/list of the kinds of logs to filter out.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def lookup_latest_logs(
|
|
self,
|
|
performer_name=None,
|
|
repository_name=None,
|
|
namespace_name=None,
|
|
filter_kinds=None,
|
|
size=20,
|
|
):
|
|
"""
|
|
Looks up latest logs of a specific kind, filtered by performer (a user), repository or
|
|
namespace.
|
|
|
|
Note that one (and only one) of the three can be specified. Returns a list of `Log`.
|
|
"""
|
|
|
|
@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,
|
|
is_free_namespace=False,
|
|
):
|
|
"""
|
|
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.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def yield_log_rotation_context(self, cutoff_date, min_logs_per_rotation):
|
|
"""
|
|
A generator that yields contexts implementing the LogRotationContextInterface. Each context
|
|
represents a set of logs to be archived and deleted once the context completes without
|
|
exceptions.
|
|
|
|
For database logs, the LogRotationContext abstracts over a set of rows. When the context
|
|
finishes, its associated rows get deleted.
|
|
|
|
For Elasticsearch logs, the LogRotationContext abstracts over indices. When the context
|
|
finishes, its associated index gets deleted.
|
|
"""
|
|
|
|
|
|
@add_metaclass(ABCMeta)
|
|
class LogRotationContextInterface(object):
|
|
"""
|
|
Interface for iterating over a set of logs to be archived.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def yield_logs_batch(self):
|
|
"""
|
|
Generator yielding batch of logs and a filename for that batch.
|
|
|
|
A batch is a subset of the logs part of the context.
|
|
"""
|