Include crash reports and attempt to order by age. (#1178)

* Include crash reports and attempt to order by age.

* Do all sorting within rust.

* Remove excess debug.

* Remove new once_cell dep.

* Use EPOCH as fallback instead of now()

* Fix prettier lint warnings.
This commit is contained in:
Corey Shupe
2024-05-09 13:29:19 -04:00
committed by GitHub
parent 53007465cd
commit a4f133eb46
7 changed files with 173 additions and 90 deletions

View File

@@ -22,18 +22,22 @@ export async function get_logs(profilePath, clearContents) {
}
/// Get a profile's log by filename
export async function get_logs_by_filename(profilePath, filename) {
return await invoke('plugin:logs|logs_get_logs_by_filename', { profilePath, filename })
export async function get_logs_by_filename(profilePath, logType, filename) {
return await invoke('plugin:logs|logs_get_logs_by_filename', { profilePath, logType, filename })
}
/// Get a profile's log text only by filename
export async function get_output_by_filename(profilePath, filename) {
return await invoke('plugin:logs|logs_get_output_by_filename', { profilePath, filename })
export async function get_output_by_filename(profilePath, logType, filename) {
return await invoke('plugin:logs|logs_get_output_by_filename', { profilePath, logType, filename })
}
/// Delete a profile's log by filename
export async function delete_logs_by_filename(profilePath, filename) {
return await invoke('plugin:logs|logs_delete_logs_by_filename', { profilePath, filename })
export async function delete_logs_by_filename(profilePath, logType, filename) {
return await invoke('plugin:logs|logs_delete_logs_by_filename', {
profilePath,
logType,
filename,
})
}
/// Delete all logs for a given profile
@@ -50,6 +54,7 @@ export async function delete_logs(profilePath) {
new_file: bool <- the cursor was too far, meaning that the file was likely rotated/reset. This signals to the frontend to clear the log and start over with this struct.
}
*/
// From latest.log directly
export async function get_latest_log_cursor(profilePath, cursor) {
return await invoke('plugin:logs|logs_get_latest_log_cursor', { profilePath, cursor })

View File

@@ -54,8 +54,8 @@
v-model="levelFilters[level.toLowerCase()]"
class="filter-checkbox"
>
{{ level }}</Checkbox
>
{{ level }}
</Checkbox>
</div>
</div>
<div class="log-text">
@@ -225,7 +225,7 @@ async function getLiveStdLog() {
} else {
const logCursor = await get_latest_log_cursor(
props.instance.path,
currentLiveLogCursor.value,
currentLiveLogCursor.value
).catch(handleError)
if (logCursor.new_file) {
currentLiveLog.value = ''
@@ -241,14 +241,13 @@ async function getLiveStdLog() {
async function getLogs() {
return (await get_logs(props.instance.path, true).catch(handleError))
.reverse()
.filter(
// filter out latest_stdout.log or anything without .log in it
(log) =>
log.filename !== 'latest_stdout.log' &&
log.filename !== 'latest_stdout' &&
log.stdout !== '' &&
log.filename.includes('.log'),
(log.filename.includes('.log') || log.filename.endsWith('.txt'))
)
.map((log) => {
log.name = log.filename || 'Unknown'
@@ -291,7 +290,8 @@ watch(selectedLogIndex, async (newIndex) => {
logs.value[newIndex].stdout = 'Loading...'
logs.value[newIndex].stdout = await get_output_by_filename(
props.instance.path,
logs.value[newIndex].filename,
logs.value[newIndex].log_type,
logs.value[newIndex].filename
).catch(handleError)
}
})
@@ -306,9 +306,11 @@ const deleteLog = async () => {
if (logs.value[selectedLogIndex.value] && selectedLogIndex.value !== 0) {
let deleteIndex = selectedLogIndex.value
selectedLogIndex.value = deleteIndex - 1
await delete_logs_by_filename(props.instance.path, logs.value[deleteIndex].filename).catch(
handleError,
)
await delete_logs_by_filename(
props.instance.path,
logs.value[deleteIndex].log_type,
logs.value[deleteIndex].filename
).catch(handleError)
await setLogs()
}
}
@@ -512,6 +514,7 @@ onUnmounted(() => {
justify-self: center;
}
}
.filter-group {
display: flex;
padding: 0.6rem;