// retoor <retoor@molodetz.nl>
import Foundation
import Logging
actor MetricsStore {
private var samples: [MetricSample] = []
private var lastFlush = Date()
private let flushInterval: TimeInterval = 60.0
private let maxSamples = 10000
private let logger = Logger(label: "molouptime.metrics")
struct BatchedSamples: Codable {
let checkUid: String
let samples: [MetricSample]
}
func record(_ sample: MetricSample) {
samples.append(sample)
if samples.count >= maxSamples || Date().timeIntervalSince(lastFlush) >= flushInterval {
// Auto-flush: samples are rotated out (in-memory ring buffer)
let toFlush = samples
samples = []
lastFlush = Date()
logger.info("Flushed \(toFlush.count) metric samples to buffer")
}
}
func collect() -> [MetricSample] {
let collected = samples
samples = []
lastFlush = Date()
return collected
}
func snapshot() -> [MetricSample] {
return samples
}
func count() -> Int {
return samples.count
}
}