60 lines
1.3 KiB
Swift
Raw Normal View History

2026-07-19 22:46:52 +02:00
// retoor <retoor@molodetz.nl>
import Foundation
enum IpcCommand: String, Codable {
case addCheck
case removeCheck
case updateCheck
case listChecks
case getMetrics
case ping
case shutdown
}
struct IpcRequest: Codable {
let reqId: Int
let command: IpcCommand
let payload: [String: String]?
}
struct CheckTarget: Codable {
let uid: String
let type: String
let target: String
let intervalSeconds: Int
let port: Int?
let protocolType: String?
}
struct IpcResponse: Codable {
let reqId: Int
let kind: String
let payload: String?
let checks: [CheckTarget]?
let metrics: [MetricSample]?
let error: String?
}
struct MetricSample: Codable {
let checkUid: String
let timestamp: Double
let latencyMs: Double
let status: String
let statusCode: Int
let errorMessage: String?
}
enum IpcProtocol {
static func readRequest(from line: String) -> IpcRequest? {
guard let data = line.data(using: .utf8) else { return nil }
return try? JSONDecoder().decode(IpcRequest.self, from: data)
}
static func writeResponse(_ response: IpcResponse) -> String? {
let encoder = JSONEncoder()
guard let data = try? encoder.encode(response) else { return nil }
return String(data: data, encoding: .utf8)
}
}