mirror of
				https://github.com/arcan1s/ahriman.git
				synced 2025-10-31 05:43:41 +00:00 
			
		
		
		
	feat: refine log system (#142)
* refine package logging * add interface * revert version selection * replace tuple with model * rename column in logs table, add coverters * generate process identifier for child proocesses
This commit is contained in:
		| @ -7,6 +7,8 @@ logging = ahriman.ini.d/logging.ini | ||||
| ;apply_migrations = yes | ||||
| ; Path to the application SQLite database. | ||||
| database = ${repository:root}/ahriman.db | ||||
| ; Keep last build logs for each package | ||||
| keep_last_logs = 5 | ||||
|  | ||||
| [alpm] | ||||
| ; Path to pacman system database cache. | ||||
|  | ||||
| @ -16,11 +16,11 @@ | ||||
|         <div class="container"> | ||||
|             <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> | ||||
|                 <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> | ||||
|                 </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"> | ||||
|                         {% for repository in repositories %} | ||||
|                             <li class="nav-item"> | ||||
|  | ||||
| @ -59,7 +59,14 @@ | ||||
|                 </nav> | ||||
|                 <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"> | ||||
|                         <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 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> | ||||
| @ -100,6 +107,7 @@ | ||||
|     const packageInfoModalHeader = document.getElementById("package-info-modal-header"); | ||||
|     const packageInfo = document.getElementById("package-info"); | ||||
|  | ||||
|     const packageInfoLogsVersions = document.getElementById("package-info-logs-versions"); | ||||
|     const packageInfoLogsInput = document.getElementById("package-info-logs-input"); | ||||
|     const packageInfoLogsCopyButton = document.getElementById("package-info-logs-copy-button"); | ||||
|  | ||||
| @ -285,11 +293,45 @@ | ||||
|                 convert: response => response.json(), | ||||
|             }, | ||||
|             data => { | ||||
|                 const logs = data.map(log_record => { | ||||
|                     return `[${new Date(1000 * log_record.created).toISOString()}] ${log_record.message}`; | ||||
|                 }); | ||||
|                 packageInfoLogsInput.textContent = logs.join("\n"); | ||||
|                 highlight(packageInfoLogsInput); | ||||
|                 const selectors = Object | ||||
|                     .values( | ||||
|                         data.reduce((acc, log_record) => { | ||||
|                             const id = `${log_record.version}-${log_record.process_id}`; | ||||
|                             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, | ||||
|         ); | ||||
|  | ||||
| @ -27,4 +27,10 @@ | ||||
|         top: 0; | ||||
|         right: 5px; | ||||
|     } | ||||
|  | ||||
|     .nav-link.active { | ||||
|         pointer-events: none; | ||||
|         cursor: default; | ||||
|         color: black !important; | ||||
|     } | ||||
| </style> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user