|
55 | 55 | /> |
56 | 56 | </div> |
57 | 57 | <ExpansiblePanel :is-expanded="!interfaceStore.isOnPhoneScreen"> |
58 | | - <template #title>System logs</template> |
| 58 | + <template #title> |
| 59 | + <div class="flex justify-between"> |
| 60 | + <span>System logs</span> |
| 61 | + <span class="text-sm text-gray-300 cursor-pointer" @click.stop="deleteOldLogs"> |
| 62 | + <v-tooltip text="Delete old logs"> |
| 63 | + <template #activator="{ props }"> |
| 64 | + <v-icon left class="mr-2" v-bind="props">mdi-delete-sweep</v-icon> |
| 65 | + </template> |
| 66 | + </v-tooltip> |
| 67 | + </span> |
| 68 | + </div> |
| 69 | + </template> |
59 | 70 | <template #content> |
60 | 71 | <v-data-table |
61 | 72 | :items="systemLogsData" |
|
65 | 76 | class="w-full max-h-[60%] rounded-md bg-[#FFFFFF11]" |
66 | 77 | > |
67 | 78 | <template #item.actions="{ item }"> |
68 | | - <div class="text-center cursor-pointer icon-btn mdi mdi-download" @click="downloadLog(item.name)" /> |
| 79 | + <div class="flex justify-center space-x-2"> |
| 80 | + <div class="cursor-pointer icon-btn mdi mdi-download" @click="downloadLog(item.name)" /> |
| 81 | + <div class="cursor-pointer icon-btn mdi mdi-delete" @click="deleteLog(item.name)" /> |
| 82 | + </div> |
69 | 83 | </template> |
70 | 84 | </v-data-table> |
71 | 85 | </template> |
@@ -129,6 +143,33 @@ const downloadLog = async (logName: string): Promise<void> => { |
129 | 143 | const logBlob = new Blob([logParts], { type: 'application/json' }) |
130 | 144 | saveAs(logBlob, logName) |
131 | 145 | } |
| 146 | +
|
| 147 | +const deleteLog = async (logName: string): Promise<void> => { |
| 148 | + await cockpitSytemLogsDB.removeItem(logName) |
| 149 | + systemLogsData.value = systemLogsData.value.filter((log) => log.name !== logName) |
| 150 | +} |
| 151 | +
|
| 152 | +const deleteOldLogs = async (): Promise<void> => { |
| 153 | + const yesterday = new Date() |
| 154 | + yesterday.setDate(yesterday.getDate() - 1) |
| 155 | +
|
| 156 | + const logsToDelete: string[] = [] |
| 157 | + await cockpitSytemLogsDB.iterate((log: SystemLog, logName: string) => { |
| 158 | + const logDate = new Date(log.initialDate) |
| 159 | + if (logDate < yesterday) { |
| 160 | + logsToDelete.push(logName) |
| 161 | + } |
| 162 | + }) |
| 163 | +
|
| 164 | + for (const logName of logsToDelete) { |
| 165 | + await cockpitSytemLogsDB.removeItem(logName) |
| 166 | + } |
| 167 | +
|
| 168 | + systemLogsData.value = systemLogsData.value.filter((log) => { |
| 169 | + const logDate = new Date(log.initialDate) |
| 170 | + return logDate >= yesterday |
| 171 | + }) |
| 172 | +} |
132 | 173 | </script> |
133 | 174 | <style scoped> |
134 | 175 | .custom-header { |
|
0 commit comments