| 50 | const requests = yield* Mailbox.make<Domain.Request>() |
| 51 | |
| 52 | function metricsSnapshot(): Domain.MetricsSnapshot { |
| 53 | const snapshot = Metric.unsafeSnapshot() |
| 54 | const metrics: Array<Domain.Metric> = [] |
| 55 | |
| 56 | for (let i = 0, len = snapshot.length; i < len; i++) { |
| 57 | const metricPair = snapshot[i] |
| 58 | if (MetricState.isCounterState(metricPair.metricState)) { |
| 59 | metrics.push({ |
| 60 | _tag: "Counter", |
| 61 | name: metricPair.metricKey.name, |
| 62 | description: metricPair.metricKey.description, |
| 63 | tags: metricPair.metricKey.tags, |
| 64 | state: metricPair.metricState |
| 65 | }) |
| 66 | } else if (MetricState.isGaugeState(metricPair.metricState)) { |
| 67 | metrics.push({ |
| 68 | _tag: "Gauge", |
| 69 | name: metricPair.metricKey.name, |
| 70 | description: metricPair.metricKey.description, |
| 71 | tags: metricPair.metricKey.tags, |
| 72 | state: metricPair.metricState |
| 73 | }) |
| 74 | } else if (MetricState.isHistogramState(metricPair.metricState)) { |
| 75 | metrics.push({ |
| 76 | _tag: "Histogram", |
| 77 | name: metricPair.metricKey.name, |
| 78 | description: metricPair.metricKey.description, |
| 79 | tags: metricPair.metricKey.tags, |
| 80 | state: metricPair.metricState |
| 81 | }) |
| 82 | } else if (MetricState.isSummaryState(metricPair.metricState)) { |
| 83 | metrics.push({ |
| 84 | _tag: "Summary", |
| 85 | name: metricPair.metricKey.name, |
| 86 | description: metricPair.metricKey.description, |
| 87 | tags: metricPair.metricKey.tags, |
| 88 | state: metricPair.metricState |
| 89 | }) |
| 90 | } else if (MetricState.isFrequencyState(metricPair.metricState)) { |
| 91 | metrics.push({ |
| 92 | _tag: "Frequency", |
| 93 | name: metricPair.metricKey.name, |
| 94 | description: metricPair.metricKey.description, |
| 95 | tags: metricPair.metricKey.tags, |
| 96 | state: { |
| 97 | occurrences: Object.fromEntries(metricPair.metricState.occurrences.entries()) |
| 98 | } |
| 99 | }) |
| 100 | } |
| 101 | } |
| 102 | |
| 103 | return { |
| 104 | _tag: "MetricsSnapshot", |
| 105 | metrics |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | const connected = yield* Deferred.make<void>() |