mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 15:27:17 +00:00
Compare commits
2 Commits
f13c25e50c
...
8b62fa47b6
Author | SHA1 | Date | |
---|---|---|---|
8b62fa47b6 | |||
631e572d60 |
@ -24,4 +24,7 @@ steps = [
|
|||||||
"""
|
"""
|
||||||
alter table logs add column process_id text not null default ''
|
alter table logs add column process_id text not null default ''
|
||||||
""",
|
""",
|
||||||
|
"""
|
||||||
|
alter table logs rename column record to message
|
||||||
|
""",
|
||||||
]
|
]
|
||||||
|
@ -21,7 +21,6 @@ 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 import LogRecord
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
|
|
||||||
|
|
||||||
@ -48,10 +47,10 @@ class LogsOperations(Operations):
|
|||||||
|
|
||||||
def run(connection: Connection) -> list[LogRecord]:
|
def run(connection: Connection) -> list[LogRecord]:
|
||||||
return [
|
return [
|
||||||
LogRecord(LogRecordId(package_base, row["version"], row["process_id"]), row["created"], row["record"])
|
LogRecord.from_json(package_base, row)
|
||||||
for row in connection.execute(
|
for row in connection.execute(
|
||||||
"""
|
"""
|
||||||
select created, record, version, process_id from (
|
select created, message, version, process_id from (
|
||||||
select * from logs
|
select * from logs
|
||||||
where package_base = :package_base and repository = :repository
|
where package_base = :package_base and repository = :repository
|
||||||
order by created desc limit :limit offset :offset
|
order by created desc limit :limit offset :offset
|
||||||
@ -81,18 +80,14 @@ class LogsOperations(Operations):
|
|||||||
connection.execute(
|
connection.execute(
|
||||||
"""
|
"""
|
||||||
insert into logs
|
insert into logs
|
||||||
(package_base, version, created, record, repository, process_id)
|
(package_base, version, created, message, repository, process_id)
|
||||||
values
|
values
|
||||||
(:package_base, :version, :created, :record, :repository, :process_id)
|
(:package_base, :version, :created, :message, :repository, :process_id)
|
||||||
""",
|
""",
|
||||||
{
|
{
|
||||||
"package_base": log_record.log_record_id.package_base,
|
"package_base": log_record.log_record_id.package_base,
|
||||||
"version": log_record.log_record_id.version,
|
|
||||||
"created": log_record.created,
|
|
||||||
"record": log_record.message,
|
|
||||||
"repository": repository_id.id,
|
"repository": repository_id.id,
|
||||||
"process_id": log_record.log_record_id.process_id,
|
} | log_record.view()
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.with_connection(run, commit=True)
|
return self.with_connection(run, commit=True)
|
||||||
|
@ -30,7 +30,6 @@ 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 import LogRecord
|
||||||
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
|
||||||
from ahriman.models.repository_id import RepositoryId
|
from ahriman.models.repository_id import RepositoryId
|
||||||
@ -345,13 +344,7 @@ class WebClient(Client, SyncAhrimanClient):
|
|||||||
response = self.make_request("GET", self._logs_url(package_base), params=query)
|
response = self.make_request("GET", self._logs_url(package_base), params=query)
|
||||||
response_json = response.json()
|
response_json = response.json()
|
||||||
|
|
||||||
return [
|
return [LogRecord.from_json(package_base, record) for record in response_json]
|
||||||
LogRecord(
|
|
||||||
LogRecordId(package_base, record["version"], record["process_id"]),
|
|
||||||
record["created"],
|
|
||||||
record["message"]
|
|
||||||
) for record in response_json
|
|
||||||
]
|
|
||||||
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ class Event:
|
|||||||
dump(dict[str, Any]): json dump body
|
dump(dict[str, Any]): json dump body
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Self: dependencies object
|
Self: event object
|
||||||
"""
|
"""
|
||||||
return cls(
|
return cls(
|
||||||
event=dump["event"],
|
event=dump["event"],
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from typing import Any, Self
|
||||||
|
|
||||||
from ahriman.models.log_record_id import LogRecordId
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
|
|
||||||
@ -36,3 +37,40 @@ class LogRecord:
|
|||||||
log_record_id: LogRecordId
|
log_record_id: LogRecordId
|
||||||
created: float
|
created: float
|
||||||
message: str
|
message: str
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_json(cls, package_base: str, dump: dict[str, Any]) -> Self:
|
||||||
|
"""
|
||||||
|
construct log record from the json dump
|
||||||
|
|
||||||
|
Args:
|
||||||
|
package_base(str): package base for which log record belongs
|
||||||
|
dump(dict[str, Any]): json dump body
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Self: log record object
|
||||||
|
"""
|
||||||
|
if "process_id" in dump:
|
||||||
|
log_record_id = LogRecordId(package_base, dump["version"], dump["process_id"])
|
||||||
|
else:
|
||||||
|
log_record_id = LogRecordId(package_base, dump["version"])
|
||||||
|
|
||||||
|
return cls(
|
||||||
|
log_record_id=log_record_id,
|
||||||
|
created=dump["created"],
|
||||||
|
message=dump["message"],
|
||||||
|
)
|
||||||
|
|
||||||
|
def view(self) -> dict[str, Any]:
|
||||||
|
"""
|
||||||
|
generate json log record view
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict[str, Any]: json-friendly dictionary
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
"created": self.created,
|
||||||
|
"message": self.message,
|
||||||
|
"version": self.log_record_id.version,
|
||||||
|
"process_id": self.log_record_id.process_id,
|
||||||
|
}
|
||||||
|
@ -22,7 +22,6 @@ 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 import LogRecord
|
||||||
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
|
||||||
from ahriman.web.schemas import LogSchema, LogsSchema, PackageNameSchema, PackageVersionSchema, RepositoryIdSchema
|
from ahriman.web.schemas import LogSchema, LogsSchema, PackageNameSchema, PackageVersionSchema, RepositoryIdSchema
|
||||||
@ -123,15 +122,10 @@ class LogsView(StatusViewGuard, BaseView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
data = await self.request.json()
|
data = await self.request.json()
|
||||||
created = data["created"]
|
log_record = LogRecord.from_json(package_base, data)
|
||||||
record = data["message"]
|
|
||||||
version = data["version"]
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
raise HTTPBadRequest(reason=str(ex))
|
raise HTTPBadRequest(reason=str(ex))
|
||||||
|
|
||||||
# either read from process identifier from payload or assign to the current process identifier
|
|
||||||
process_id = data.get("process_id", LogRecordId("", "").process_id)
|
|
||||||
log_record = LogRecord(LogRecordId(package_base, version, process_id), created, record)
|
|
||||||
self.service().package_logs_add(log_record)
|
self.service().package_logs_add(log_record)
|
||||||
|
|
||||||
raise HTTPNoContent
|
raise HTTPNoContent
|
||||||
|
@ -63,12 +63,5 @@ class LogsView(StatusViewGuard, BaseView):
|
|||||||
|
|
||||||
logs = self.service(package_base=package_base).package_logs_get(package_base, limit, offset)
|
logs = self.service(package_base=package_base).package_logs_get(package_base, limit, offset)
|
||||||
|
|
||||||
response = [
|
response = [log_record.view() for log_record in logs]
|
||||||
{
|
|
||||||
"created": log_record.created,
|
|
||||||
"message": log_record.message,
|
|
||||||
"version": log_record.log_record_id.version,
|
|
||||||
"process_id": log_record.log_record_id.process_id,
|
|
||||||
} for log_record in logs
|
|
||||||
]
|
|
||||||
return json_response(response)
|
return json_response(response)
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
from ahriman.models.log_record import LogRecord
|
||||||
|
from ahriman.models.log_record_id import LogRecordId
|
||||||
|
|
||||||
|
|
||||||
|
def test_log_record_from_json_view() -> None:
|
||||||
|
"""
|
||||||
|
must construct same object from json
|
||||||
|
"""
|
||||||
|
log_record = LogRecord(LogRecordId("base", "version"), 0, "message")
|
||||||
|
assert LogRecord.from_json(log_record.log_record_id.package_base, log_record.view()) == log_record
|
||||||
|
|
||||||
|
log_record = LogRecord(LogRecordId("base", "version", "process_id"), 0, "message")
|
||||||
|
assert LogRecord.from_json(log_record.log_record_id.package_base, log_record.view()) == log_record
|
Loading…
Reference in New Issue
Block a user