chore: Fix various bugs in calendar log handling

This commit is contained in:
jamesread 2026-01-08 23:59:52 +00:00
parent 7f83b67a28
commit 7920ffa28a
10 changed files with 58 additions and 9 deletions

View File

@ -21,6 +21,7 @@
"standard": "^17.1.2", "standard": "^17.1.2",
"unplugin-vue-components": "^30.0.0", "unplugin-vue-components": "^30.0.0",
"vite": "^7.3.1", "vite": "^7.3.1",
"vue": "^3.5.26",
"vue-i18n": "^11.2.8", "vue-i18n": "^11.2.8",
"vue-router": "^4.6.4" "vue-router": "^4.6.4"
}, },

View File

@ -34,6 +34,7 @@
"standard": "^17.1.2", "standard": "^17.1.2",
"unplugin-vue-components": "^30.0.0", "unplugin-vue-components": "^30.0.0",
"vite": "^7.3.1", "vite": "^7.3.1",
"vue": "^3.5.26",
"vue-i18n": "^11.2.8", "vue-i18n": "^11.2.8",
"vue-router": "^4.6.4" "vue-router": "^4.6.4"
} }

View File

@ -77,14 +77,40 @@ async function fetchLogs() {
error.value = null error.value = null
try { try {
// Fetch a large number of logs to populate the calendar // Currently fetches only the default page (startOffset: 0)
// We'll fetch more than a single page to get better calendar coverage // Multi-page fetching: loop through pages until no more logs or limit reached
const args = { const allLogs = []
"startOffset": BigInt(0), let startOffset = BigInt(0)
const maxLogs = 10000 // Reasonable limit to prevent excessive API calls
const pageSize = 100 // Typical page size, will be updated from API response
while (allLogs.length < maxLogs) {
const args = {
"startOffset": startOffset,
}
const response = await window.client.getLogs(args)
const pageLogs = response.logs || []
// If no logs returned, we've reached the end
if (pageLogs.length === 0) {
break
}
// Append logs from this page
allLogs.push(...pageLogs)
// Update offset for next page
const currentPageSize = Number(response.pageSize) || pageLogs.length
startOffset += BigInt(currentPageSize)
// If we got fewer logs than the page size, we've reached the end
if (pageLogs.length < currentPageSize) {
break
}
} }
const response = await window.client.getLogs(args) logs.value = allLogs
logs.value = response.logs || []
} catch (err) { } catch (err) {
console.error('Failed to fetch logs:', err) console.error('Failed to fetch logs:', err)
error.value = 'Failed to load logs' error.value = 'Failed to load logs'

View File

@ -2,7 +2,7 @@
<Section :title="t('logs.title')" :padding="false"> <Section :title="t('logs.title')" :padding="false">
<template #toolbar> <template #toolbar>
<router-link to="/logs/calendar" class="button neutral"> <router-link to="/logs/calendar" class="button neutral">
Calendar {{ t('logs.calendar') }}
</router-link> </router-link>
<label class="input-with-icons"> <label class="input-with-icons">
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"> <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
@ -130,7 +130,8 @@ const filteredLogs = computed(() => {
result = result.filter(log => { result = result.filter(log => {
if (!log.datetimeStarted) return false if (!log.datetimeStarted) return false
const logDate = new Date(log.datetimeStarted) const logDate = new Date(log.datetimeStarted)
const logDateString = `${logDate.getFullYear()}-${String(logDate.getMonth() + 1).padStart(2, '0')}-${String(logDate.getDate()).padStart(2, '0')}` // Normalize to UTC ISO date string (YYYY-MM-DD) for comparison
const logDateString = logDate.toISOString().split('T')[0]
return logDateString === selectedDate.value return logDateString === selectedDate.value
}) })
} }

View File

@ -29,7 +29,9 @@
"logs.action": "Aktion", "logs.action": "Aktion",
"logs.back-to-list": "Zurück zur Liste", "logs.back-to-list": "Zurück zur Liste",
"logs.blocked": "Blockiert", "logs.blocked": "Blockiert",
"logs.calendar": "Kalender",
"logs.calendar-title": "Protokoll-Kalender", "logs.calendar-title": "Protokoll-Kalender",
"logs.clear-date-filter": "Datumsfilter löschen",
"logs.clear-filter": "Suchfilter löschen", "logs.clear-filter": "Suchfilter löschen",
"logs.completed": "Abgeschlossen", "logs.completed": "Abgeschlossen",
"logs.exit-code": "Ausführungscode", "logs.exit-code": "Ausführungscode",
@ -77,7 +79,9 @@
"logs.action": "Action", "logs.action": "Action",
"logs.back-to-list": "Back to List", "logs.back-to-list": "Back to List",
"logs.blocked": "Blocked", "logs.blocked": "Blocked",
"logs.calendar": "Calendar",
"logs.calendar-title": "Logs Calendar", "logs.calendar-title": "Logs Calendar",
"logs.clear-date-filter": "Clear date filter",
"logs.clear-filter": "Clear search filter", "logs.clear-filter": "Clear search filter",
"logs.completed": "Completed", "logs.completed": "Completed",
"logs.exit-code": "Exit code", "logs.exit-code": "Exit code",
@ -125,7 +129,9 @@
"logs.action": "Acción", "logs.action": "Acción",
"logs.back-to-list": "Volver a la Lista", "logs.back-to-list": "Volver a la Lista",
"logs.blocked": "Bloqueado", "logs.blocked": "Bloqueado",
"logs.calendar": "Calendario",
"logs.calendar-title": "Calendario de Registros", "logs.calendar-title": "Calendario de Registros",
"logs.clear-date-filter": "Limpiar filtro de fecha",
"logs.clear-filter": "Limpiar filtro de búsqueda", "logs.clear-filter": "Limpiar filtro de búsqueda",
"logs.completed": "Completado", "logs.completed": "Completado",
"logs.exit-code": "Código de salida", "logs.exit-code": "Código de salida",
@ -173,7 +179,9 @@
"logs.action": "Azione", "logs.action": "Azione",
"logs.back-to-list": "Torna all'Elenco", "logs.back-to-list": "Torna all'Elenco",
"logs.blocked": "Bloccato", "logs.blocked": "Bloccato",
"logs.calendar": "Calendario",
"logs.calendar-title": "Calendario dei Registri", "logs.calendar-title": "Calendario dei Registri",
"logs.clear-date-filter": "Cancella filtro data",
"logs.clear-filter": "Cancella filtro di ricerca", "logs.clear-filter": "Cancella filtro di ricerca",
"logs.completed": "Completato", "logs.completed": "Completato",
"logs.exit-code": "Codice di uscita", "logs.exit-code": "Codice di uscita",
@ -221,7 +229,9 @@
"logs.action": "动作", "logs.action": "动作",
"logs.back-to-list": "返回列表", "logs.back-to-list": "返回列表",
"logs.blocked": "阻塞", "logs.blocked": "阻塞",
"logs.calendar": "日历",
"logs.calendar-title": "日志日历", "logs.calendar-title": "日志日历",
"logs.clear-date-filter": "清除日期筛选器",
"logs.clear-filter": "清除搜索筛选器", "logs.clear-filter": "清除搜索筛选器",
"logs.completed": "完成", "logs.completed": "完成",
"logs.exit-code": "退出代码", "logs.exit-code": "退出代码",

View File

@ -21,6 +21,8 @@ translations:
logs.exit-code: Ausführungscode logs.exit-code: Ausführungscode
logs.completed: Abgeschlossen logs.completed: Abgeschlossen
logs.clear-filter: Suchfilter löschen logs.clear-filter: Suchfilter löschen
logs.clear-date-filter: Datumsfilter löschen
logs.calendar: Kalender
logs.calendar-title: Protokoll-Kalender logs.calendar-title: Protokoll-Kalender
logs.back-to-list: Zurück zur Liste logs.back-to-list: Zurück zur Liste
diagnostics.get-support: Unterstützung erhalten diagnostics.get-support: Unterstützung erhalten

View File

@ -21,6 +21,8 @@ translations:
logs.exit-code: Exit code logs.exit-code: Exit code
logs.completed: Completed logs.completed: Completed
logs.clear-filter: Clear search filter logs.clear-filter: Clear search filter
logs.clear-date-filter: Clear date filter
logs.calendar: Calendar
logs.calendar-title: Logs Calendar logs.calendar-title: Logs Calendar
logs.back-to-list: Back to List logs.back-to-list: Back to List
diagnostics.get-support: Get support diagnostics.get-support: Get support

View File

@ -21,6 +21,8 @@ translations:
logs.exit-code: Código de salida logs.exit-code: Código de salida
logs.completed: Completado logs.completed: Completado
logs.clear-filter: Limpiar filtro de búsqueda logs.clear-filter: Limpiar filtro de búsqueda
logs.clear-date-filter: Limpiar filtro de fecha
logs.calendar: Calendario
logs.calendar-title: Calendario de Registros logs.calendar-title: Calendario de Registros
logs.back-to-list: Volver a la Lista logs.back-to-list: Volver a la Lista
diagnostics.get-support: Obtener soporte diagnostics.get-support: Obtener soporte

View File

@ -21,6 +21,8 @@ translations:
logs.exit-code: Codice di uscita logs.exit-code: Codice di uscita
logs.completed: Completato logs.completed: Completato
logs.clear-filter: Cancella filtro di ricerca logs.clear-filter: Cancella filtro di ricerca
logs.clear-date-filter: Cancella filtro data
logs.calendar: Calendario
logs.calendar-title: Calendario dei Registri logs.calendar-title: Calendario dei Registri
logs.back-to-list: Torna all'Elenco logs.back-to-list: Torna all'Elenco
diagnostics.get-support: Ottenere supporto diagnostics.get-support: Ottenere supporto

View File

@ -27,6 +27,8 @@ translations:
logs.exit-code: 退出代码 logs.exit-code: 退出代码
logs.completed: 完成 logs.completed: 完成
logs.clear-filter: 清除搜索筛选器 logs.clear-filter: 清除搜索筛选器
logs.clear-date-filter: 清除日期筛选器
logs.calendar: 日历
logs.calendar-title: 日志日历 logs.calendar-title: 日志日历
logs.back-to-list: 返回列表 logs.back-to-list: 返回列表
diagnostics.get-support: 获取支持 diagnostics.get-support: 获取支持