33} from 'vuex-module-decorators'
44
55import store from '@/store'
6- import { DiskUsageQuery , DiskUsageResponse } from '@/types/disk'
6+ import { DiskSpeedResult , DiskUsageQuery , DiskUsageResponse } from '@/types/disk'
77import back_axios , { isBackendOffline } from '@/utils/api'
88
99@Module ( { dynamic : true , store, name : 'disk' } )
@@ -18,6 +18,12 @@ class DiskStore extends VuexModule {
1818
1919 error : string | null = null
2020
21+ speedResult : DiskSpeedResult | null = null
22+
23+ speedTesting = false
24+
25+ speedError : string | null = null
26+
2127 @Mutation
2228 setUsage ( value : DiskUsageResponse | null ) : void {
2329 this . usage = value
@@ -38,6 +44,21 @@ class DiskStore extends VuexModule {
3844 this . error = message
3945 }
4046
47+ @Mutation
48+ setSpeedResult ( value : DiskSpeedResult | null ) : void {
49+ this . speedResult = value
50+ }
51+
52+ @Mutation
53+ setSpeedTesting ( value : boolean ) : void {
54+ this . speedTesting = value
55+ }
56+
57+ @Mutation
58+ setSpeedError ( message : string | null ) : void {
59+ this . speedError = message
60+ }
61+
4162 @Action
4263 async fetchUsage ( query : DiskUsageQuery ) : Promise < void > {
4364 this . setLoading ( true )
@@ -109,6 +130,34 @@ class DiskStore extends VuexModule {
109130 this . setDeleting ( false )
110131 return { succeeded, failed }
111132 }
133+
134+ @Action
135+ async runSpeedTest ( sizeBytes : number ) : Promise < void > {
136+ this . setSpeedTesting ( true )
137+ this . setSpeedError ( null )
138+ this . setSpeedResult ( null )
139+
140+ await back_axios ( {
141+ method : 'get' ,
142+ url : `${ this . API_URL } /speed` ,
143+ params : { size_bytes : sizeBytes } ,
144+ timeout : 600000 ,
145+ } )
146+ . then ( ( response ) => {
147+ this . setSpeedResult ( response . data as DiskSpeedResult )
148+ } )
149+ . catch ( ( error ) => {
150+ if ( isBackendOffline ( error ) ) {
151+ return
152+ }
153+ const axiosError = error as { response ?: { data ?: { detail ?: string } } ; message ?: string }
154+ const message = axiosError . response ?. data ?. detail || axiosError . message || 'Unknown error'
155+ this . setSpeedError ( `Speed test failed: ${ message } ` )
156+ } )
157+ . finally ( ( ) => {
158+ this . setSpeedTesting ( false )
159+ } )
160+ }
112161}
113162
114163const disk_store = getModule ( DiskStore )
0 commit comments