CommandLineToolkit

Форк
0
/
MetricRecorderImpl.swift 
54 строки · 1.7 Кб
1
import Foundation
2
import Graphite
3
import Statsd
4

5
// swiftlint:disable async
6
// swiftlint:disable sync
7
public final class MetricRecorderImpl: MutableMetricRecorder {
8
    private var graphiteMetricHandler: GraphiteMetricHandler
9
    private var statsdMetricHandler: StatsdMetricHandler
10
    private let queue: DispatchQueue
11
    
12
    public init(
13
        graphiteMetricHandler: GraphiteMetricHandler,
14
        statsdMetricHandler: StatsdMetricHandler,
15
        queue: DispatchQueue = DispatchQueue(label: "MetricRecorderImpl.syncQueue")
16
    ) {
17
        self.graphiteMetricHandler = graphiteMetricHandler
18
        self.statsdMetricHandler = statsdMetricHandler
19
        self.queue = queue
20
    }
21
    
22
    public func setGraphiteMetric(handler: GraphiteMetricHandler) {
23
        queue.async { [weak self] in
24
            self?.graphiteMetricHandler.tearDown(timeout: 10)
25
            self?.graphiteMetricHandler = handler
26
        }
27
    }
28
    
29
    public func setStatsdMetric(handler: StatsdMetricHandler) {
30
        queue.async { [weak self] in
31
            self?.statsdMetricHandler.tearDown(timeout: 10)
32
            self?.statsdMetricHandler = handler
33
        }
34
    }
35
    
36
    public func capture(_ metric: GraphiteMetric) {
37
        queue.async { [weak self] in
38
            self?.graphiteMetricHandler.handle(metric: metric)
39
        }
40
    }
41
    
42
    public func capture(_ metric: StatsdMetric) {
43
        queue.async { [weak self] in
44
            self?.statsdMetricHandler.handle(metric: metric)
45
        }
46
    }
47
    
48
    public func tearDown(timeout: TimeInterval) {
49
        queue.sync {
50
            self.graphiteMetricHandler.tearDown(timeout: timeout)
51
            self.statsdMetricHandler.tearDown(timeout: timeout)
52
        }
53
    }
54
}
55

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

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

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

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