mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 15:27:17 +00:00
Compare commits
2 Commits
d1ec695329
...
f13c25e50c
Author | SHA1 | Date | |
---|---|---|---|
f13c25e50c | |||
713cc63a0f |
@ -20,6 +20,7 @@
|
|||||||
from sqlite3 import Connection
|
from sqlite3 import Connection
|
||||||
|
|
||||||
from ahriman.core.database.operations.operations import Operations
|
from ahriman.core.database.operations.operations import Operations
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
|
|
||||||
@ -30,7 +31,7 @@ class LogsOperations(Operations):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def logs_get(self, package_base: str, limit: int = -1, offset: int = 0,
|
def logs_get(self, package_base: str, limit: int = -1, offset: int = 0,
|
||||||
repository_id: RepositoryId | None = None) -> list[tuple[LogRecordId, float, str]]:
|
repository_id: RepositoryId | None = None) -> list[LogRecord]:
|
||||||
"""
|
"""
|
||||||
extract logs for specified package base
|
extract logs for specified package base
|
||||||
|
|
||||||
@ -41,13 +42,13 @@ class LogsOperations(Operations):
|
|||||||
repository_id(RepositoryId, optional): repository unique identifier override (Default value = None)
|
repository_id(RepositoryId, optional): repository unique identifier override (Default value = None)
|
||||||
|
|
||||||
Return:
|
Return:
|
||||||
list[tuple[LogRecordId, float, str]]: sorted package log records and their timestamps
|
list[LogRecord]: sorted package log records
|
||||||
"""
|
"""
|
||||||
repository_id = repository_id or self._repository_id
|
repository_id = repository_id or self._repository_id
|
||||||
|
|
||||||
def run(connection: Connection) -> list[tuple[LogRecordId, float, str]]:
|
def run(connection: Connection) -> list[LogRecord]:
|
||||||
return [
|
return [
|
||||||
(LogRecordId(package_base, row["version"], row["process_id"]), row["created"], row["record"])
|
LogRecord(LogRecordId(package_base, row["version"], row["process_id"]), row["created"], row["record"])
|
||||||
for row in connection.execute(
|
for row in connection.execute(
|
||||||
"""
|
"""
|
||||||
select created, record, version, process_id from (
|
select created, record, version, process_id from (
|
||||||
@ -66,15 +67,12 @@ class LogsOperations(Operations):
|
|||||||
|
|
||||||
return self.with_connection(run)
|
return self.with_connection(run)
|
||||||
|
|
||||||
def logs_insert(self, log_record_id: LogRecordId, created: float, record: str,
|
def logs_insert(self, log_record: LogRecord, repository_id: RepositoryId | None = None) -> None:
|
||||||
repository_id: RepositoryId | None = None) -> None:
|
|
||||||
"""
|
"""
|
||||||
write new log record to database
|
write new log record to database
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
log_record_id(LogRecordId): current log record id
|
log_record(LogRecord): log record object
|
||||||
created(float): log created timestamp from log record attribute
|
|
||||||
record(str): log record
|
|
||||||
repository_id(RepositoryId, optional): repository unique identifier override (Default value = None)
|
repository_id(RepositoryId, optional): repository unique identifier override (Default value = None)
|
||||||
"""
|
"""
|
||||||
repository_id = repository_id or self._repository_id
|
repository_id = repository_id or self._repository_id
|
||||||
@ -88,12 +86,12 @@ class LogsOperations(Operations):
|
|||||||
(:package_base, :version, :created, :record, :repository, :process_id)
|
(:package_base, :version, :created, :record, :repository, :process_id)
|
||||||
""",
|
""",
|
||||||
{
|
{
|
||||||
"package_base": log_record_id.package_base,
|
"package_base": log_record.log_record_id.package_base,
|
||||||
"version": log_record_id.version,
|
"version": log_record.log_record_id.version,
|
||||||
"created": created,
|
"created": log_record.created,
|
||||||
"record": record,
|
"record": log_record.message,
|
||||||
"repository": repository_id.id,
|
"repository": repository_id.id,
|
||||||
"process_id": log_record_id.process_id,
|
"process_id": log_record.log_record_id.process_id,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ from typing import Self
|
|||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.status import Client
|
from ahriman.core.status import Client
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
|
|
||||||
|
|
||||||
@ -95,7 +96,7 @@ class HttpLogHandler(logging.Handler):
|
|||||||
return # in case if no package base supplied we need just skip log message
|
return # in case if no package base supplied we need just skip log message
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.reporter.package_logs_add(log_record_id, record.created, record.getMessage())
|
self.reporter.package_logs_add(LogRecord(log_record_id, record.created, record.getMessage()))
|
||||||
except Exception:
|
except Exception:
|
||||||
if self.suppress_errors:
|
if self.suppress_errors:
|
||||||
return
|
return
|
||||||
|
@ -27,7 +27,7 @@ from ahriman.models.changes import Changes
|
|||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event, EventType
|
from ahriman.models.event import Event, EventType
|
||||||
from ahriman.models.internal_status import InternalStatus
|
from ahriman.models.internal_status import InternalStatus
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
@ -194,19 +194,16 @@ class Client:
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def package_logs_add(self, log_record_id: LogRecordId, created: float, message: str) -> None:
|
def package_logs_add(self, log_record: LogRecord) -> None:
|
||||||
"""
|
"""
|
||||||
post log record
|
post log record
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
log_record_id(LogRecordId): log record id
|
log_record(LogRecord): log record
|
||||||
created(float): log created timestamp
|
|
||||||
message(str): log message
|
|
||||||
"""
|
"""
|
||||||
# this method does not raise NotImplementedError because it is actively used as dummy client for http log
|
# this method does not raise NotImplementedError because it is actively used as dummy client for http log
|
||||||
|
|
||||||
def package_logs_get(self, package_base: str, limit: int = -1,
|
def package_logs_get(self, package_base: str, limit: int = -1, offset: int = 0) -> list[LogRecord]:
|
||||||
offset: int = 0) -> list[tuple[LogRecordId, float, str]]:
|
|
||||||
"""
|
"""
|
||||||
get package logs
|
get package logs
|
||||||
|
|
||||||
@ -216,7 +213,7 @@ class Client:
|
|||||||
offset(int, optional): records offset (Default value = 0)
|
offset(int, optional): records offset (Default value = 0)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list[tuple[LogRecordId, float, str]]: package logs
|
list[LogRecord]: package logs
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
NotImplementedError: not implemented method
|
NotImplementedError: not implemented method
|
||||||
|
@ -23,7 +23,7 @@ from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
|||||||
from ahriman.models.changes import Changes
|
from ahriman.models.changes import Changes
|
||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event, EventType
|
from ahriman.models.event import Event, EventType
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
@ -143,19 +143,16 @@ class LocalClient(Client):
|
|||||||
return packages
|
return packages
|
||||||
return [(package, status) for package, status in packages if package.base == package_base]
|
return [(package, status) for package, status in packages if package.base == package_base]
|
||||||
|
|
||||||
def package_logs_add(self, log_record_id: LogRecordId, created: float, message: str) -> None:
|
def package_logs_add(self, log_record: LogRecord) -> None:
|
||||||
"""
|
"""
|
||||||
post log record
|
post log record
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
log_record_id(LogRecordId): log record id
|
log_record(LogRecord): log record
|
||||||
created(float): log created timestamp
|
|
||||||
message(str): log message
|
|
||||||
"""
|
"""
|
||||||
self.database.logs_insert(log_record_id, created, message, self.repository_id)
|
self.database.logs_insert(log_record, self.repository_id)
|
||||||
|
|
||||||
def package_logs_get(self, package_base: str, limit: int = -1,
|
def package_logs_get(self, package_base: str, limit: int = -1, offset: int = 0) -> list[LogRecord]:
|
||||||
offset: int = 0) -> list[tuple[LogRecordId, float, str]]:
|
|
||||||
"""
|
"""
|
||||||
get package logs
|
get package logs
|
||||||
|
|
||||||
@ -165,7 +162,7 @@ class LocalClient(Client):
|
|||||||
offset(int, optional): records offset (Default value = 0)
|
offset(int, optional): records offset (Default value = 0)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list[tuple[LogRecordId, float, str]]: package logs
|
list[LogRecord]: package logs
|
||||||
"""
|
"""
|
||||||
return self.database.logs_get(package_base, limit, offset, self.repository_id)
|
return self.database.logs_get(package_base, limit, offset, self.repository_id)
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
|||||||
from ahriman.models.changes import Changes
|
from ahriman.models.changes import Changes
|
||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event, EventType
|
from ahriman.models.event import Event, EventType
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
|
|
||||||
@ -107,9 +107,9 @@ class Watcher(LazyLogging):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
raise UnknownPackageError(package_base) from None
|
raise UnknownPackageError(package_base) from None
|
||||||
|
|
||||||
package_logs_add: Callable[[LogRecordId, float, str], None]
|
package_logs_add: Callable[[LogRecord], None]
|
||||||
|
|
||||||
package_logs_get: Callable[[str, int, int], list[tuple[LogRecordId, float, str]]]
|
package_logs_get: Callable[[str, int, int], list[LogRecord]]
|
||||||
|
|
||||||
package_logs_remove: Callable[[str, str | None], None]
|
package_logs_remove: Callable[[str, str | None], None]
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ from ahriman.models.changes import Changes
|
|||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event, EventType
|
from ahriman.models.event import Event, EventType
|
||||||
from ahriman.models.internal_status import InternalStatus
|
from ahriman.models.internal_status import InternalStatus
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
@ -306,30 +307,27 @@ class WebClient(Client, SyncAhrimanClient):
|
|||||||
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def package_logs_add(self, log_record_id: LogRecordId, created: float, message: str) -> None:
|
def package_logs_add(self, log_record: LogRecord) -> None:
|
||||||
"""
|
"""
|
||||||
post log record
|
post log record
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
log_record_id(LogRecordId): log record id
|
log_record(LogRecord): log record
|
||||||
created(float): log created timestamp
|
|
||||||
message(str): log message
|
|
||||||
"""
|
"""
|
||||||
payload = {
|
payload = {
|
||||||
"created": created,
|
"created": log_record.created,
|
||||||
"message": message,
|
"message": log_record.message,
|
||||||
"process_id": log_record_id.process_id,
|
"process_id": log_record.log_record_id.process_id,
|
||||||
"version": log_record_id.version,
|
"version": log_record.log_record_id.version,
|
||||||
}
|
}
|
||||||
|
|
||||||
# this is special case, because we would like to do not suppress exception here
|
# this is special case, because we would like to do not suppress exception here
|
||||||
# in case of exception raised it will be handled by upstream HttpLogHandler
|
# in case of exception raised it will be handled by upstream HttpLogHandler
|
||||||
# In the other hand, we force to suppress all http logs here to avoid cyclic reporting
|
# In the other hand, we force to suppress all http logs here to avoid cyclic reporting
|
||||||
self.make_request("POST", self._logs_url(log_record_id.package_base),
|
self.make_request("POST", self._logs_url(log_record.log_record_id.package_base),
|
||||||
params=self.repository_id.query(), json=payload, suppress_errors=True)
|
params=self.repository_id.query(), json=payload, suppress_errors=True)
|
||||||
|
|
||||||
def package_logs_get(self, package_base: str, limit: int = -1,
|
def package_logs_get(self, package_base: str, limit: int = -1, offset: int = 0) -> list[LogRecord]:
|
||||||
offset: int = 0) -> list[tuple[LogRecordId, float, str]]:
|
|
||||||
"""
|
"""
|
||||||
get package logs
|
get package logs
|
||||||
|
|
||||||
@ -339,7 +337,7 @@ class WebClient(Client, SyncAhrimanClient):
|
|||||||
offset(int, optional): records offset (Default value = 0)
|
offset(int, optional): records offset (Default value = 0)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list[tuple[LogRecordId, float, str]]: package logs
|
list[LogRecord]: package logs
|
||||||
"""
|
"""
|
||||||
query = self.repository_id.query() + [("limit", str(limit)), ("offset", str(offset))]
|
query = self.repository_id.query() + [("limit", str(limit)), ("offset", str(offset))]
|
||||||
|
|
||||||
@ -348,7 +346,7 @@ class WebClient(Client, SyncAhrimanClient):
|
|||||||
response_json = response.json()
|
response_json = response.json()
|
||||||
|
|
||||||
return [
|
return [
|
||||||
(
|
LogRecord(
|
||||||
LogRecordId(package_base, record["version"], record["process_id"]),
|
LogRecordId(package_base, record["version"], record["process_id"]),
|
||||||
record["created"],
|
record["created"],
|
||||||
record["message"]
|
record["message"]
|
||||||
|
38
src/ahriman/models/log_record.py
Normal file
38
src/ahriman/models/log_record.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2021-2025 ahriman team.
|
||||||
|
#
|
||||||
|
# This file is part of ahriman
|
||||||
|
# (see https://github.com/arcan1s/ahriman).
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class LogRecord:
|
||||||
|
"""
|
||||||
|
log record
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
log_record_id(LogRecordId): log record identifier
|
||||||
|
created(float): log record creation timestamp
|
||||||
|
message(str): log record message
|
||||||
|
"""
|
||||||
|
|
||||||
|
log_record_id: LogRecordId
|
||||||
|
created: float
|
||||||
|
message: str
|
@ -21,6 +21,7 @@ from aiohttp.web import HTTPBadRequest, HTTPNoContent, HTTPNotFound, Response, j
|
|||||||
|
|
||||||
from ahriman.core.exceptions import UnknownPackageError
|
from ahriman.core.exceptions import UnknownPackageError
|
||||||
from ahriman.core.utils import pretty_datetime
|
from ahriman.core.utils import pretty_datetime
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.user_access import UserAccess
|
from ahriman.models.user_access import UserAccess
|
||||||
from ahriman.web.apispec.decorators import apidocs
|
from ahriman.web.apispec.decorators import apidocs
|
||||||
@ -96,7 +97,7 @@ class LogsView(StatusViewGuard, BaseView):
|
|||||||
response = {
|
response = {
|
||||||
"package_base": package_base,
|
"package_base": package_base,
|
||||||
"status": status.view(),
|
"status": status.view(),
|
||||||
"logs": "\n".join(f"[{pretty_datetime(created)}] {message}" for _, created, message in logs)
|
"logs": "\n".join(f"[{pretty_datetime(log_record.created)}] {log_record.message}" for log_record in logs)
|
||||||
}
|
}
|
||||||
return json_response(response)
|
return json_response(response)
|
||||||
|
|
||||||
@ -130,6 +131,7 @@ class LogsView(StatusViewGuard, BaseView):
|
|||||||
|
|
||||||
# either read from process identifier from payload or assign to the current process identifier
|
# either read from process identifier from payload or assign to the current process identifier
|
||||||
process_id = data.get("process_id", LogRecordId("", "").process_id)
|
process_id = data.get("process_id", LogRecordId("", "").process_id)
|
||||||
self.service().package_logs_add(LogRecordId(package_base, version, process_id), created, record)
|
log_record = LogRecord(LogRecordId(package_base, version, process_id), created, record)
|
||||||
|
self.service().package_logs_add(log_record)
|
||||||
|
|
||||||
raise HTTPNoContent
|
raise HTTPNoContent
|
||||||
|
@ -65,10 +65,10 @@ class LogsView(StatusViewGuard, BaseView):
|
|||||||
|
|
||||||
response = [
|
response = [
|
||||||
{
|
{
|
||||||
"created": created,
|
"created": log_record.created,
|
||||||
"message": message,
|
"message": log_record.message,
|
||||||
"version": log_record_id.version,
|
"version": log_record.log_record_id.version,
|
||||||
"process_id": log_record_id.process_id,
|
"process_id": log_record.log_record_id.process_id,
|
||||||
} for log_record_id, created, message in logs
|
} for log_record in logs
|
||||||
]
|
]
|
||||||
return json_response(response)
|
return json_response(response)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from ahriman.core.database import SQLite
|
from ahriman.core.database import SQLite
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
@ -9,16 +10,16 @@ def test_logs_insert_remove_version(database: SQLite, package_ahriman: Package,
|
|||||||
"""
|
"""
|
||||||
must clear version specific package logs
|
must clear version specific package logs
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2"))
|
||||||
database.logs_insert(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3")
|
database.logs_insert(LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"))
|
||||||
|
|
||||||
database.logs_remove(package_ahriman.base, "1")
|
database.logs_remove(package_ahriman.base, "1")
|
||||||
assert database.logs_get(package_ahriman.base) == [
|
assert database.logs_get(package_ahriman.base) == [
|
||||||
(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
||||||
]
|
]
|
||||||
assert database.logs_get(package_python_schedule.base) == [
|
assert database.logs_get(package_python_schedule.base) == [
|
||||||
(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"),
|
LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -26,27 +27,29 @@ def test_logs_insert_remove_multi(database: SQLite, package_ahriman: Package) ->
|
|||||||
"""
|
"""
|
||||||
must clear logs for specified repository
|
must clear logs for specified repository
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2",
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"),
|
||||||
RepositoryId("i686", database._repository_id.name))
|
RepositoryId("i686", database._repository_id.name))
|
||||||
|
|
||||||
database.logs_remove(package_ahriman.base, None, RepositoryId("i686", database._repository_id.name))
|
database.logs_remove(package_ahriman.base, None, RepositoryId("i686", database._repository_id.name))
|
||||||
assert not database.logs_get(package_ahriman.base, repository_id=RepositoryId("i686", database._repository_id.name))
|
assert not database.logs_get(package_ahriman.base, repository_id=RepositoryId("i686", database._repository_id.name))
|
||||||
assert database.logs_get(package_ahriman.base) == [(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")]
|
assert database.logs_get(package_ahriman.base) == [
|
||||||
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def test_logs_insert_remove_full(database: SQLite, package_ahriman: Package, package_python_schedule: Package) -> None:
|
def test_logs_insert_remove_full(database: SQLite, package_ahriman: Package, package_python_schedule: Package) -> None:
|
||||||
"""
|
"""
|
||||||
must clear full package logs
|
must clear full package logs
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2"))
|
||||||
database.logs_insert(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3")
|
database.logs_insert(LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"))
|
||||||
|
|
||||||
database.logs_remove(package_ahriman.base, None)
|
database.logs_remove(package_ahriman.base, None)
|
||||||
assert not database.logs_get(package_ahriman.base)
|
assert not database.logs_get(package_ahriman.base)
|
||||||
assert database.logs_get(package_python_schedule.base) == [
|
assert database.logs_get(package_python_schedule.base) == [
|
||||||
(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"),
|
LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -54,11 +57,11 @@ def test_logs_insert_get(database: SQLite, package_ahriman: Package) -> None:
|
|||||||
"""
|
"""
|
||||||
must insert and get package logs
|
must insert and get package logs
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
assert database.logs_get(package_ahriman.base) == [
|
assert database.logs_get(package_ahriman.base) == [
|
||||||
(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
||||||
(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"),
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -66,10 +69,10 @@ def test_logs_insert_get_pagination(database: SQLite, package_ahriman: Package)
|
|||||||
"""
|
"""
|
||||||
must insert and get package logs with pagination
|
must insert and get package logs with pagination
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"))
|
||||||
assert database.logs_get(package_ahriman.base, 1, 1) == [
|
assert database.logs_get(package_ahriman.base, 1, 1) == [
|
||||||
(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -77,16 +80,16 @@ def test_logs_insert_get_multi(database: SQLite, package_ahriman: Package) -> No
|
|||||||
"""
|
"""
|
||||||
must insert and get package logs for multiple repositories
|
must insert and get package logs for multiple repositories
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2",
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"),
|
||||||
RepositoryId("i686", database._repository_id.name))
|
RepositoryId("i686", database._repository_id.name))
|
||||||
|
|
||||||
assert database.logs_get(package_ahriman.base,
|
assert database.logs_get(package_ahriman.base,
|
||||||
repository_id=RepositoryId("i686", database._repository_id.name)) == [
|
repository_id=RepositoryId("i686", database._repository_id.name)) == [
|
||||||
(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"),
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"),
|
||||||
]
|
]
|
||||||
assert database.logs_get(package_ahriman.base) == [
|
assert database.logs_get(package_ahriman.base) == [
|
||||||
(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -94,9 +97,9 @@ def test_logs_rotate_remove_all(database: SQLite, package_ahriman: Package) -> N
|
|||||||
"""
|
"""
|
||||||
must remove all records when rotating with keep_last_records is 0
|
must remove all records when rotating with keep_last_records is 0
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "2"), 44.0, "message 3")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2"), 44.0, "message 3"))
|
||||||
|
|
||||||
database.logs_rotate(0)
|
database.logs_rotate(0)
|
||||||
assert not database.logs_get(package_ahriman.base)
|
assert not database.logs_get(package_ahriman.base)
|
||||||
@ -106,16 +109,16 @@ def test_logs_rotate_remove_duplicates(database: SQLite, package_ahriman: Packag
|
|||||||
"""
|
"""
|
||||||
must remove duplicate records while preserving the most recent one for each package version
|
must remove duplicate records while preserving the most recent one for each package version
|
||||||
"""
|
"""
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1", "p1"), 42.0, "message 1")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1", "p1"), 42.0, "message 1"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1", "p2"), 43.0, "message 2")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1", "p2"), 43.0, "message 2"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3"))
|
||||||
database.logs_insert(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4")
|
database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4"))
|
||||||
|
|
||||||
database.logs_rotate(2)
|
database.logs_rotate(2)
|
||||||
|
|
||||||
logs = database.logs_get(package_ahriman.base)
|
logs = database.logs_get(package_ahriman.base)
|
||||||
assert len(logs) == 2
|
assert len(logs) == 2
|
||||||
assert logs == [
|
assert logs == [
|
||||||
(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3"),
|
LogRecord(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3"),
|
||||||
(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4"),
|
LogRecord(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4"),
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,7 @@ from pytest_mock import MockerFixture
|
|||||||
|
|
||||||
from ahriman.core.configuration import Configuration
|
from ahriman.core.configuration import Configuration
|
||||||
from ahriman.core.log.http_log_handler import HttpLogHandler
|
from ahriman.core.log.http_log_handler import HttpLogHandler
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ def test_emit(configuration: Configuration, log_record: logging.LogRecord, packa
|
|||||||
handler = HttpLogHandler(repository_id, configuration, report=False, suppress_errors=False)
|
handler = HttpLogHandler(repository_id, configuration, report=False, suppress_errors=False)
|
||||||
|
|
||||||
handler.emit(log_record)
|
handler.emit(log_record)
|
||||||
log_mock.assert_called_once_with(log_record_id, log_record.created, log_record.getMessage())
|
log_mock.assert_called_once_with(LogRecord(log_record_id, log_record.created, log_record.getMessage()))
|
||||||
|
|
||||||
|
|
||||||
def test_emit_failed(configuration: Configuration, log_record: logging.LogRecord, package_ahriman: Package,
|
def test_emit_failed(configuration: Configuration, log_record: logging.LogRecord, package_ahriman: Package,
|
||||||
|
@ -13,6 +13,7 @@ from ahriman.models.changes import Changes
|
|||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event
|
from ahriman.models.event import Event
|
||||||
from ahriman.models.internal_status import InternalStatus
|
from ahriman.models.internal_status import InternalStatus
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
@ -112,7 +113,7 @@ def test_event_get(client: Client) -> None:
|
|||||||
client.event_get(None, None)
|
client.event_get(None, None)
|
||||||
|
|
||||||
|
|
||||||
def test_logs_rotate(client: Client, package_ahriman: Package) -> None:
|
def test_logs_rotate(client: Client) -> None:
|
||||||
"""
|
"""
|
||||||
must do not raise exception on logs rotation call
|
must do not raise exception on logs rotation call
|
||||||
"""
|
"""
|
||||||
@ -164,7 +165,7 @@ def test_package_logs_add(client: Client, package_ahriman: Package, log_record:
|
|||||||
must process log record addition without exception
|
must process log record addition without exception
|
||||||
"""
|
"""
|
||||||
log_record_id = LogRecordId(package_ahriman.base, package_ahriman.version)
|
log_record_id = LogRecordId(package_ahriman.base, package_ahriman.version)
|
||||||
client.package_logs_add(log_record_id, log_record.created, log_record.getMessage())
|
client.package_logs_add(LogRecord(log_record_id, log_record.created, log_record.getMessage()))
|
||||||
|
|
||||||
|
|
||||||
def test_package_logs_get(client: Client, package_ahriman: Package) -> None:
|
def test_package_logs_get(client: Client, package_ahriman: Package) -> None:
|
||||||
|
@ -8,6 +8,7 @@ from ahriman.models.build_status import BuildStatus, BuildStatusEnum
|
|||||||
from ahriman.models.changes import Changes
|
from ahriman.models.changes import Changes
|
||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event, EventType
|
from ahriman.models.event import Event, EventType
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
@ -112,10 +113,10 @@ def test_package_logs_add(local_client: LocalClient, package_ahriman: Package, l
|
|||||||
"""
|
"""
|
||||||
logs_mock = mocker.patch("ahriman.core.database.SQLite.logs_insert")
|
logs_mock = mocker.patch("ahriman.core.database.SQLite.logs_insert")
|
||||||
log_record_id = LogRecordId(package_ahriman.base, package_ahriman.version)
|
log_record_id = LogRecordId(package_ahriman.base, package_ahriman.version)
|
||||||
|
record = LogRecord(log_record_id, log_record.created, log_record.getMessage())
|
||||||
|
|
||||||
local_client.package_logs_add(log_record_id, log_record.created, log_record.getMessage())
|
local_client.package_logs_add(record)
|
||||||
logs_mock.assert_called_once_with(log_record_id, log_record.created, log_record.getMessage(),
|
logs_mock.assert_called_once_with(record, local_client.repository_id)
|
||||||
local_client.repository_id)
|
|
||||||
|
|
||||||
|
|
||||||
def test_package_logs_get(local_client: LocalClient, package_ahriman: Package, mocker: MockerFixture) -> None:
|
def test_package_logs_get(local_client: LocalClient, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||||
|
@ -12,6 +12,7 @@ from ahriman.models.changes import Changes
|
|||||||
from ahriman.models.dependencies import Dependencies
|
from ahriman.models.dependencies import Dependencies
|
||||||
from ahriman.models.event import Event, EventType
|
from ahriman.models.event import Event, EventType
|
||||||
from ahriman.models.internal_status import InternalStatus
|
from ahriman.models.internal_status import InternalStatus
|
||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
from ahriman.models.pkgbuild_patch import PkgbuildPatch
|
||||||
@ -605,9 +606,10 @@ def test_package_logs_add(web_client: WebClient, log_record: logging.LogRecord,
|
|||||||
"process_id": LogRecordId.process_id,
|
"process_id": LogRecordId.process_id,
|
||||||
"version": package_ahriman.version,
|
"version": package_ahriman.version,
|
||||||
}
|
}
|
||||||
|
record = LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version),
|
||||||
|
log_record.created, log_record.getMessage())
|
||||||
|
|
||||||
web_client.package_logs_add(LogRecordId(package_ahriman.base, package_ahriman.version),
|
web_client.package_logs_add(record)
|
||||||
log_record.created, log_record.getMessage())
|
|
||||||
requests_mock.assert_called_once_with("POST", pytest.helpers.anyvar(str, True),
|
requests_mock.assert_called_once_with("POST", pytest.helpers.anyvar(str, True),
|
||||||
params=web_client.repository_id.query(), json=payload, suppress_errors=True)
|
params=web_client.repository_id.query(), json=payload, suppress_errors=True)
|
||||||
|
|
||||||
@ -619,9 +621,11 @@ def test_package_logs_add_failed(web_client: WebClient, log_record: logging.LogR
|
|||||||
"""
|
"""
|
||||||
mocker.patch("requests.Session.request", side_effect=Exception())
|
mocker.patch("requests.Session.request", side_effect=Exception())
|
||||||
log_record.package_base = package_ahriman.base
|
log_record.package_base = package_ahriman.base
|
||||||
|
record = LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version),
|
||||||
|
log_record.created, log_record.getMessage())
|
||||||
|
|
||||||
with pytest.raises(Exception):
|
with pytest.raises(Exception):
|
||||||
web_client.package_logs_add(LogRecordId(package_ahriman.base, package_ahriman.version),
|
web_client.package_logs_add(record)
|
||||||
log_record.created, log_record.getMessage())
|
|
||||||
|
|
||||||
|
|
||||||
def test_package_logs_add_failed_http_error(web_client: WebClient, log_record: logging.LogRecord,
|
def test_package_logs_add_failed_http_error(web_client: WebClient, log_record: logging.LogRecord,
|
||||||
@ -631,9 +635,11 @@ def test_package_logs_add_failed_http_error(web_client: WebClient, log_record: l
|
|||||||
"""
|
"""
|
||||||
mocker.patch("requests.Session.request", side_effect=requests.HTTPError())
|
mocker.patch("requests.Session.request", side_effect=requests.HTTPError())
|
||||||
log_record.package_base = package_ahriman.base
|
log_record.package_base = package_ahriman.base
|
||||||
|
record = LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version),
|
||||||
|
log_record.created, log_record.getMessage())
|
||||||
|
|
||||||
with pytest.raises(Exception):
|
with pytest.raises(Exception):
|
||||||
web_client.package_logs_add(LogRecordId(package_ahriman.base, package_ahriman.version),
|
web_client.package_logs_add(record)
|
||||||
log_record.created, log_record.getMessage())
|
|
||||||
|
|
||||||
|
|
||||||
def test_package_logs_get(web_client: WebClient, package_ahriman: Package, mocker: MockerFixture) -> None:
|
def test_package_logs_get(web_client: WebClient, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||||
@ -656,7 +662,7 @@ def test_package_logs_get(web_client: WebClient, package_ahriman: Package, mocke
|
|||||||
requests_mock.assert_called_once_with("GET", pytest.helpers.anyvar(str, True),
|
requests_mock.assert_called_once_with("GET", pytest.helpers.anyvar(str, True),
|
||||||
params=web_client.repository_id.query() + [("limit", "1"), ("offset", "2")])
|
params=web_client.repository_id.query() + [("limit", "1"), ("offset", "2")])
|
||||||
assert result == [
|
assert result == [
|
||||||
(LogRecordId(package_ahriman.base, package_ahriman.version), message["created"], message["message"]),
|
LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version), message["created"], message["message"]),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
0
tests/ahriman/models/test_log_record.py
Normal file
0
tests/ahriman/models/test_log_record.py
Normal file
Loading…
Reference in New Issue
Block a user