Skip to content

Commit

Permalink
feat: log rollover function for klipper and moonraker (#1243)
Browse files Browse the repository at this point in the history
  • Loading branch information
meteyou authored Jan 29, 2023
1 parent 051b896 commit b6fe84f
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 14 deletions.
117 changes: 105 additions & 12 deletions src/components/panels/Machine/LogfilesPanel.vue
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
<template>
<panel
:title="$t('Machine.LogfilesPanel.Logfiles').toString()"
:icon="mdiFileDocumentEdit"
card-class="machine-logfiles-panel"
:collapsible="true">
<v-card-text :class="'text-center text-lg-left py-0'">
<v-container pb-0 px-0>
<div>
<panel
:title="$t('Machine.LogfilesPanel.Logfiles').toString()"
:icon="mdiFileDocumentEdit"
card-class="machine-logfiles-panel"
:collapsible="true">
<template #buttons>
<v-tooltip top>
<template #activator="{ on, attrs }">
<v-btn
icon
tile
color="primary"
:ripple="true"
:loading="loadings.includes('loadingBtnRolloverLogs')"
:disabled="['printing', 'paused'].includes(printer_state)"
v-bind="attrs"
v-on="on"
@click="showRolloverDialog = true">
<v-icon>{{ mdiFileSyncOutline }}</v-icon>
</v-btn>
</template>
<span>{{ $t('Machine.LogfilesPanel.Rollover') }}</span>
</v-tooltip>
</template>
<v-card-text :class="'text-center text-lg-left'">
<v-row>
<v-col :class="'col-12' + (klipperState !== 'ready' ? 'col-md-6' : 'col-md-12') + ''">
<v-btn
Expand Down Expand Up @@ -53,23 +72,74 @@
</v-btn>
</v-col>
</v-row>
</v-container>
</v-card-text>
</panel>
</v-card-text>
</panel>
<v-dialog :value="showRolloverDialog" persistent width="400" :fullscreen="isMobile">
<panel
:title="$t('Machine.LogfilesPanel.Rollover').toString()"
card-class="machine_rollover_logfiles-dialog"
:icon="mdiFileSyncOutline"
:margin-bottom="false">
<template #buttons>
<v-btn icon tile @click="showRolloverDialog = false">
<v-icon>{{ mdiCloseThick }}</v-icon>
</v-btn>
</template>
<v-card-text>
<v-row>
<v-col>
<p class="mb-0">{{ $t('Machine.LogfilesPanel.RolloverDescription') }}</p>
</v-col>
</v-row>
<v-row class="mt-0">
<v-col>
<v-checkbox
v-for="log in rolloverLogfiles"
:key="log"
v-model="selectedRolloverLogs"
:label="capitalize(log)"
:value="log"
hide-details
class="mt-0" />
</v-col>
</v-row>
</v-card-text>
<v-card-actions>
<v-spacer />
<v-btn text @click="btnRolloverLogs">
{{ $t('Machine.LogfilesPanel.Cancel') }}
</v-btn>
<v-btn color="primary" text @click="btnRolloverLogs">
{{ $t('Machine.LogfilesPanel.Accept') }}
</v-btn>
</v-card-actions>
</panel>
</v-dialog>
</div>
</template>

<script lang="ts">
import { Component, Mixins } from 'vue-property-decorator'
import { Component, Mixins, Watch } from 'vue-property-decorator'
import BaseMixin from '../../mixins/base'
import Panel from '@/components/ui/Panel.vue'
import { FileStateFile } from '@/store/files/types'
import { mdiDownload, mdiFileDocumentEdit } from '@mdi/js'
import { mdiDownload, mdiFileDocumentEdit, mdiCloseThick, mdiFileSyncOutline } from '@mdi/js'
import { rolloverLogfiles } from '@/store/variables'
import { capitalize } from '@/plugins/helpers'
@Component({
components: { Panel },
})
export default class LogfilesPanel extends Mixins(BaseMixin) {
mdiFileDocumentEdit = mdiFileDocumentEdit
mdiDownload = mdiDownload
mdiCloseThick = mdiCloseThick
mdiFileSyncOutline = mdiFileSyncOutline
rolloverLogfiles = rolloverLogfiles
capitalize = capitalize
private showRolloverDialog = false
private selectedRolloverLogs: string[] = []
get logfiles() {
return this.$store.getters['files/getDirectory']('logs')?.childrens ?? []
Expand All @@ -85,6 +155,10 @@ export default class LogfilesPanel extends Mixins(BaseMixin) {
return sonarLog?.size > 0
}
get loadingRolloverLogs() {
return this.loadings.filter((log) => log.startsWith('rolloverLog_')).length > 0
}
downloadLog(event: any) {
event.preventDefault()
let href = ''
Expand All @@ -93,5 +167,24 @@ export default class LogfilesPanel extends Mixins(BaseMixin) {
window.open(href)
}
btnRolloverLogs() {
if (this.selectedRolloverLogs.length === 0) return
this.selectedRolloverLogs.forEach((name) => {
this.$socket.emit(
'server.logs.rollover',
{ application: name },
{ loading: 'rolloverLog_' + name, action: 'files/rolloverLog' }
)
})
this.selectedRolloverLogs = []
}
@Watch('loadingRolloverLogs')
loadingRolloverLogsChanged(newVal: boolean) {
if (newVal) this.showRolloverDialog = false
}
}
</script>
8 changes: 7 additions & 1 deletion src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,13 @@
"TRIGGERED": "TRIGGERED"
},
"LogfilesPanel": {
"Logfiles": "Log Files"
"Accept": "accept",
"Cancel": "cancel",
"Logfiles": "Log Files",
"Rollover": "Rollover Logs",
"RolloverDescription": "Please select which logs should be reset:",
"RolloverToastSuccessful": "Log for \"{name}\"was successfully reset.",
"RolloverToastFailed": "Rollover log for \"{name}\": {message}"
},
"SystemPanel": {
"Constants": "Constants",
Expand Down
16 changes: 16 additions & 0 deletions src/store/files/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -334,4 +334,20 @@ export const actions: ActionTree<FileState, RootState> = {
uploadSetMaxNumber({ commit }, payload) {
commit('uploadSetMaxNumber', payload)
},

rolloverLog(_, payload) {
payload.rolled_over.forEach((name: string) => {
Vue.$toast.success(<string>i18n.t('Machine.LogfilesPanel.RolloverToastSuccessful', { name }))
})

Object.keys(payload.failed).forEach((name: string) => {
const message = payload.failed[name]

Vue.$toast.error(<string>i18n.t('Machine.LogfilesPanel.RolloverToastFailed', { name, message }))
})

setTimeout(() => {
Vue.$socket.emit('server.files.get_directory', { path: 'logs' }, { action: 'files/getDirectory' })
}, 500)
},
}
7 changes: 6 additions & 1 deletion src/store/variables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export const defaultLogoColor = '#D41216'
export const defaultPrimaryColor = '#2196f3'

export const minKlipperVersion = 'v0.10.0-271'
export const minMoonrakerVersion = 'v0.7.1-486'
export const minMoonrakerVersion = 'v0.7.1-797'

export const colorArray = ['#F44336', '#8e379d', '#03DAC5', '#3F51B5', '#ffde03', '#009688', '#E91E63']

Expand Down Expand Up @@ -117,3 +117,8 @@ export const hiddenDirectories = ['.git']
* https://www.klipper3d.org/Config_Reference.html
*/
export const availableKlipperConfigReferenceTranslations = ['it', 'hu', 'zh']

/*
* List of all rollover logfiles
*/
export const rolloverLogfiles = ['klipper', 'moonraker']

0 comments on commit b6fe84f

Please sign in to comment.