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