@fdm-monster/client-next 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarn/install-state.gz +0 -0
- package/dist/assets/MaterialIcons-Regular-BjXOXp5c.eot +0 -0
- package/dist/assets/MaterialIcons-Regular-DEUTIz1o.ttf +0 -0
- package/dist/assets/MaterialIcons-Regular-DOtZ65Va.woff2 +0 -0
- package/dist/assets/MaterialIcons-Regular-FsbMSDLx.woff +0 -0
- package/dist/assets/index-CHzfWKPO.css +5 -0
- package/dist/assets/index-CnWtkGvw.js +90 -0
- package/dist/assets/index-CnWtkGvw.js.map +1 -0
- package/dist/favicon.ico +0 -0
- package/dist/img/DavidZwart.jpg +0 -0
- package/dist/img/OIG.JYDC2RaWdz7g9.jpg +0 -0
- package/dist/img/OIG.jpg +0 -0
- package/dist/img/icons/android-chrome-256x256.png +0 -0
- package/dist/img/icons/android-chrome-384x384.png +0 -0
- package/dist/img/icons/android-chrome-512x512.png +0 -0
- package/dist/img/icons/favicon.svg +1 -0
- package/dist/img/logo.png +0 -0
- package/dist/img/logo.svg +1 -0
- package/dist/img/manifest.webmanifest +33 -0
- package/dist/img/octoprint-tentacle.svg +144 -0
- package/dist/img/thumbail_unknown.jpg +0 -0
- package/dist/img/vbanner.jpg +0 -0
- package/dist/index.html +24 -0
- package/dist/robots.txt +2 -0
- package/package.json +1 -1
- package/.all-contributorsrc +0 -57
- package/.editorconfig +0 -5
- package/.eslintrc.js +0 -126
- package/.github/FUNDING.yml +0 -3
- package/.github/workflows/release-client.yml +0 -94
- package/.github/workflows/vue-publish.yml +0 -26
- package/.prettierignore +0 -15
- package/.whitesource +0 -12
- package/renovate.json +0 -30
- package/src/App.vue +0 -60
- package/src/AppLoader.vue +0 -383
- package/src/assets/adjectives.json +0 -1468
- package/src/assets/logo.svg +0 -6
- package/src/assets/nouns.json +0 -4309
- package/src/auto-imports.d.ts +0 -139
- package/src/backend/app.service.ts +0 -39
- package/src/backend/auth.service.ts +0 -56
- package/src/backend/base.service.ts +0 -57
- package/src/backend/batch.service.ts +0 -37
- package/src/backend/camera-stream.service.ts +0 -33
- package/src/backend/custom-gcode.service.ts +0 -11
- package/src/backend/dto/octoprint-settings.dto.ts +0 -168
- package/src/backend/first-time-setup.service.ts +0 -17
- package/src/backend/floor.service.ts +0 -84
- package/src/backend/index.ts +0 -4
- package/src/backend/print-completions.service.ts +0 -11
- package/src/backend/printer-file.service.ts +0 -91
- package/src/backend/printer-group.service.ts +0 -62
- package/src/backend/printer-job.service.ts +0 -20
- package/src/backend/printer-settings.service.ts +0 -28
- package/src/backend/printers.service.ts +0 -136
- package/src/backend/server-private.service.ts +0 -55
- package/src/backend/server.api.ts +0 -132
- package/src/backend/settings.service.ts +0 -85
- package/src/backend/user.service.ts +0 -51
- package/src/components/AboutHelp/AboutView.vue +0 -164
- package/src/components/CameraGrid/CameraGridView.vue +0 -111
- package/src/components/FirstTimeSetup/FirstTimeSetupView.vue +0 -354
- package/src/components/Generic/Actions/PrinterConnectionAction.vue +0 -56
- package/src/components/Generic/Actions/PrinterCreateAction.vue +0 -22
- package/src/components/Generic/Actions/PrinterDeleteAction.vue +0 -29
- package/src/components/Generic/Actions/PrinterQuickStopAction.vue +0 -35
- package/src/components/Generic/Actions/PrinterSettingsAction.vue +0 -35
- package/src/components/Generic/Actions/PrinterUrlAction.vue +0 -24
- package/src/components/Generic/Actions/RefreshFilesAction.vue +0 -50
- package/src/components/Generic/Actions/SyncPrinterNameAction.vue +0 -36
- package/src/components/Generic/Dialogs/AddOrUpdateCameraStreamDialog.vue +0 -131
- package/src/components/Generic/Dialogs/AddOrUpdateFloorDialog.vue +0 -141
- package/src/components/Generic/Dialogs/AddOrUpdatePrinterDialog.vue +0 -303
- package/src/components/Generic/Dialogs/BaseDialog.vue +0 -81
- package/src/components/Generic/Dialogs/BatchJsonCreateDialog.vue +0 -109
- package/src/components/Generic/Dialogs/BatchReprintDialog.vue +0 -190
- package/src/components/Generic/Dialogs/PrinterChecksPanel.vue +0 -37
- package/src/components/Generic/Dialogs/PrinterControlDialog.vue +0 -202
- package/src/components/Generic/Dialogs/PrinterMaintenanceDialog.vue +0 -130
- package/src/components/Generic/Dialogs/YamlImportExportDialog.vue +0 -186
- package/src/components/Generic/Dialogs/dialog.constants.ts +0 -19
- package/src/components/Generic/FileExplorerSideNav.vue +0 -734
- package/src/components/Generic/Loaders/GridLoader.vue +0 -68
- package/src/components/Generic/NavigationDrawer.vue +0 -69
- package/src/components/Generic/PrintJobsMenu.vue +0 -148
- package/src/components/Generic/Snackbars/AppErrorSnackbar.vue +0 -64
- package/src/components/Generic/Snackbars/AppInfoSnackbar.vue +0 -63
- package/src/components/Generic/Snackbars/AppProgressSnackbar.vue +0 -158
- package/src/components/Generic/Vuetify/TooltipButton.vue +0 -47
- package/src/components/HelpOverlay/HelpOverlay.vue +0 -57
- package/src/components/Login/LoginForm.vue +0 -206
- package/src/components/Login/LoginView.spec.ts +0 -64
- package/src/components/Login/LoginView.vue +0 -65
- package/src/components/Login/Logo.vue +0 -13
- package/src/components/Login/PermissionDenied.vue +0 -109
- package/src/components/Login/RegistrationForm.vue +0 -207
- package/src/components/Login/RegistrationView.vue +0 -17
- package/src/components/Login/__snapshots__/LoginView.spec.ts.snap +0 -1051
- package/src/components/NotFound/NotFoundView.vue +0 -39
- package/src/components/PrintStatistics/PrintStatistics.vue +0 -168
- package/src/components/PrintStatistics/PrintStatisticsView.vue +0 -15
- package/src/components/PrinterGrid/HomeToolbar.vue +0 -90
- package/src/components/PrinterGrid/PrinterGrid.vue +0 -164
- package/src/components/PrinterGrid/PrinterGridTile.vue +0 -438
- package/src/components/PrinterGrid/PrinterGridView.vue +0 -210
- package/src/components/PrinterList/FileControlList.vue +0 -40
- package/src/components/PrinterList/PrinterDetails.vue +0 -91
- package/src/components/PrinterList/PrintersView.vue +0 -492
- package/src/components/Settings/AccountSettings.vue +0 -163
- package/src/components/Settings/DiagnosticsSettings.vue +0 -137
- package/src/components/Settings/EmergencyCommands.vue +0 -265
- package/src/components/Settings/FloorSettings.vue +0 -276
- package/src/components/Settings/GridSettings.vue +0 -127
- package/src/components/Settings/OctoPrintSettings.vue +0 -188
- package/src/components/Settings/ServerProtectionSettings.vue +0 -370
- package/src/components/Settings/SettingsView.vue +0 -73
- package/src/components/Settings/SoftwareUpgradeSettings.vue +0 -297
- package/src/components/Settings/UserManagementSettings.vue +0 -257
- package/src/components/TopBar.vue +0 -147
- package/src/components.d.ts +0 -70
- package/src/directives/file-upload.directive.ts +0 -117
- package/src/directives/printer-drop-position.directive.ts +0 -92
- package/src/env.d.ts +0 -6
- package/src/main.ts +0 -76
- package/src/models/batch/reprint.dto.ts +0 -79
- package/src/models/batch.model.ts +0 -11
- package/src/models/camera-streams/camera-stream.ts +0 -19
- package/src/models/floors/floor.model.ts +0 -30
- package/src/models/octoprint/connection-options.model.ts +0 -8
- package/src/models/plugins/firmware-updates/prusa-firmware-release.model.ts +0 -57
- package/src/models/print-completions/print-completions.model.ts +0 -49
- package/src/models/printers/crud/create-printer.model.ts +0 -26
- package/src/models/printers/file-upload-commands.model.ts +0 -4
- package/src/models/printers/gcode/gcode-analysis.model.ts +0 -30
- package/src/models/printers/printer-current-job.model.ts +0 -90
- package/src/models/printers/printer-file.model.ts +0 -48
- package/src/models/printers/printer.model.ts +0 -18
- package/src/models/server/client-releases.model.ts +0 -27
- package/src/models/server/export-yaml.model.ts +0 -11
- package/src/models/server/features.model.ts +0 -37
- package/src/models/server/github-rate-limit.model.ts +0 -21
- package/src/models/server/version.model.ts +0 -14
- package/src/models/settings/printer-file-clean-settings.model.ts +0 -5
- package/src/models/settings/server-settings.dto.ts +0 -19
- package/src/models/settings/settings.model.ts +0 -57
- package/src/models/socketio-messages/socketio-message.model.ts +0 -53
- package/src/models/uploads/queued-upload.model.ts +0 -12
- package/src/models/user.model.ts +0 -15
- package/src/plugins/README.md +0 -3
- package/src/plugins/index.ts +0 -17
- package/src/plugins/vuetify.ts +0 -53
- package/src/router/index.ts +0 -192
- package/src/router/route-names.ts +0 -14
- package/src/router/utils.ts +0 -23
- package/src/shared/alert.events.ts +0 -14
- package/src/shared/app.constants.ts +0 -23
- package/src/shared/auth.constants.ts +0 -34
- package/src/shared/dialog.composable.ts +0 -41
- package/src/shared/drag.constants.ts +0 -19
- package/src/shared/experimental.constants.ts +0 -1
- package/src/shared/http-client.ts +0 -162
- package/src/shared/noun-adjectives.data.ts +0 -24
- package/src/shared/printer-grid.constants.ts +0 -5
- package/src/shared/printer-state.constants.ts +0 -194
- package/src/shared/snackbar.composable.ts +0 -66
- package/src/shared/socketio.service.ts +0 -104
- package/src/store/auth.store.ts +0 -255
- package/src/store/connection.store.ts +0 -66
- package/src/store/dialog.store.ts +0 -114
- package/src/store/features.store.ts +0 -57
- package/src/store/floor.store.ts +0 -173
- package/src/store/grid.store.ts +0 -10
- package/src/store/index.ts +0 -4
- package/src/store/printer-state.store.ts +0 -246
- package/src/store/printer.store.ts +0 -236
- package/src/store/profile.store.ts +0 -25
- package/src/store/settings.store.ts +0 -64
- package/src/store/test-printer.store.ts +0 -70
- package/src/store/uploads.store.ts +0 -75
- package/src/styles/README.md +0 -3
- package/src/styles/settings.scss +0 -10
- package/src/types/global.d.ts +0 -15
- package/src/utils/array.utils.ts +0 -15
- package/src/utils/date.utils.ts +0 -5
- package/src/utils/download-file.util.ts +0 -25
- package/src/utils/error.utils.ts +0 -3
- package/src/utils/file-size.util.ts +0 -11
- package/src/utils/id.type.ts +0 -1
- package/src/utils/sentry.util.ts +0 -8
- package/src/utils/test.util.ts +0 -30
- package/src/utils/time.utils.ts +0 -2
- package/src/utils/uploads-state.utils.ts +0 -58
- package/src/utils/validation.utils.ts +0 -14
- package/src/vite-env.d.ts +0 -7
- package/test/setup-axios-mock.ts +0 -15
- /package/{src/assets/logo.png → dist/assets/logo-CJVdjy51.png} +0 -0
- /package/{src/assets → dist/img/icons}/android-chrome-192x192.png +0 -0
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-card>
|
|
3
|
-
<v-toolbar color="primary">
|
|
4
|
-
<v-avatar>
|
|
5
|
-
<v-icon>account_circle</v-icon>
|
|
6
|
-
</v-avatar>
|
|
7
|
-
<v-toolbar-title> Account Settings </v-toolbar-title>
|
|
8
|
-
</v-toolbar>
|
|
9
|
-
<v-list
|
|
10
|
-
subheader
|
|
11
|
-
lines="three"
|
|
12
|
-
>
|
|
13
|
-
<v-list-item>
|
|
14
|
-
<v-list-item-content v-if="!loginEnabled">
|
|
15
|
-
<v-alert color="primary">
|
|
16
|
-
Login is currently disabled. To adjust your username and password,
|
|
17
|
-
please enable that setting at the Server Protection settings page.
|
|
18
|
-
Then log in and visit this page.
|
|
19
|
-
</v-alert>
|
|
20
|
-
</v-list-item-content>
|
|
21
|
-
</v-list-item>
|
|
22
|
-
</v-list>
|
|
23
|
-
<v-list
|
|
24
|
-
subheader
|
|
25
|
-
lines="three"
|
|
26
|
-
>
|
|
27
|
-
<v-list-item>
|
|
28
|
-
<v-list-item-title> Username </v-list-item-title>
|
|
29
|
-
<v-list-item-action-text>
|
|
30
|
-
<v-text-field
|
|
31
|
-
v-model="formData.username"
|
|
32
|
-
:disabled="!loginEnabled"
|
|
33
|
-
label="Fill in your username"
|
|
34
|
-
/>
|
|
35
|
-
</v-list-item-action-text>
|
|
36
|
-
</v-list-item>
|
|
37
|
-
<div class="ml-4 mb-4">
|
|
38
|
-
<v-btn
|
|
39
|
-
:disabled="!loginEnabled"
|
|
40
|
-
color="primary"
|
|
41
|
-
@click="changeUsername()"
|
|
42
|
-
>
|
|
43
|
-
Change username
|
|
44
|
-
</v-btn>
|
|
45
|
-
</div>
|
|
46
|
-
<v-divider />
|
|
47
|
-
<br />
|
|
48
|
-
|
|
49
|
-
<v-list-item>
|
|
50
|
-
<v-list-item-title> Old Password </v-list-item-title>
|
|
51
|
-
<v-list-item-action-text>
|
|
52
|
-
<v-text-field
|
|
53
|
-
v-model="formData.oldPassword"
|
|
54
|
-
:disabled="!loginEnabled"
|
|
55
|
-
placeholder="Old password"
|
|
56
|
-
type="password"
|
|
57
|
-
/>
|
|
58
|
-
</v-list-item-action-text>
|
|
59
|
-
</v-list-item>
|
|
60
|
-
<v-list-item>
|
|
61
|
-
<v-list-item-title> New Password </v-list-item-title>
|
|
62
|
-
<v-list-item-action-text>
|
|
63
|
-
<v-text-field
|
|
64
|
-
v-model="formData.newPassword"
|
|
65
|
-
:disabled="!loginEnabled"
|
|
66
|
-
placeholder="New password"
|
|
67
|
-
type="password"
|
|
68
|
-
/>
|
|
69
|
-
</v-list-item-action-text>
|
|
70
|
-
</v-list-item>
|
|
71
|
-
<v-list-item>
|
|
72
|
-
<v-list-item-title> Repeat New Password </v-list-item-title>
|
|
73
|
-
<v-list-item-action-text>
|
|
74
|
-
<v-text-field
|
|
75
|
-
v-model="formData.repeatPassword"
|
|
76
|
-
:disabled="!loginEnabled"
|
|
77
|
-
placeholder="Repeat new password"
|
|
78
|
-
type="password"
|
|
79
|
-
/>
|
|
80
|
-
</v-list-item-action-text>
|
|
81
|
-
</v-list-item>
|
|
82
|
-
</v-list>
|
|
83
|
-
<div class="ml-4 mb-4">
|
|
84
|
-
<v-btn
|
|
85
|
-
:disabled="!loginEnabled"
|
|
86
|
-
color="primary"
|
|
87
|
-
@click="changePassword()"
|
|
88
|
-
>
|
|
89
|
-
Change password
|
|
90
|
-
</v-btn>
|
|
91
|
-
</div>
|
|
92
|
-
<v-divider />
|
|
93
|
-
</v-card>
|
|
94
|
-
</template>
|
|
95
|
-
|
|
96
|
-
<script lang="ts" setup>
|
|
97
|
-
import { useProfileStore } from '@/store/profile.store'
|
|
98
|
-
import { onMounted, ref } from 'vue'
|
|
99
|
-
import { useRouter } from 'vue-router'
|
|
100
|
-
import { UserService } from '@/backend/user.service'
|
|
101
|
-
import { useSnackbar } from '@/shared/snackbar.composable'
|
|
102
|
-
import { useAuthStore } from '@/store/auth.store'
|
|
103
|
-
import { routeToLogin } from '@/router/utils'
|
|
104
|
-
import { useSettingsStore } from '@/store/settings.store'
|
|
105
|
-
|
|
106
|
-
const settingsStore = useSettingsStore()
|
|
107
|
-
const profileStore = useProfileStore()
|
|
108
|
-
const authStore = useAuthStore()
|
|
109
|
-
const router = useRouter()
|
|
110
|
-
const snackbar = useSnackbar()
|
|
111
|
-
const loginEnabled = ref<boolean>()
|
|
112
|
-
const userId = ref<string>('')
|
|
113
|
-
const formData = ref<{
|
|
114
|
-
username: string
|
|
115
|
-
oldPassword: string
|
|
116
|
-
newPassword: string
|
|
117
|
-
repeatPassword: string
|
|
118
|
-
}>({ username: '', newPassword: '', oldPassword: '', repeatPassword: '' })
|
|
119
|
-
|
|
120
|
-
onMounted(async () => {
|
|
121
|
-
await settingsStore.loadSettings()
|
|
122
|
-
if (!settingsStore.settings?.server.loginRequired) {
|
|
123
|
-
loginEnabled.value = settingsStore.settings?.server.loginRequired
|
|
124
|
-
}
|
|
125
|
-
await profileStore.getProfile()
|
|
126
|
-
formData.value.username = profileStore.username as string
|
|
127
|
-
userId.value = profileStore.userId as string
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
async function changeUsername() {
|
|
131
|
-
if (!userId.value?.length) {
|
|
132
|
-
snackbar.openErrorMessage({ title: 'User not loaded' })
|
|
133
|
-
return
|
|
134
|
-
}
|
|
135
|
-
await UserService.changeUsername(userId.value, formData.value.username)
|
|
136
|
-
|
|
137
|
-
await profileStore.getProfile()
|
|
138
|
-
formData.value.username = profileStore.username as string
|
|
139
|
-
snackbar.openInfoMessage({ title: 'Username changed' })
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
async function changePassword() {
|
|
143
|
-
if (!userId.value?.length) {
|
|
144
|
-
snackbar.openErrorMessage({ title: 'User not loaded' })
|
|
145
|
-
return
|
|
146
|
-
}
|
|
147
|
-
if (formData.value.newPassword !== formData.value.repeatPassword) {
|
|
148
|
-
snackbar.openErrorMessage({ title: 'Passwords do not match' })
|
|
149
|
-
return
|
|
150
|
-
}
|
|
151
|
-
await UserService.changePassword(
|
|
152
|
-
userId.value,
|
|
153
|
-
formData.value.oldPassword,
|
|
154
|
-
formData.value.newPassword
|
|
155
|
-
)
|
|
156
|
-
formData.value.oldPassword = ''
|
|
157
|
-
formData.value.newPassword = ''
|
|
158
|
-
formData.value.repeatPassword = ''
|
|
159
|
-
snackbar.openInfoMessage({ title: 'Password changed' })
|
|
160
|
-
await authStore.logout(true)
|
|
161
|
-
await routeToLogin(router)
|
|
162
|
-
}
|
|
163
|
-
</script>
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-card>
|
|
3
|
-
<v-toolbar color="primary">
|
|
4
|
-
<v-avatar>
|
|
5
|
-
<v-icon>bug_report</v-icon>
|
|
6
|
-
</v-avatar>
|
|
7
|
-
<v-toolbar-title> Diagnostics </v-toolbar-title>
|
|
8
|
-
</v-toolbar>
|
|
9
|
-
<v-list
|
|
10
|
-
subheader
|
|
11
|
-
lines="three"
|
|
12
|
-
>
|
|
13
|
-
<v-list-subheader>
|
|
14
|
-
Diagnostics to provide bug reports to the developers of this software
|
|
15
|
-
</v-list-subheader>
|
|
16
|
-
|
|
17
|
-
<v-list-item v-if="hasAnonymousDiagnosticsToggleFeature">
|
|
18
|
-
<v-list-item-title>
|
|
19
|
-
Remote Sentry diagnostic reports:
|
|
20
|
-
</v-list-item-title>
|
|
21
|
-
<v-list-item-subtitle>
|
|
22
|
-
<v-checkbox
|
|
23
|
-
v-model="sentryDiagnosticsEnabled"
|
|
24
|
-
label="Enable remote Sentry diagnostic reports"
|
|
25
|
-
/>
|
|
26
|
-
</v-list-item-subtitle>
|
|
27
|
-
<v-list-item-subtitle>
|
|
28
|
-
<v-btn
|
|
29
|
-
color="primary"
|
|
30
|
-
@click="saveSentryDiagnosticsSettings()"
|
|
31
|
-
>
|
|
32
|
-
<v-icon class="pr-2">save</v-icon>
|
|
33
|
-
Save
|
|
34
|
-
</v-btn>
|
|
35
|
-
<v-btn
|
|
36
|
-
color="secondary"
|
|
37
|
-
@click="sendTestSentryException()"
|
|
38
|
-
>
|
|
39
|
-
<v-icon class="pr-2">bug_report</v-icon>
|
|
40
|
-
Test Error
|
|
41
|
-
</v-btn>
|
|
42
|
-
</v-list-item-subtitle>
|
|
43
|
-
</v-list-item>
|
|
44
|
-
<v-divider />
|
|
45
|
-
<v-list-item v-if="hasLogDumpFeature">
|
|
46
|
-
<v-list-item-title> Logs Dump </v-list-item-title>
|
|
47
|
-
<v-list-item-subtitle>
|
|
48
|
-
Download a .zip file containing all logs from the server
|
|
49
|
-
</v-list-item-subtitle>
|
|
50
|
-
<v-list-item-subtitle>
|
|
51
|
-
<br />
|
|
52
|
-
<v-btn
|
|
53
|
-
color="primary"
|
|
54
|
-
@click="downloadLogDump()"
|
|
55
|
-
>
|
|
56
|
-
<v-icon>download</v-icon>
|
|
57
|
-
Download Log Files (.zip)
|
|
58
|
-
</v-btn>
|
|
59
|
-
</v-list-item-subtitle>
|
|
60
|
-
</v-list-item>
|
|
61
|
-
<v-list-item v-if="hasLogDumpFeature">
|
|
62
|
-
<v-list-item-title> Clear log files </v-list-item-title>
|
|
63
|
-
<v-list-item-subtitle>
|
|
64
|
-
<br />
|
|
65
|
-
<v-btn
|
|
66
|
-
color="default"
|
|
67
|
-
@click="clearOldLogFiles()"
|
|
68
|
-
>
|
|
69
|
-
<v-icon>download</v-icon>
|
|
70
|
-
Clear log files older than a week
|
|
71
|
-
</v-btn>
|
|
72
|
-
</v-list-item-subtitle>
|
|
73
|
-
</v-list-item>
|
|
74
|
-
</v-list>
|
|
75
|
-
</v-card>
|
|
76
|
-
</template>
|
|
77
|
-
|
|
78
|
-
<script lang="ts" setup>
|
|
79
|
-
import { onMounted, ref } from 'vue'
|
|
80
|
-
import { AppService } from '@/backend/app.service'
|
|
81
|
-
import { useSettingsStore } from '@/store/settings.store'
|
|
82
|
-
import { SettingsService } from '@/backend'
|
|
83
|
-
import { setSentryEnabled } from '@/utils/sentry.util'
|
|
84
|
-
import { ServerPrivateService } from '@/backend/server-private.service'
|
|
85
|
-
import { useSnackbar } from '@/shared/snackbar.composable'
|
|
86
|
-
import { captureException } from '@sentry/vue'
|
|
87
|
-
|
|
88
|
-
const snackBar = useSnackbar()
|
|
89
|
-
const settingsStore = useSettingsStore()
|
|
90
|
-
const hasAnonymousDiagnosticsToggleFeature = ref(false)
|
|
91
|
-
const hasLogDumpFeature = ref(false)
|
|
92
|
-
const hasLogClearFeature = ref(false)
|
|
93
|
-
const sentryDiagnosticsEnabled = ref(false)
|
|
94
|
-
onMounted(async () => {
|
|
95
|
-
const features = await AppService.getFeatures()
|
|
96
|
-
hasAnonymousDiagnosticsToggleFeature.value =
|
|
97
|
-
features.anonymousDiagnosticsToggle?.available || false
|
|
98
|
-
hasLogDumpFeature.value = features.logDumpZip?.available || false
|
|
99
|
-
hasLogClearFeature.value = features.clearLogFiles?.available || false
|
|
100
|
-
|
|
101
|
-
await settingsStore.loadSettings()
|
|
102
|
-
sentryDiagnosticsEnabled.value =
|
|
103
|
-
settingsStore.serverSettings?.sentryDiagnosticsEnabled || false
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
async function saveSentryDiagnosticsSettings() {
|
|
107
|
-
await SettingsService.setSentryDiagnosticsSettings(
|
|
108
|
-
sentryDiagnosticsEnabled.value
|
|
109
|
-
)
|
|
110
|
-
setSentryEnabled(sentryDiagnosticsEnabled.value)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async function sendTestSentryException() {
|
|
114
|
-
const text = `Test Error ${Date.now()} Sentry enabled: ${sentryDiagnosticsEnabled.value}`
|
|
115
|
-
try {
|
|
116
|
-
throw new Error(text)
|
|
117
|
-
} catch (e) {
|
|
118
|
-
captureException(e)
|
|
119
|
-
snackBar.openInfoMessage({
|
|
120
|
-
title: 'Test report was sent',
|
|
121
|
-
subtitle: `Content: ${text}`
|
|
122
|
-
})
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
async function downloadLogDump() {
|
|
127
|
-
await ServerPrivateService.downloadLogDump()
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
async function clearOldLogFiles() {
|
|
131
|
-
await ServerPrivateService.clearLogFilesOlderThanWeek()
|
|
132
|
-
snackBar.openInfoMessage({
|
|
133
|
-
title: 'Action success',
|
|
134
|
-
subtitle: 'Log files older than a week have been deleted'
|
|
135
|
-
})
|
|
136
|
-
}
|
|
137
|
-
</script>
|
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-card>
|
|
3
|
-
<v-toolbar color="primary">
|
|
4
|
-
<v-avatar>
|
|
5
|
-
<v-icon>settings</v-icon>
|
|
6
|
-
</v-avatar>
|
|
7
|
-
<v-toolbar-title> Emergency Commands </v-toolbar-title>
|
|
8
|
-
</v-toolbar>
|
|
9
|
-
<v-list
|
|
10
|
-
subheader
|
|
11
|
-
lines="three"
|
|
12
|
-
>
|
|
13
|
-
<v-list-subheader>
|
|
14
|
-
Emergency Commands to rectify problematic situations
|
|
15
|
-
</v-list-subheader>
|
|
16
|
-
|
|
17
|
-
<v-list-item>
|
|
18
|
-
<v-list-item-title> Server commands </v-list-item-title>
|
|
19
|
-
<v-list-item-subtitle>
|
|
20
|
-
Restart the server
|
|
21
|
-
<br />
|
|
22
|
-
<v-btn
|
|
23
|
-
color="primary"
|
|
24
|
-
disabled
|
|
25
|
-
@click="restartServer()"
|
|
26
|
-
>
|
|
27
|
-
Restart server (does not work yet)
|
|
28
|
-
</v-btn>
|
|
29
|
-
</v-list-item-subtitle>
|
|
30
|
-
</v-list-item>
|
|
31
|
-
|
|
32
|
-
<v-list-item>
|
|
33
|
-
<v-list-item-title> Batch disabling </v-list-item-title>
|
|
34
|
-
<v-list-item-subtitle>
|
|
35
|
-
Disable all printers in batch (will not affect print)
|
|
36
|
-
<br />
|
|
37
|
-
<v-btn
|
|
38
|
-
color="primary"
|
|
39
|
-
@click="batchToggleEnabled(false)"
|
|
40
|
-
>
|
|
41
|
-
Batch disable
|
|
42
|
-
</v-btn>
|
|
43
|
-
</v-list-item-subtitle>
|
|
44
|
-
</v-list-item>
|
|
45
|
-
|
|
46
|
-
<v-list-item>
|
|
47
|
-
<v-list-item-title> Batch enabling </v-list-item-title>
|
|
48
|
-
<v-list-item-subtitle>
|
|
49
|
-
Enabling all printers in batch (will not affect print and it will skip
|
|
50
|
-
printers in maintenance mode)
|
|
51
|
-
<br />
|
|
52
|
-
<v-btn
|
|
53
|
-
color="primary"
|
|
54
|
-
@click="batchToggleEnabled(true)"
|
|
55
|
-
>
|
|
56
|
-
Batch enable
|
|
57
|
-
</v-btn>
|
|
58
|
-
</v-list-item-subtitle>
|
|
59
|
-
</v-list-item>
|
|
60
|
-
|
|
61
|
-
<v-list-item>
|
|
62
|
-
<v-list-item-title> Batch USB connect </v-list-item-title>
|
|
63
|
-
<v-list-item-subtitle>
|
|
64
|
-
Connect all USB devices
|
|
65
|
-
<br />
|
|
66
|
-
<v-btn
|
|
67
|
-
:disabled="!hasConnectUsbFeature"
|
|
68
|
-
color="primary"
|
|
69
|
-
@click="connectUSBs()"
|
|
70
|
-
>
|
|
71
|
-
<v-icon class="mr-2">usb</v-icon>
|
|
72
|
-
Connect USBs
|
|
73
|
-
</v-btn>
|
|
74
|
-
<v-alert v-if="!hasConnectUsbFeature">
|
|
75
|
-
<v-icon class="mr-2">warning</v-icon>
|
|
76
|
-
This feature is not available, please update the FDM Monster server
|
|
77
|
-
</v-alert>
|
|
78
|
-
</v-list-item-subtitle>
|
|
79
|
-
<v-list-item-subtitle class="mt-2">
|
|
80
|
-
Connect all Sockets
|
|
81
|
-
<br />
|
|
82
|
-
<v-btn
|
|
83
|
-
:disabled="!hasConnectSocketFeature"
|
|
84
|
-
color="primary"
|
|
85
|
-
@click="connectSockets()"
|
|
86
|
-
>
|
|
87
|
-
<v-icon class="mr-2">hub</v-icon>
|
|
88
|
-
Connect Sockets
|
|
89
|
-
</v-btn>
|
|
90
|
-
</v-list-item-subtitle>
|
|
91
|
-
<v-alert v-if="!hasConnectSocketFeature">
|
|
92
|
-
<v-icon class="mr-2">warning</v-icon>
|
|
93
|
-
This feature is not available, please update the FDM Monster server
|
|
94
|
-
</v-alert>
|
|
95
|
-
</v-list-item>
|
|
96
|
-
</v-list>
|
|
97
|
-
|
|
98
|
-
<div class="ma-3">
|
|
99
|
-
<v-alert> Test all OctoPrint response times </v-alert>
|
|
100
|
-
<div class="ml-6">
|
|
101
|
-
<v-btn
|
|
102
|
-
color="primary"
|
|
103
|
-
@click="clickFetchNameState()"
|
|
104
|
-
>
|
|
105
|
-
Measure response times
|
|
106
|
-
</v-btn>
|
|
107
|
-
</div>
|
|
108
|
-
<div class="ml-7 mt-3">
|
|
109
|
-
<span v-if="namesFetched"> Response times: </span>
|
|
110
|
-
<Bar
|
|
111
|
-
v-if="namesFetched"
|
|
112
|
-
:data="chartConfig"
|
|
113
|
-
:options="chartOptions"
|
|
114
|
-
height="40"
|
|
115
|
-
/>
|
|
116
|
-
<span v-else>
|
|
117
|
-
A graph will be shown, presenting the times in milliseconds (ms)
|
|
118
|
-
</span>
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
</v-card>
|
|
122
|
-
</template>
|
|
123
|
-
|
|
124
|
-
<script lang="ts" setup>
|
|
125
|
-
import { computed, ref } from 'vue'
|
|
126
|
-
import { ServerPrivateService } from '@/backend/server-private.service'
|
|
127
|
-
import { BatchService } from '@/backend/batch.service'
|
|
128
|
-
import { usePrinterStore } from '@/store/printer.store'
|
|
129
|
-
import { useFeatureStore } from '@/store/features.store'
|
|
130
|
-
import {
|
|
131
|
-
BarElement,
|
|
132
|
-
CategoryScale,
|
|
133
|
-
Chart as ChartJS,
|
|
134
|
-
type ChartData,
|
|
135
|
-
ChartOptions,
|
|
136
|
-
Legend,
|
|
137
|
-
LinearScale,
|
|
138
|
-
Title,
|
|
139
|
-
Tooltip
|
|
140
|
-
} from 'chart.js'
|
|
141
|
-
import { Bar } from 'vue-chartjs'
|
|
142
|
-
import { IdType } from '@/utils/id.type'
|
|
143
|
-
import { OctoPrintSettingsDto } from '@/backend/dto/octoprint-settings.dto'
|
|
144
|
-
import { sleep } from '@/utils/time.utils'
|
|
145
|
-
|
|
146
|
-
ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend)
|
|
147
|
-
|
|
148
|
-
export type BatchOctoPrintSettingsDto = {
|
|
149
|
-
success: boolean
|
|
150
|
-
printerId: IdType
|
|
151
|
-
time: number
|
|
152
|
-
value?: OctoPrintSettingsDto
|
|
153
|
-
error?: string
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const printerStore = usePrinterStore()
|
|
157
|
-
const featureStore = useFeatureStore()
|
|
158
|
-
|
|
159
|
-
const namesFetched = ref(false)
|
|
160
|
-
const fetchedNames = ref<string[]>([])
|
|
161
|
-
|
|
162
|
-
const failedPrinters = ref<any[]>([])
|
|
163
|
-
const responseTimesAvg = ref(NaN)
|
|
164
|
-
const responseTimesMax = ref(NaN)
|
|
165
|
-
const responseTimesMin = ref(NaN)
|
|
166
|
-
const chartConfig = ref<ChartData<'bar', number[], string>>({
|
|
167
|
-
labels: [] as string[],
|
|
168
|
-
datasets: [
|
|
169
|
-
{
|
|
170
|
-
label: 'OctoPrint Settings response times (ms)',
|
|
171
|
-
data: [] as number[],
|
|
172
|
-
borderColor: '#FF6384',
|
|
173
|
-
backgroundColor: '#ffffff'
|
|
174
|
-
}
|
|
175
|
-
]
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
const chartOptions: ChartOptions<'bar'> = {
|
|
179
|
-
color: 'white',
|
|
180
|
-
plugins: {
|
|
181
|
-
title: {
|
|
182
|
-
color: 'red',
|
|
183
|
-
text: 'Response times (ms)',
|
|
184
|
-
display: true
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
responsive: true
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
const hasConnectUsbFeature = computed(() => {
|
|
191
|
-
return featureStore.hasFeature('batchConnectUsbCalls')
|
|
192
|
-
})
|
|
193
|
-
const hasConnectSocketFeature = computed(() => {
|
|
194
|
-
return featureStore.hasFeature('batchConnectSocketCalls')
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
async function clickFetchNameState() {
|
|
198
|
-
const printerIds = printerStore.printers.map((p) => p.id)
|
|
199
|
-
const printerSettingsBatch = (await BatchService.batchSettingsGet(
|
|
200
|
-
printerIds
|
|
201
|
-
)) as BatchOctoPrintSettingsDto[]
|
|
202
|
-
const names = printerSettingsBatch.map(
|
|
203
|
-
(s) => s.value?.appearance?.name || 'ERROR'
|
|
204
|
-
)
|
|
205
|
-
failedPrinters.value = printerSettingsBatch
|
|
206
|
-
.filter((nb) => !nb.success)
|
|
207
|
-
.map((e) => ({
|
|
208
|
-
message: e.error
|
|
209
|
-
}))
|
|
210
|
-
|
|
211
|
-
const times = printerSettingsBatch.map((n) => n.time)
|
|
212
|
-
const labels = printerSettingsBatch.map(
|
|
213
|
-
(n) => n.value?.appearance?.name ?? ''
|
|
214
|
-
)
|
|
215
|
-
responseTimesAvg.value =
|
|
216
|
-
times.reduce((a: number, b: number) => a + b, 0) / times.length
|
|
217
|
-
responseTimesMin.value = Math.min(...times)
|
|
218
|
-
responseTimesMax.value = Math.max(...times)
|
|
219
|
-
chartConfig.value = {
|
|
220
|
-
labels,
|
|
221
|
-
datasets: [
|
|
222
|
-
{
|
|
223
|
-
label: 'OctoPrint Settings response times (ms)',
|
|
224
|
-
data: times,
|
|
225
|
-
borderColor: '#FF6384',
|
|
226
|
-
backgroundColor: '#ffffff'
|
|
227
|
-
}
|
|
228
|
-
]
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
await sleep(500)
|
|
232
|
-
|
|
233
|
-
namesFetched.value = true
|
|
234
|
-
fetchedNames.value = names
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
async function restartServer() {
|
|
238
|
-
await ServerPrivateService.restartServer()
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
async function batchToggleEnabled(enabled: boolean) {
|
|
242
|
-
if (!confirm('Are you sure you want to toggle all printers?')) {
|
|
243
|
-
return
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const printerIds = printerStore.printers.map((p) => p.id)
|
|
247
|
-
await BatchService.batchToggleEnabled(printerIds, enabled)
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
async function connectUSBs() {
|
|
251
|
-
if (!confirm('Are you sure you want to connect all USBs?')) {
|
|
252
|
-
return
|
|
253
|
-
}
|
|
254
|
-
const printerIds = printerStore.printers.map((p) => p.id)
|
|
255
|
-
await BatchService.batchConnectUsb(printerIds)
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
async function connectSockets() {
|
|
259
|
-
if (!confirm('Are you sure you want to connect all sockets?')) {
|
|
260
|
-
return
|
|
261
|
-
}
|
|
262
|
-
const printerIds = printerStore.printers.map((p) => p.id)
|
|
263
|
-
await BatchService.batchConnectSocket(printerIds)
|
|
264
|
-
}
|
|
265
|
-
</script>
|