Files
iKeyMon/iKeyMon/Model/ServerInfo.swift
2025-04-03 19:49:03 +02:00

87 lines
2.6 KiB
Swift

//
// ServerInfo.swift
// iKeyMon
//
// Created by tracer on 30.03.25.
//
struct ServerInfo: Decodable {
var hostname: String
var ipAddresses: [String]
// var processor: String
var cpuCores: Int
// var virtualization: String
var serverTime: String
var uptime: String
// var sshFingerprint: String
var processCount: Int
var apacheVersion: String
var phpVersion: String
var mysqlVersion: String?
var mariadbVersion: String?
var ports: [ServicePort]?
var load: Load
var memory: Memory
var swap: Memory
var diskSpace: DiskSpace
}
extension ServerInfo {
static let placeholder = ServerInfo(
hostname: "keyhelp.lab.24unix.net",
ipAddresses: ["192.168.99.44", "2a03:..."],
// processor: "Common processor (arm64)",
cpuCores: 8,
// virtualization: "QEMU",
serverTime: "Sunday, March 30, 2025 at 08:01 PM (Europe/Berlin)",
uptime: "6 Days / 7 Hours / 16 Minutes",
// sshFingerprint: "Ed25519 / ECDSA / RSA",
processCount: 123,
apacheVersion: "2.4",
phpVersion: "8.4",
ports: [],
load: Load(
minute1: 0.42,
minute5: 0.31,
minute15: 0.29,
percent: 10.5,
cpuCount: 4,
level: "low"
),
memory: Memory(free: 1234, used: 4567, total: 123456, percent: 23.45),
swap: Memory(free: 1234, used: 4567, total: 123456, percent: 23.45),
diskSpace: DiskSpace(free: 1234, used: 4567, total: 123456, percent: 23.45)
)
var cpuLoadDetail: String {
"1min: \(load.minute1), 5min: \(load.minute5), 15min: \(load.minute15) (\(load.level))"
}
}
extension ServerInfo {
init(from response: ServerResponse) {
self.hostname = response.meta.hostname
self.ipAddresses = response.meta.ipAddresses
self.serverTime = response.meta.serverTime
let u = response.meta.uptime
self.uptime = "\(u.days) Days / \(u.hours) Hours / \(u.minutes) Minutes"
self.cpuCores = response.utilization.load.cpuCount
self.processCount = response.utilization.processCount
self.apacheVersion = response.components.apache
self.phpVersion = response.components.php
self.mysqlVersion = response.components.mysql ?? ""
self.mariadbVersion = response.components.mariadb ?? ""
self.ports = response.ports
self.load = response.utilization.load
self.memory = response.utilization.memory
self.swap = response.utilization.swap
self.diskSpace = response.utilization.diskSpace
}
}