promenade 0.9.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc0749131d57843e9243eb47058cc0615c73865b92b753772308ceb13cd6b096
4
- data.tar.gz: 66c5a9376ea0cd02dbd64bd63e67d3178f440a30701646912ef459586e14a1e6
3
+ metadata.gz: 9bfd38ab707b83cd27b230470eee4ec780ba798b483722a68fbf523f126468a5
4
+ data.tar.gz: 9f44f7722eeec1d4e0f80c96e9f47f315e8f17545dd1c5c18e7a7213ba1092b7
5
5
  SHA512:
6
- metadata.gz: 5569ffe88cbaf2a0a738b605c15673a6866e51c345fc53a8000f01004dd77b23a8175af32f1242ed2492aa444c6a71e20d760fb1d377b2c02ead531470108f47
7
- data.tar.gz: b2fe6be44e09a45f9e6cf051971b27140d9af03e436265815ccb0e527d85dfcc890dc271654e3b404ff9cfce8c8a633ff4efe1c17797781ef6751732bb7d92f3
6
+ metadata.gz: 8b46d28958a5065ebf3e1311b0b7edaed1e01d626cbccac657d2a40ba644b48dad611ab44ce7c3418c346c8266b6704710f2fc8ba84ba4727dc9e47843549518
7
+ data.tar.gz: c33f7d5b259e82fed2fe3856733db53ae4b663ff3a4f9ed5190c9dc59c0053afc66f00d40c31be474472e3527f2eb522ef33b36189f99b14a466e9b060bc86b1
@@ -9,7 +9,7 @@ jobs:
9
9
  strategy:
10
10
  fail-fast: false
11
11
  matrix:
12
- ruby: ['2.7', '3.0', "3.1", "3.2"]
12
+ ruby: ["3.0", "3.1", "3.2"]
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
15
  - uses: actions/checkout@v2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- promenade (0.9.0)
4
+ promenade (0.11.0)
5
5
  actionpack
6
6
  activesupport (> 6.0, < 8.0)
7
7
  prometheus-client-mmap (~> 0.16.0)
@@ -10,67 +10,67 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- actioncable (7.0.4.2)
14
- actionpack (= 7.0.4.2)
15
- activesupport (= 7.0.4.2)
13
+ actioncable (7.0.6)
14
+ actionpack (= 7.0.6)
15
+ activesupport (= 7.0.6)
16
16
  nio4r (~> 2.0)
17
17
  websocket-driver (>= 0.6.1)
18
- actionmailbox (7.0.4.2)
19
- actionpack (= 7.0.4.2)
20
- activejob (= 7.0.4.2)
21
- activerecord (= 7.0.4.2)
22
- activestorage (= 7.0.4.2)
23
- activesupport (= 7.0.4.2)
18
+ actionmailbox (7.0.6)
19
+ actionpack (= 7.0.6)
20
+ activejob (= 7.0.6)
21
+ activerecord (= 7.0.6)
22
+ activestorage (= 7.0.6)
23
+ activesupport (= 7.0.6)
24
24
  mail (>= 2.7.1)
25
25
  net-imap
26
26
  net-pop
27
27
  net-smtp
28
- actionmailer (7.0.4.2)
29
- actionpack (= 7.0.4.2)
30
- actionview (= 7.0.4.2)
31
- activejob (= 7.0.4.2)
32
- activesupport (= 7.0.4.2)
28
+ actionmailer (7.0.6)
29
+ actionpack (= 7.0.6)
30
+ actionview (= 7.0.6)
31
+ activejob (= 7.0.6)
32
+ activesupport (= 7.0.6)
33
33
  mail (~> 2.5, >= 2.5.4)
34
34
  net-imap
35
35
  net-pop
36
36
  net-smtp
37
37
  rails-dom-testing (~> 2.0)
38
- actionpack (7.0.4.2)
39
- actionview (= 7.0.4.2)
40
- activesupport (= 7.0.4.2)
41
- rack (~> 2.0, >= 2.2.0)
38
+ actionpack (7.0.6)
39
+ actionview (= 7.0.6)
40
+ activesupport (= 7.0.6)
41
+ rack (~> 2.0, >= 2.2.4)
42
42
  rack-test (>= 0.6.3)
43
43
  rails-dom-testing (~> 2.0)
44
44
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
45
- actiontext (7.0.4.2)
46
- actionpack (= 7.0.4.2)
47
- activerecord (= 7.0.4.2)
48
- activestorage (= 7.0.4.2)
49
- activesupport (= 7.0.4.2)
45
+ actiontext (7.0.6)
46
+ actionpack (= 7.0.6)
47
+ activerecord (= 7.0.6)
48
+ activestorage (= 7.0.6)
49
+ activesupport (= 7.0.6)
50
50
  globalid (>= 0.6.0)
51
51
  nokogiri (>= 1.8.5)
52
- actionview (7.0.4.2)
53
- activesupport (= 7.0.4.2)
52
+ actionview (7.0.6)
53
+ activesupport (= 7.0.6)
54
54
  builder (~> 3.1)
55
55
  erubi (~> 1.4)
56
56
  rails-dom-testing (~> 2.0)
57
57
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
58
- activejob (7.0.4.2)
59
- activesupport (= 7.0.4.2)
58
+ activejob (7.0.6)
59
+ activesupport (= 7.0.6)
60
60
  globalid (>= 0.3.6)
61
- activemodel (7.0.4.2)
62
- activesupport (= 7.0.4.2)
63
- activerecord (7.0.4.2)
64
- activemodel (= 7.0.4.2)
65
- activesupport (= 7.0.4.2)
66
- activestorage (7.0.4.2)
67
- actionpack (= 7.0.4.2)
68
- activejob (= 7.0.4.2)
69
- activerecord (= 7.0.4.2)
70
- activesupport (= 7.0.4.2)
61
+ activemodel (7.0.6)
62
+ activesupport (= 7.0.6)
63
+ activerecord (7.0.6)
64
+ activemodel (= 7.0.6)
65
+ activesupport (= 7.0.6)
66
+ activestorage (7.0.6)
67
+ actionpack (= 7.0.6)
68
+ activejob (= 7.0.6)
69
+ activerecord (= 7.0.6)
70
+ activesupport (= 7.0.6)
71
71
  marcel (~> 1.0)
72
72
  mini_mime (>= 1.1.0)
73
- activesupport (7.0.4.2)
73
+ activesupport (7.0.6)
74
74
  concurrent-ruby (~> 1.0, >= 1.0.2)
75
75
  i18n (>= 1.6, < 2)
76
76
  minitest (>= 5.1)
@@ -89,12 +89,13 @@ GEM
89
89
  erubi (1.12.0)
90
90
  globalid (1.1.0)
91
91
  activesupport (>= 5.0)
92
- i18n (1.12.0)
92
+ i18n (1.14.1)
93
93
  concurrent-ruby (~> 1.0)
94
94
  json (2.6.3)
95
- loofah (2.19.1)
95
+ language_server-protocol (3.17.0.3)
96
+ loofah (2.21.3)
96
97
  crass (~> 1.0.2)
97
- nokogiri (>= 1.5.9)
98
+ nokogiri (>= 1.12.0)
98
99
  mail (2.8.1)
99
100
  mini_mime (>= 0.1.1)
100
101
  net-imap
@@ -103,9 +104,9 @@ GEM
103
104
  marcel (1.0.2)
104
105
  method_source (1.0.0)
105
106
  mini_mime (1.1.2)
106
- mini_portile2 (2.8.1)
107
- minitest (5.17.0)
108
- net-imap (0.3.4)
107
+ mini_portile2 (2.8.4)
108
+ minitest (5.18.1)
109
+ net-imap (0.3.6)
109
110
  date
110
111
  net-protocol
111
112
  net-pop (0.1.2)
@@ -114,58 +115,61 @@ GEM
114
115
  timeout
115
116
  net-smtp (0.3.3)
116
117
  net-protocol
117
- nio4r (2.5.8)
118
- nokogiri (1.14.2)
119
- mini_portile2 (~> 2.8.0)
118
+ nio4r (2.5.9)
119
+ nokogiri (1.15.3)
120
+ mini_portile2 (~> 2.8.2)
120
121
  racc (~> 1.4)
121
- parallel (1.22.1)
122
- parser (3.2.1.0)
122
+ parallel (1.23.0)
123
+ parser (3.2.2.3)
123
124
  ast (~> 2.4.1)
125
+ racc
124
126
  prometheus-client-mmap (0.16.2)
125
- racc (1.6.2)
126
- rack (2.2.6.2)
127
- rack-test (2.0.2)
127
+ racc (1.7.1)
128
+ rack (2.2.7)
129
+ rack-test (2.1.0)
128
130
  rack (>= 1.3)
129
- rails (7.0.4.2)
130
- actioncable (= 7.0.4.2)
131
- actionmailbox (= 7.0.4.2)
132
- actionmailer (= 7.0.4.2)
133
- actionpack (= 7.0.4.2)
134
- actiontext (= 7.0.4.2)
135
- actionview (= 7.0.4.2)
136
- activejob (= 7.0.4.2)
137
- activemodel (= 7.0.4.2)
138
- activerecord (= 7.0.4.2)
139
- activestorage (= 7.0.4.2)
140
- activesupport (= 7.0.4.2)
131
+ rails (7.0.6)
132
+ actioncable (= 7.0.6)
133
+ actionmailbox (= 7.0.6)
134
+ actionmailer (= 7.0.6)
135
+ actionpack (= 7.0.6)
136
+ actiontext (= 7.0.6)
137
+ actionview (= 7.0.6)
138
+ activejob (= 7.0.6)
139
+ activemodel (= 7.0.6)
140
+ activerecord (= 7.0.6)
141
+ activestorage (= 7.0.6)
142
+ activesupport (= 7.0.6)
141
143
  bundler (>= 1.15.0)
142
- railties (= 7.0.4.2)
143
- rails-dom-testing (2.0.3)
144
- activesupport (>= 4.2.0)
144
+ railties (= 7.0.6)
145
+ rails-dom-testing (2.1.1)
146
+ activesupport (>= 5.0.0)
147
+ minitest
145
148
  nokogiri (>= 1.6)
146
- rails-html-sanitizer (1.5.0)
147
- loofah (~> 2.19, >= 2.19.1)
148
- railties (7.0.4.2)
149
- actionpack (= 7.0.4.2)
150
- activesupport (= 7.0.4.2)
149
+ rails-html-sanitizer (1.6.0)
150
+ loofah (~> 2.21)
151
+ nokogiri (~> 1.14)
152
+ railties (7.0.6)
153
+ actionpack (= 7.0.6)
154
+ activesupport (= 7.0.6)
151
155
  method_source
152
156
  rake (>= 12.2)
153
157
  thor (~> 1.0)
154
158
  zeitwerk (~> 2.5)
155
159
  rainbow (3.1.1)
156
160
  rake (13.0.6)
157
- regexp_parser (2.7.0)
161
+ regexp_parser (2.8.1)
158
162
  rexml (3.2.5)
159
163
  rspec (3.12.0)
160
164
  rspec-core (~> 3.12.0)
161
165
  rspec-expectations (~> 3.12.0)
162
166
  rspec-mocks (~> 3.12.0)
163
- rspec-core (3.12.1)
167
+ rspec-core (3.12.2)
164
168
  rspec-support (~> 3.12.0)
165
- rspec-expectations (3.12.2)
169
+ rspec-expectations (3.12.3)
166
170
  diff-lcs (>= 1.2.0, < 2.0)
167
171
  rspec-support (~> 3.12.0)
168
- rspec-mocks (3.12.3)
172
+ rspec-mocks (3.12.6)
169
173
  diff-lcs (>= 1.2.0, < 2.0)
170
174
  rspec-support (~> 3.12.0)
171
175
  rspec-rails (5.1.2)
@@ -176,40 +180,44 @@ GEM
176
180
  rspec-expectations (~> 3.10)
177
181
  rspec-mocks (~> 3.10)
178
182
  rspec-support (~> 3.10)
179
- rspec-support (3.12.0)
180
- rubocop (1.47.0)
183
+ rspec-support (3.12.1)
184
+ rubocop (1.54.2)
181
185
  json (~> 2.3)
186
+ language_server-protocol (>= 3.17.0)
182
187
  parallel (~> 1.10)
183
- parser (>= 3.2.0.0)
188
+ parser (>= 3.2.2.3)
184
189
  rainbow (>= 2.2.2, < 4.0)
185
190
  regexp_parser (>= 1.8, < 3.0)
186
191
  rexml (>= 3.2.5, < 4.0)
187
- rubocop-ast (>= 1.26.0, < 2.0)
192
+ rubocop-ast (>= 1.28.0, < 2.0)
188
193
  ruby-progressbar (~> 1.7)
189
194
  unicode-display_width (>= 2.4.0, < 3.0)
190
- rubocop-ast (1.27.0)
195
+ rubocop-ast (1.29.0)
191
196
  parser (>= 3.2.1.0)
192
- rubocop-capybara (2.17.1)
197
+ rubocop-capybara (2.18.0)
193
198
  rubocop (~> 1.41)
194
- rubocop-performance (1.16.0)
199
+ rubocop-factory_bot (2.23.1)
200
+ rubocop (~> 1.33)
201
+ rubocop-performance (1.18.0)
195
202
  rubocop (>= 1.7.0, < 2.0)
196
203
  rubocop-ast (>= 0.4.0)
197
- rubocop-rails (2.18.0)
204
+ rubocop-rails (2.20.2)
198
205
  activesupport (>= 4.2.0)
199
206
  rack (>= 1.1)
200
207
  rubocop (>= 1.33.0, < 2.0)
201
- rubocop-rspec (2.18.1)
208
+ rubocop-rspec (2.22.0)
202
209
  rubocop (~> 1.33)
203
210
  rubocop-capybara (~> 2.17)
204
- ruby-progressbar (1.12.0)
211
+ rubocop-factory_bot (~> 2.22)
212
+ ruby-progressbar (1.13.0)
205
213
  simplecov (0.21.2)
206
214
  docile (~> 1.1)
207
215
  simplecov-html (~> 0.11)
208
216
  simplecov_json_formatter (~> 0.1)
209
217
  simplecov-html (0.12.3)
210
218
  simplecov_json_formatter (0.1.4)
211
- thor (1.2.1)
212
- timeout (0.3.2)
219
+ thor (1.2.2)
220
+ timeout (0.4.0)
213
221
  tzinfo (2.0.6)
214
222
  concurrent-ruby (~> 1.0)
215
223
  unicode-display_width (2.4.2)
@@ -217,7 +225,7 @@ GEM
217
225
  websocket-driver (0.7.5)
218
226
  websocket-extensions (>= 0.1.0)
219
227
  websocket-extensions (0.1.5)
220
- zeitwerk (2.6.7)
228
+ zeitwerk (2.6.8)
221
229
 
222
230
  PLATFORMS
223
231
  ruby
@@ -240,4 +248,4 @@ DEPENDENCIES
240
248
  webrick
241
249
 
242
250
  BUNDLED WITH
243
- 2.3.16
251
+ 2.4.17
@@ -8,12 +8,12 @@ module Promenade
8
8
  module Client
9
9
  module Rack
10
10
  class HTTPRequestDurationCollector < MiddlwareBase
11
- REQUEST_DURATION_HISTOGRAM_NAME = :http_req_duration_seconds
11
+ REQUEST_DURATION_HISTOGRAM_NAME = :http_request_duration_seconds
12
12
 
13
13
  # We specifically want to record a separate metric `http_requests_total` even
14
- # though we know it is a duplicate of http_req_duration_seconds_count.
14
+ # though we know it is a duplicate of http_request_duration_seconds_count.
15
15
  # This is a very commonly used prometheus metric name, and is very useful
16
- # e.g. for autoscaling. Using the http_req_duration_seconds_count in such
16
+ # e.g. for autoscaling. Using the http_request_duration_seconds_count in such
17
17
  # queries can be confusing
18
18
  REQUESTS_COUNTER_NAME = :http_requests_total
19
19
 
@@ -7,7 +7,7 @@ module Promenade
7
7
  module Client
8
8
  module Rack
9
9
  class HTTPRequestQueueTimeCollector < MiddlwareBase
10
- REQUEST_QUEUE_TIME_HISTOGRAM_NAME = :http_req_queue_time_seconds
10
+ REQUEST_QUEUE_TIME_HISTOGRAM_NAME = :http_request_queue_time_seconds
11
11
 
12
12
  private_constant :REQUEST_QUEUE_TIME_HISTOGRAM_NAME
13
13
 
@@ -1,3 +1,3 @@
1
1
  module Promenade
2
- VERSION = "0.9.0".freeze
2
+ VERSION = "0.11.0".freeze
3
3
  end
@@ -0,0 +1,27 @@
1
+ require "promenade/waterdrop/subscriber"
2
+
3
+ module Promenade
4
+ module Waterdrop
5
+ class ErrorSubscriber < Subscriber
6
+ attach_to "error.waterdrop"
7
+
8
+ Promenade.counter :waterdrop_errors_total do
9
+ doc "Count of Waterdrop errors"
10
+ end
11
+
12
+ def occurred(event)
13
+ labels = get_labels(event)
14
+
15
+ Promenade.metric(:waterdrop_errors_total).increment(labels)
16
+ end
17
+
18
+ private
19
+
20
+ def get_labels(event)
21
+ {
22
+ error_type: event.payload[:type],
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,48 @@
1
+ require "promenade/waterdrop/subscriber"
2
+
3
+ module Promenade
4
+ module Waterdrop
5
+ class MessageSubscriber < Subscriber
6
+ attach_to "message.waterdrop"
7
+
8
+ Promenade.counter :waterdrop_producer_messages_total do
9
+ doc "Number of messages written to Kafka producer"
10
+ end
11
+
12
+ Promenade.counter :waterdrop_producer_ack_messages_total do
13
+ doc "Count of the number of messages Acked by Kafka"
14
+ end
15
+
16
+ def produced_async(event)
17
+ Promenade.metric(
18
+ :waterdrop_producer_messages_total,
19
+ ).increment(get_labels(event).merge(producer_type: "async"))
20
+ end
21
+
22
+ def produced_sync(event)
23
+ Promenade.metric(
24
+ :waterdrop_producer_messages_total,
25
+ ).increment(get_labels(event).merge(producer_type: "sync"))
26
+ end
27
+
28
+ def acknowledged(event)
29
+ labels = {
30
+ client: event.payload[:producer_id],
31
+ }
32
+
33
+ Promenade.metric(:waterdrop_producer_ack_messages_total).increment(labels)
34
+ end
35
+
36
+ private
37
+
38
+ def get_labels(event)
39
+ payload = event.payload
40
+
41
+ {
42
+ client: payload[:producer_id],
43
+ topic: event.payload[:message][:topic],
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,94 @@
1
+ require "promenade/waterdrop/subscriber"
2
+ require "active_support/core_ext/hash"
3
+
4
+ module Promenade
5
+ module Waterdrop
6
+ class StatisticsSubscriber < Subscriber
7
+ attach_to "statistics.waterdrop"
8
+
9
+ Promenade.histogram :waterdrop_producer_message_size do
10
+ doc "Historgram of message sizes written to Kafka producer"
11
+ buckets :memory
12
+ end
13
+
14
+ Promenade.counter :waterdrop_producer_delivered_messages do
15
+ doc "A count of the total messages delivered to Kafka"
16
+ end
17
+
18
+ Promenade.histogram :waterdrop_producer_delivery_attempts do
19
+ doc "A count of the total message deliveries attempted"
20
+ buckets [0, 6, 12, 18, 24, 30]
21
+ end
22
+
23
+ Promenade.histogram :waterdrop_producer_ack_latency_seconds do
24
+ doc "Delay between message being produced and Acked in seconds"
25
+ buckets :network
26
+ end
27
+
28
+ Promenade.gauge :waterdrop_async_producer_queue_size do
29
+ doc "Size of Kafka async producer queue"
30
+ end
31
+
32
+ Promenade.gauge :waterdrop_async_producer_max_queue_size do
33
+ doc "Max size of Kafka async producer queue"
34
+ end
35
+
36
+ Promenade.gauge :waterdrop_async_producer_queue_fill_ratio do
37
+ doc "Size of Kafka async producer queue"
38
+ end
39
+
40
+ Promenade.counter :waterdrop_async_producer_dropped_messages do
41
+ doc "Count of dropped messages"
42
+ end
43
+
44
+ def emitted(event)
45
+ statistics = event.payload[:statistics].with_indifferent_access
46
+ labels = get_labels(statistics)
47
+
48
+ report_root_metrics(statistics, labels)
49
+ report_broker_metrics(statistics[:brokers], labels)
50
+ end
51
+
52
+ private
53
+
54
+ def report_root_metrics(statistics, labels)
55
+ queue_size = statistics[:msg_cnt]
56
+ max_queue_size = statistics[:msg_max]
57
+ message_size = statistics[:msg_size]
58
+ delivered_messages = statistics[:txmsgs]
59
+ queue_fill_ratio = queue_size.to_f / max_queue_size
60
+
61
+ Promenade.metric(:waterdrop_async_producer_queue_size).set(labels, queue_size)
62
+ Promenade.metric(:waterdrop_async_producer_max_queue_size).set(labels, max_queue_size)
63
+ Promenade.metric(:waterdrop_async_producer_queue_fill_ratio).set(labels, queue_fill_ratio)
64
+ Promenade.metric(:waterdrop_producer_message_size).observe(labels, message_size)
65
+ Promenade.metric(:waterdrop_producer_delivered_messages).increment(labels, delivered_messages)
66
+ end
67
+
68
+ def report_broker_metrics(brokers, labels)
69
+ brokers.map do |broker_name, broker_values|
70
+ next if broker_values[:nodeid] == -1
71
+
72
+ attempts = broker_values[:txretries]
73
+ ack_latency = convert_microseconds_to_seconds(broker_values[:rtt][:avg])
74
+ broker_labels = {
75
+ broker_id: broker_name,
76
+ }
77
+
78
+ Promenade.metric(:waterdrop_producer_delivery_attempts).observe(labels.merge(broker_labels), attempts)
79
+ Promenade.metric(:waterdrop_producer_ack_latency_seconds).observe(labels, ack_latency)
80
+ end
81
+ end
82
+
83
+ def get_labels(statistics)
84
+ {
85
+ client: statistics[:client_id],
86
+ }
87
+ end
88
+
89
+ def convert_microseconds_to_seconds(time_in_microseconds)
90
+ time_in_microseconds / 1_000_000.to_f
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,8 @@
1
+ require "active_support/subscriber"
2
+
3
+ module Promenade
4
+ module Waterdrop
5
+ class Subscriber < ActiveSupport::Subscriber
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require "promenade/waterdrop/message_subscriber"
2
+ require "promenade/waterdrop/error_subscriber"
3
+ require "promenade/waterdrop/statistics_subscriber"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promenade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ed Robinson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-08 00:00:00.000000000 Z
11
+ date: 2023-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -297,6 +297,11 @@ files:
297
297
  - lib/promenade/railtie.rb
298
298
  - lib/promenade/setup.rb
299
299
  - lib/promenade/version.rb
300
+ - lib/promenade/waterdrop.rb
301
+ - lib/promenade/waterdrop/error_subscriber.rb
302
+ - lib/promenade/waterdrop/message_subscriber.rb
303
+ - lib/promenade/waterdrop/statistics_subscriber.rb
304
+ - lib/promenade/waterdrop/subscriber.rb
300
305
  - promenade.gemspec
301
306
  homepage: https://github.com/errm/promenade
302
307
  licenses:
@@ -318,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
323
  - !ruby/object:Gem::Version
319
324
  version: '0'
320
325
  requirements: []
321
- rubygems_version: 3.3.7
326
+ rubygems_version: 3.4.10
322
327
  signing_key:
323
328
  specification_version: 4
324
329
  summary: Promenade makes it simple to instrument Ruby apps for prometheus scraping