mac: include instance id in presence beacons
This commit is contained in:
@@ -184,8 +184,10 @@ final class ControlChannel: ObservableObject {
|
|||||||
return "Gateway error: \(detail)"
|
return "Gateway error: \(detail)"
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendSystemEvent(_ text: String) async throws {
|
func sendSystemEvent(_ text: String, params: [String: AnyHashable] = [:]) async throws {
|
||||||
_ = try await self.request(method: "system-event", params: ["text": AnyHashable(text)])
|
var merged = params
|
||||||
|
merged["text"] = AnyHashable(text)
|
||||||
|
_ = try await self.request(method: "system-event", params: merged)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func startEventStream() {
|
private func startEventStream() {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ final class PresenceReporter {
|
|||||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "presence")
|
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "presence")
|
||||||
private var task: Task<Void, Never>?
|
private var task: Task<Void, Never>?
|
||||||
private let interval: TimeInterval = 180 // a few minutes
|
private let interval: TimeInterval = 180 // a few minutes
|
||||||
|
private let instanceId: String = Host.current().localizedName ?? UUID().uuidString
|
||||||
|
|
||||||
func start() {
|
func start() {
|
||||||
guard self.task == nil else { return }
|
guard self.task == nil else { return }
|
||||||
@@ -31,9 +32,22 @@ final class PresenceReporter {
|
|||||||
@Sendable
|
@Sendable
|
||||||
private func push(reason: String) async {
|
private func push(reason: String) async {
|
||||||
let mode = await MainActor.run { AppStateStore.shared.connectionMode.rawValue }
|
let mode = await MainActor.run { AppStateStore.shared.connectionMode.rawValue }
|
||||||
|
let host = Host.current().localizedName ?? "unknown-host"
|
||||||
|
let ip = Self.primaryIPv4Address() ?? "ip-unknown"
|
||||||
|
let version = Self.appVersionString()
|
||||||
|
let lastInput = Self.lastInputSeconds()
|
||||||
let text = Self.composePresenceSummary(mode: mode, reason: reason)
|
let text = Self.composePresenceSummary(mode: mode, reason: reason)
|
||||||
|
var params: [String: AnyHashable] = [
|
||||||
|
"instanceId": AnyHashable(self.instanceId),
|
||||||
|
"host": AnyHashable(host),
|
||||||
|
"ip": AnyHashable(ip),
|
||||||
|
"mode": AnyHashable(mode),
|
||||||
|
"version": AnyHashable(version),
|
||||||
|
"reason": AnyHashable(reason),
|
||||||
|
]
|
||||||
|
if let lastInput { params["lastInputSeconds"] = AnyHashable(lastInput) }
|
||||||
do {
|
do {
|
||||||
try await ControlChannel.shared.sendSystemEvent(text)
|
try await ControlChannel.shared.sendSystemEvent(text, params: params)
|
||||||
} catch {
|
} catch {
|
||||||
self.logger.error("presence send failed: \(error.localizedDescription, privacy: .public)")
|
self.logger.error("presence send failed: \(error.localizedDescription, privacy: .public)")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user