mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-27 08:47:18 +00:00
Compare commits
1 Commits
8b62fa47b6
...
f13c25e50c
Author | SHA1 | Date | |
---|---|---|---|
f13c25e50c |
@ -24,7 +24,4 @@ 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,6 +21,7 @@ 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
|
||||||
|
|
||||||
|
|
||||||
@ -47,10 +48,10 @@ class LogsOperations(Operations):
|
|||||||
|
|
||||||
def run(connection: Connection) -> list[LogRecord]:
|
def run(connection: Connection) -> list[LogRecord]:
|
||||||
return [
|
return [
|
||||||
LogRecord.from_json(package_base, row)
|
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, message, version, process_id from (
|
select created, record, 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
|
||||||
@ -80,14 +81,18 @@ class LogsOperations(Operations):
|
|||||||
connection.execute(
|
connection.execute(
|
||||||
"""
|
"""
|
||||||
insert into logs
|
insert into logs
|
||||||
(package_base, version, created, message, repository, process_id)
|
(package_base, version, created, record, repository, process_id)
|
||||||
values
|
values
|
||||||
(:package_base, :version, :created, :message, :repository, :process_id)
|
(:package_base, :version, :created, :record, :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,
|
||||||
} | log_record.view()
|
"process_id": log_record.log_record_id.process_id,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.with_connection(run, commit=True)
|
return self.with_connection(run, commit=True)
|
||||||
|
@ -30,6 +30,7 @@ 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
|
||||||
@ -344,7 +345,13 @@ 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 [LogRecord.from_json(package_base, record) for record in response_json]
|
return [
|
||||||
|
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: event object
|
Self: dependencies object
|
||||||
"""
|
"""
|
||||||
return cls(
|
return cls(
|
||||||
event=dump["event"],
|
event=dump["event"],
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
# 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
|
||||||
|
|
||||||
@ -37,40 +36,3 @@ 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,6 +22,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 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
|
||||||
@ -122,10 +123,15 @@ class LogsView(StatusViewGuard, BaseView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
data = await self.request.json()
|
data = await self.request.json()
|
||||||
log_record = LogRecord.from_json(package_base, data)
|
created = data["created"]
|
||||||
|
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,5 +63,12 @@ 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 = [log_record.view() for log_record in logs]
|
response = [
|
||||||
|
{
|
||||||
|
"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)
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
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