CommandLineToolkit

Форк
0
/
StatsdMetricHandlerImpl.swift 
47 строк · 1.2 Кб
1
import AtomicModels
2
import Foundation
3
import SocketModels
4

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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.