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

180 lines
4.4 KiB
Swift

//
// ServerResponse.swift
// iKeyMon
//
// Created by tracer on 30.03.25.
//
import Foundation
import Foundation
// MARK: - Root Response
struct ServerResponse: Decodable {
let meta: Meta
let operatingSystem: OperatingSystem
let utilization: Utilization
let resources: Resources
let components: Components
let additionalPHPInterpreters: [PHPInterpreter]?
let ports: [ServicePort]?
enum CodingKeys: String, CodingKey {
case meta
case operatingSystem = "operating_system"
case utilization, resources, components
case additionalPHPInterpreters = "additional_php_interpreters"
case ports
}
}
// MARK: - Meta
struct Meta: Decodable {
let hostname: String
let ipAddresses: [String]
let serverTime: String
let uptime: Uptime
let panelVersion: String
let panelBuild: String
let apiVersion: String
let apiDocs: String
let keyhelpPro: Bool
enum CodingKeys: String, CodingKey {
case hostname
case ipAddresses = "ip_addresses"
case serverTime = "server_time"
case uptime
case panelVersion = "panel_version"
case panelBuild = "panel_build"
case apiVersion = "api_version"
case apiDocs = "api_docs"
case keyhelpPro = "keyhelp_pro"
}
}
struct Uptime: Decodable {
let days, hours, minutes, seconds: Int
}
// MARK: - OperatingSystem
struct OperatingSystem: Decodable {
let label, distribution, version, architecture: String
let endOfLife: Bool
let updates: Updates
enum CodingKeys: String, CodingKey {
case label, distribution, version, architecture
case endOfLife = "end_of_life"
case updates
}
}
struct Updates: Decodable {
let updateCount, securityUpdateCount: Int
let rebootRequired: Bool
enum CodingKeys: String, CodingKey {
case updateCount = "update_count"
case securityUpdateCount = "security_update_count"
case rebootRequired = "reboot_required"
}
}
// MARK: - Utilization
struct Utilization: Decodable {
let processCount, emailsInQueue: Int
let load: Load
let diskSpace: DiskSpace
let inodes: Inodes
let memory, swap: Memory
enum CodingKeys: String, CodingKey {
case processCount = "process_count"
case emailsInQueue = "emails_in_queue"
case load
case diskSpace = "disk_space"
case inodes, memory, swap
}
}
struct Load: Decodable {
let minute1, minute5, minute15, percent: Double
let cpuCount: Int
let level: String
enum CodingKeys: String, CodingKey {
case minute1 = "minute_1"
case minute5 = "minute_5"
case minute15 = "minute_15"
case cpuCount = "cpu_count"
case percent, level
}
}
struct DiskSpace: Decodable {
let free, used, total: Int
let percent: Double
}
struct Inodes: Decodable {
let free, used, total: Int
let percent: Double
}
struct Memory: Decodable {
let free, used, total: Int
let percent: Double
}
// MARK: - Resources
struct Resources: Decodable {
let adminAccounts, clientAccounts, domains, subdomains: Int
let emailAccounts, emailAddresses, emailForwardings, databases: Int
let ftpUsers, scheduledTasks: Int
let consumedDiskSpace, traffic: Int
enum CodingKeys: String, CodingKey {
case adminAccounts = "admin_accounts"
case clientAccounts = "client_accounts"
case domains, subdomains
case emailAccounts = "email_accounts"
case emailAddresses = "email_addresses"
case emailForwardings = "email_forwardings"
case databases
case ftpUsers = "ftp_users"
case scheduledTasks = "scheduled_tasks"
case consumedDiskSpace = "consumed_disk_space"
case traffic
}
}
// MARK: - Components
struct Components: Decodable {
let kernel, apache, php, proftpd, dovecot, postfix: String
let mariadb, mysql: String?
}
struct PHPInterpreter: Decodable {
let version, versionFull: String
enum CodingKeys: String, CodingKey {
case version
case versionFull = "version_full"
}
}
struct ServicePort: Decodable, Identifiable {
let service: String
let port: Int
let proto: String
let status: String
var id: String { service }
enum CodingKeys: String, CodingKey {
case service
case port
case proto = "protocol"
case status
}
}