Emcee

Форк
0
/
QueueStateMetricGatherer.swift 
83 строки · 2.9 Кб
1
import DateProvider
2
import Foundation
3
import Graphite
4
import Metrics
5
import QueueModels
6

7
public final class QueueStateMetricGatherer {
8
    private let dateProvider: DateProvider
9
    private let queueHost: String
10
    private let version: Version
11
    
12
    public init(
13
        dateProvider: DateProvider,
14
        queueHost: String,
15
        version: Version
16
    ) {
17
        self.dateProvider = dateProvider
18
        self.queueHost = queueHost
19
        self.version = version
20
    }
21
    
22
    public func metrics(
23
        jobStates: [JobState],
24
        runningQueueState: RunningQueueState
25
    ) -> [GraphiteMetric] {
26
        let queueMetrics = [
27
            QueueStateDequeuedBucketsMetric(
28
                queueHost: queueHost,
29
                numberOfDequeuedBuckets: runningQueueState.dequeuedBucketCount,
30
                version: version,
31
                timestamp: dateProvider.currentDate()
32
            ),
33
            QueueStateDequeuedTestsMetric(
34
                queueHost: queueHost,
35
                numberOfDequeuedTests: runningQueueState.dequeuedTests.flattenValues.count,
36
                version: version,
37
                timestamp: dateProvider.currentDate()
38
            ),
39
            QueueStateEnqueuedBucketsMetric(
40
                queueHost: queueHost,
41
                numberOfEnqueuedBuckets: runningQueueState.enqueuedBucketCount,
42
                version: version,
43
                timestamp: dateProvider.currentDate()
44
            ),
45
            QueueStateEnqueuedTestsMetric(
46
                queueHost: queueHost,
47
                numberOfEnqueuedTests: runningQueueState.enqueuedTests.count,
48
                version: version,
49
                timestamp: dateProvider.currentDate()
50
            ),
51
            JobCountMetric(
52
                queueHost: queueHost,
53
                version: version,
54
                jobCount: jobStates.count,
55
                timestamp: dateProvider.currentDate()
56
            )
57
        ]
58
        let jobMetrics = jobStates.flatMap { jobState -> [GraphiteMetric] in
59
            switch jobState.queueState {
60
            case .deleted:
61
                return []
62
            case .running(let jobQueueState):
63
                return [
64
                    JobStateEnqueuedBucketsMetric(
65
                        queueHost: queueHost,
66
                        jobId: jobState.jobId.value,
67
                        numberOfEnqueuedBuckets: jobQueueState.enqueuedBucketCount,
68
                        version: version,
69
                        timestamp: dateProvider.currentDate()
70
                    ),
71
                    JobStateDequeuedBucketsMetric(
72
                        queueHost: queueHost,
73
                        jobId: jobState.jobId.value,
74
                        numberOfDequeuedBuckets: jobQueueState.dequeuedBucketCount,
75
                        version: version,
76
                        timestamp: dateProvider.currentDate()
77
                    )
78
                ]
79
            }
80
        }
81
        return queueMetrics + jobMetrics
82
    }
83
}
84

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

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

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

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