180 lines
4.4 KiB
Swift
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
|
|
}
|
|
}
|