CommandLineToolkit
47 строк · 1.2 Кб
1import AtomicModels
2import Foundation
3import SocketModels
4
5public final class StatsdMetricHandlerImpl: StatsdMetricHandler {
6private let statsdDomain: [String]
7private let statsdClient: StatsdClient
8private let serialQueue: DispatchQueue
9private let group = DispatchGroup()
10
11public init(
12statsdDomain: [String],
13statsdClient: StatsdClient,
14serialQueue: DispatchQueue = DispatchQueue(label: "StatsdMetricHandlerImpl.serialQueue")
15) {
16self.statsdDomain = statsdDomain
17self.statsdClient = statsdClient
18self.serialQueue = serialQueue
19}
20
21public func handle(metric: StatsdMetric) {
22let metricData = Data(metric.build(domain: self.statsdDomain).utf8)
23
24group.enter()
25
26statsdClient.send(
27content: metricData,
28queue: serialQueue
29) { [group] _ in
30group.leave()
31}
32}
33
34public func tearDown(timeout: TimeInterval) {
35group.enter()
36
37statsdClient.tearDown(
38queue: serialQueue,
39timeout: timeout,
40completion: { [group] in
41group.leave()
42}
43)
44
45_ = group.wait(timeout: .now() + timeout)
46}
47}
48