mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 15:27:17 +00:00
Compare commits
2 Commits
4317b8c8c1
...
1f6932eb82
Author | SHA1 | Date | |
---|---|---|---|
1f6932eb82 | |||
0c26f149fd |
@ -16,11 +16,11 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<nav class="navbar navbar-expand-lg">
|
<nav class="navbar navbar-expand-lg">
|
||||||
<div class="navbar-brand"><a href="https://github.com/arcan1s/ahriman" title="logo"><img src="/static/logo.svg" width="30" height="30" alt=""></a></div>
|
<div class="navbar-brand"><a href="https://github.com/arcan1s/ahriman" title="logo"><img src="/static/logo.svg" width="30" height="30" alt=""></a></div>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#repositories-navbar-supported-content" aria-controls="repositories-navbar-supported-content" aria-expanded="false" aria-label="Toggle navigation">
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#repositories-navbar" aria-controls="repositories-navbar" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div id="repositories-navbar-supported-content" class="collapse navbar-collapse">
|
<div id="repositories-navbar" class="collapse navbar-collapse">
|
||||||
<ul id="repositories" class="nav nav-tabs">
|
<ul id="repositories" class="nav nav-tabs">
|
||||||
{% for repository in repositories %}
|
{% for repository in repositories %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
|
@ -59,7 +59,14 @@
|
|||||||
</nav>
|
</nav>
|
||||||
<div class="tab-content" id="nav-tabContent">
|
<div class="tab-content" id="nav-tabContent">
|
||||||
<div id="package-info-logs" class="tab-pane fade show active" role="tabpanel" aria-labelledby="package-info-logs-button" tabindex="0">
|
<div id="package-info-logs" class="tab-pane fade show active" role="tabpanel" aria-labelledby="package-info-logs-button" tabindex="0">
|
||||||
<pre class="language-console"><code id="package-info-logs-input" class="pre-scrollable language-console"></code><button id="package-info-logs-copy-button" type="button" class="btn language-console" onclick="copyLogs()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
<div class="row">
|
||||||
|
<div class="col-2">
|
||||||
|
<nav id="package-info-logs-versions" class="nav flex-column"></nav>
|
||||||
|
</div>
|
||||||
|
<div class="col-10">
|
||||||
|
<pre class="language-console"><code id="package-info-logs-input" class="pre-scrollable language-console"></code><button id="package-info-logs-copy-button" type="button" class="btn language-console" onclick="copyLogs()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="package-info-changes" class="tab-pane fade" role="tabpanel" aria-labelledby="package-info-changes-button" tabindex="0">
|
<div id="package-info-changes" class="tab-pane fade" role="tabpanel" aria-labelledby="package-info-changes-button" tabindex="0">
|
||||||
<pre class="language-diff"><code id="package-info-changes-input" class="pre-scrollable language-diff"></code><button id="package-info-changes-copy-button" type="button" class="btn language-diff" onclick="copyChanges()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
<pre class="language-diff"><code id="package-info-changes-input" class="pre-scrollable language-diff"></code><button id="package-info-changes-copy-button" type="button" class="btn language-diff" onclick="copyChanges()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
||||||
@ -100,6 +107,7 @@
|
|||||||
const packageInfoModalHeader = document.getElementById("package-info-modal-header");
|
const packageInfoModalHeader = document.getElementById("package-info-modal-header");
|
||||||
const packageInfo = document.getElementById("package-info");
|
const packageInfo = document.getElementById("package-info");
|
||||||
|
|
||||||
|
const packageInfoLogsVersions = document.getElementById("package-info-logs-versions");
|
||||||
const packageInfoLogsInput = document.getElementById("package-info-logs-input");
|
const packageInfoLogsInput = document.getElementById("package-info-logs-input");
|
||||||
const packageInfoLogsCopyButton = document.getElementById("package-info-logs-copy-button");
|
const packageInfoLogsCopyButton = document.getElementById("package-info-logs-copy-button");
|
||||||
|
|
||||||
@ -285,11 +293,45 @@
|
|||||||
convert: response => response.json(),
|
convert: response => response.json(),
|
||||||
},
|
},
|
||||||
data => {
|
data => {
|
||||||
const logs = data.map(log_record => {
|
const selectors = Object
|
||||||
return `[${new Date(1000 * log_record.created).toISOString()}] ${log_record.message}`;
|
.values(
|
||||||
});
|
data.reduce((acc, log_record) => {
|
||||||
packageInfoLogsInput.textContent = logs.join("\n");
|
const id = `${log_record.version}-${log_record.process_id}`;
|
||||||
highlight(packageInfoLogsInput);
|
if (acc[id])
|
||||||
|
acc[id].created = Math.min(log_record.created, acc[id].created);
|
||||||
|
else
|
||||||
|
acc[id] = log_record;
|
||||||
|
return acc;
|
||||||
|
}, {})
|
||||||
|
)
|
||||||
|
.sort(({created: left}, {created: right}) =>
|
||||||
|
right - left
|
||||||
|
)
|
||||||
|
.map(version => {
|
||||||
|
const link = document.createElement("a");
|
||||||
|
link.classList.add("nav-link");
|
||||||
|
|
||||||
|
link.textContent = version.version;
|
||||||
|
link.href = "#";
|
||||||
|
link.onclick = _ => {
|
||||||
|
const logs = data
|
||||||
|
.filter(log_record => log_record.version === version.version && log_record.process_id === version.process_id)
|
||||||
|
.map(log_record => `[${new Date(1000 * log_record.created).toISOString()}] ${log_record.message}`);
|
||||||
|
|
||||||
|
packageInfoLogsInput.textContent = logs.join("\n");
|
||||||
|
highlight(packageInfoLogsInput);
|
||||||
|
|
||||||
|
Array.from(packageInfoLogsVersions.children).forEach(el => el.classList.remove("active"));
|
||||||
|
link.classList.add("active");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return link;
|
||||||
|
});
|
||||||
|
|
||||||
|
packageInfoLogsVersions.replaceChildren(...selectors);
|
||||||
|
selectors.find(Boolean)?.click();
|
||||||
},
|
},
|
||||||
onFailure,
|
onFailure,
|
||||||
);
|
);
|
||||||
|
@ -27,4 +27,10 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
right: 5px;
|
right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-link.active {
|
||||||
|
pointer-events: none;
|
||||||
|
cursor: default;
|
||||||
|
color: black !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -74,7 +74,7 @@ class LazyLogging:
|
|||||||
|
|
||||||
def package_record_factory(*args: Any, **kwargs: Any) -> logging.LogRecord:
|
def package_record_factory(*args: Any, **kwargs: Any) -> logging.LogRecord:
|
||||||
record = current_factory(*args, **kwargs)
|
record = current_factory(*args, **kwargs)
|
||||||
record.package_id = LogRecordId(package_base, version or "")
|
record.package_id = LogRecordId(package_base, version or "<unknown>")
|
||||||
return record
|
return record
|
||||||
|
|
||||||
logging.setLogRecordFactory(package_record_factory)
|
logging.setLogRecordFactory(package_record_factory)
|
||||||
|
@ -75,7 +75,7 @@ class Executor(PackageInfo, Cleaner):
|
|||||||
|
|
||||||
result = Result()
|
result = Result()
|
||||||
for single in updates:
|
for single in updates:
|
||||||
with self.in_package_context(single.base, single.version), \
|
with self.in_package_context(single.base, local_versions.get(single.base)), \
|
||||||
TemporaryDirectory(ignore_cleanup_errors=True) as dir_name:
|
TemporaryDirectory(ignore_cleanup_errors=True) as dir_name:
|
||||||
try:
|
try:
|
||||||
with self.in_event(single.base, EventType.PackageUpdated, failure=EventType.PackageUpdateFailed):
|
with self.in_event(single.base, EventType.PackageUpdated, failure=EventType.PackageUpdateFailed):
|
||||||
@ -194,6 +194,7 @@ class Executor(PackageInfo, Cleaner):
|
|||||||
self.repo.add(package_path)
|
self.repo.add(package_path)
|
||||||
|
|
||||||
current_packages = {package.base: package for package in self.packages()}
|
current_packages = {package.base: package for package in self.packages()}
|
||||||
|
local_versions = {package_base: package.version for package_base, package in current_packages.items()}
|
||||||
|
|
||||||
removed_packages: list[str] = [] # list of packages which have been removed from the base
|
removed_packages: list[str] = [] # list of packages which have been removed from the base
|
||||||
updates = self.load_archives(packages)
|
updates = self.load_archives(packages)
|
||||||
@ -201,7 +202,7 @@ class Executor(PackageInfo, Cleaner):
|
|||||||
|
|
||||||
result = Result()
|
result = Result()
|
||||||
for local in updates:
|
for local in updates:
|
||||||
with self.in_package_context(local.base, local.version):
|
with self.in_package_context(local.base, local_versions.get(local.base)):
|
||||||
try:
|
try:
|
||||||
packager = self.packager(packagers, local.base)
|
packager = self.packager(packagers, local.base)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user