92 lines
2.5 KiB
TypeScript
92 lines
2.5 KiB
TypeScript
import { Node } from '@/api/admin/nodes/getNodes'
|
|
import { User } from '@/api/admin/users/getUsers'
|
|
import http, { FractalResponseData } from '@/api/http'
|
|
import { EloquentStatus } from '@/api/server/types'
|
|
|
|
export type AddressType = 'ipv4' | 'ipv6'
|
|
|
|
export interface Address {
|
|
id: number
|
|
type: AddressType
|
|
address: string
|
|
cidr: number
|
|
gateway: string
|
|
macAddress?: string
|
|
server?: Server
|
|
}
|
|
|
|
export interface Server {
|
|
id: string
|
|
internalId: number
|
|
uuid: string
|
|
hostname: string
|
|
name: string
|
|
description: string | null
|
|
status: EloquentStatus
|
|
node_id: number
|
|
usages: {
|
|
bandwidth: number // bytes
|
|
}
|
|
limits: {
|
|
cpu: number
|
|
memory: number // bytes
|
|
disk: number // bytes
|
|
snapshots: number | null
|
|
backups: number | null
|
|
bandwidth: number | null // bytes
|
|
addresses: {
|
|
ipv4: Address[]
|
|
ipv6: Address[]
|
|
}
|
|
macAddress: string | null
|
|
}
|
|
user?: User
|
|
node?: Node
|
|
}
|
|
|
|
export const rawDataToAddressObject = (data: any): Address => ({
|
|
id: data.id,
|
|
type: data.type,
|
|
address: data.address,
|
|
cidr: data.cidr,
|
|
gateway: data.gateway,
|
|
macAddress: data.mac_address,
|
|
server: data.server ? rawDataToServerObject(data.server.data) : undefined,
|
|
})
|
|
|
|
export const rawDataToServerObject = (data: FractalResponseData): Server => ({
|
|
id: data.id,
|
|
internalId: data.internal_id,
|
|
uuid: data.uuid,
|
|
hostname: data.hostname,
|
|
name: data.name,
|
|
status: data.status,
|
|
node_id: data.node_id,
|
|
description: data.description ? (data.description.length > 0 ? data.description : null) : null,
|
|
usages: {
|
|
bandwidth: data.usages.bandwidth,
|
|
},
|
|
limits: {
|
|
cpu: data.limits.cpu,
|
|
memory: data.limits.memory,
|
|
disk: data.limits.disk,
|
|
snapshots: data.limits.snapshots,
|
|
backups: data.limits.backups,
|
|
bandwidth: data.limits.bandwidth,
|
|
addresses: {
|
|
ipv4: data.limits.addresses.ipv4.map((address: any) => rawDataToAddressObject(address)),
|
|
ipv6: data.limits.addresses.ipv6.map((address: any) => rawDataToAddressObject(address)),
|
|
},
|
|
macAddress: data.limits.mac_address,
|
|
},
|
|
user: data?.user?.data,
|
|
node: data?.node?.data,
|
|
})
|
|
|
|
export default (uuid: string): Promise<Server> => {
|
|
return new Promise((resolve, reject) => {
|
|
http.get(`/api/client/servers/${uuid}`)
|
|
.then(({ data }) => resolve(rawDataToServerObject(data.data)))
|
|
.catch(reject)
|
|
})
|
|
}
|