findbug 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +8 -0
- data/LICENSE.txt +21 -0
- data/README.md +375 -0
- data/Rakefile +12 -0
- data/app/controllers/findbug/application_controller.rb +105 -0
- data/app/controllers/findbug/dashboard_controller.rb +93 -0
- data/app/controllers/findbug/errors_controller.rb +129 -0
- data/app/controllers/findbug/performance_controller.rb +80 -0
- data/app/jobs/findbug/alert_job.rb +40 -0
- data/app/jobs/findbug/cleanup_job.rb +132 -0
- data/app/jobs/findbug/persist_job.rb +158 -0
- data/app/models/findbug/error_event.rb +197 -0
- data/app/models/findbug/performance_event.rb +237 -0
- data/app/views/findbug/dashboard/index.html.erb +199 -0
- data/app/views/findbug/errors/index.html.erb +137 -0
- data/app/views/findbug/errors/show.html.erb +185 -0
- data/app/views/findbug/performance/index.html.erb +168 -0
- data/app/views/findbug/performance/show.html.erb +203 -0
- data/app/views/layouts/findbug/application.html.erb +601 -0
- data/lib/findbug/alerts/channels/base.rb +75 -0
- data/lib/findbug/alerts/channels/discord.rb +155 -0
- data/lib/findbug/alerts/channels/email.rb +179 -0
- data/lib/findbug/alerts/channels/slack.rb +149 -0
- data/lib/findbug/alerts/channels/webhook.rb +143 -0
- data/lib/findbug/alerts/dispatcher.rb +126 -0
- data/lib/findbug/alerts/throttler.rb +110 -0
- data/lib/findbug/background_persister.rb +142 -0
- data/lib/findbug/capture/context.rb +301 -0
- data/lib/findbug/capture/exception_handler.rb +141 -0
- data/lib/findbug/capture/exception_subscriber.rb +228 -0
- data/lib/findbug/capture/message_handler.rb +104 -0
- data/lib/findbug/capture/middleware.rb +247 -0
- data/lib/findbug/configuration.rb +381 -0
- data/lib/findbug/engine.rb +109 -0
- data/lib/findbug/performance/instrumentation.rb +336 -0
- data/lib/findbug/performance/transaction.rb +193 -0
- data/lib/findbug/processing/data_scrubber.rb +163 -0
- data/lib/findbug/rails/controller_methods.rb +152 -0
- data/lib/findbug/railtie.rb +222 -0
- data/lib/findbug/storage/circuit_breaker.rb +223 -0
- data/lib/findbug/storage/connection_pool.rb +134 -0
- data/lib/findbug/storage/redis_buffer.rb +285 -0
- data/lib/findbug/tasks/findbug.rake +167 -0
- data/lib/findbug/version.rb +5 -0
- data/lib/findbug.rb +216 -0
- data/lib/generators/findbug/install_generator.rb +67 -0
- data/lib/generators/findbug/templates/POST_INSTALL +41 -0
- data/lib/generators/findbug/templates/create_findbug_error_events.rb +44 -0
- data/lib/generators/findbug/templates/create_findbug_performance_events.rb +47 -0
- data/lib/generators/findbug/templates/initializer.rb +157 -0
- data/sig/findbug.rbs +4 -0
- metadata +251 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Findbug Configuration
|
|
4
|
+
#
|
|
5
|
+
# This file configures Findbug, your self-hosted error and performance monitoring.
|
|
6
|
+
# See https://github.com/ITSSOUMIT/findbug for full documentation.
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
Findbug.configure do |config|
|
|
10
|
+
# ============================================================================
|
|
11
|
+
# CORE SETTINGS
|
|
12
|
+
# ============================================================================
|
|
13
|
+
|
|
14
|
+
# Enable or disable Findbug (default: true)
|
|
15
|
+
# Set to false in test environment to reduce noise
|
|
16
|
+
config.enabled = !Rails.env.test?
|
|
17
|
+
|
|
18
|
+
# Redis URL for the buffer
|
|
19
|
+
# We recommend using a separate database (e.g., /1) from your main Redis
|
|
20
|
+
config.redis_url = ENV.fetch("FINDBUG_REDIS_URL", "redis://localhost:6379/1")
|
|
21
|
+
|
|
22
|
+
# Redis connection pool settings
|
|
23
|
+
config.redis_pool_size = ENV.fetch("FINDBUG_REDIS_POOL_SIZE", 5).to_i
|
|
24
|
+
|
|
25
|
+
# ============================================================================
|
|
26
|
+
# ERROR CAPTURE
|
|
27
|
+
# ============================================================================
|
|
28
|
+
|
|
29
|
+
# Sample rate for error capture (0.0 to 1.0)
|
|
30
|
+
# 1.0 = capture 100% of errors (recommended for most apps)
|
|
31
|
+
# Lower this for extremely high-traffic apps
|
|
32
|
+
config.sample_rate = 1.0
|
|
33
|
+
|
|
34
|
+
# Exceptions to ignore (won't be captured)
|
|
35
|
+
# Add exceptions that are "expected" in normal operation
|
|
36
|
+
config.ignored_exceptions = [
|
|
37
|
+
ActiveRecord::RecordNotFound, # 404s
|
|
38
|
+
ActionController::RoutingError, # Invalid routes
|
|
39
|
+
ActionController::UnknownFormat # Format not supported
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
# URL paths to ignore (regex patterns)
|
|
43
|
+
# Useful for health checks, assets, etc.
|
|
44
|
+
config.ignored_paths = [
|
|
45
|
+
/^\/health/,
|
|
46
|
+
/^\/assets/,
|
|
47
|
+
/^\/packs/
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
# ============================================================================
|
|
51
|
+
# PERFORMANCE MONITORING
|
|
52
|
+
# ============================================================================
|
|
53
|
+
|
|
54
|
+
# Enable performance monitoring (default: true)
|
|
55
|
+
config.performance_enabled = true
|
|
56
|
+
|
|
57
|
+
# Sample rate for performance data (0.0 to 1.0)
|
|
58
|
+
# Performance data is more voluminous, so sampling is common
|
|
59
|
+
config.performance_sample_rate = 0.1 # 10% of requests
|
|
60
|
+
|
|
61
|
+
# Only capture requests slower than this (in ms)
|
|
62
|
+
# Set to 0 to capture all sampled requests
|
|
63
|
+
config.slow_request_threshold_ms = 0
|
|
64
|
+
|
|
65
|
+
# Threshold for flagging slow SQL queries (in ms)
|
|
66
|
+
config.slow_query_threshold_ms = 100
|
|
67
|
+
|
|
68
|
+
# ============================================================================
|
|
69
|
+
# DATA SCRUBBING (Security)
|
|
70
|
+
# ============================================================================
|
|
71
|
+
|
|
72
|
+
# Field names to scrub (replaced with [FILTERED])
|
|
73
|
+
# Add any custom sensitive fields your app uses
|
|
74
|
+
config.scrub_fields = %w[
|
|
75
|
+
password
|
|
76
|
+
password_confirmation
|
|
77
|
+
secret
|
|
78
|
+
token
|
|
79
|
+
api_key
|
|
80
|
+
credit_card
|
|
81
|
+
ssn
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
# Scrub sensitive headers (default: true)
|
|
85
|
+
config.scrub_headers = true
|
|
86
|
+
|
|
87
|
+
# ============================================================================
|
|
88
|
+
# STORAGE & RETENTION
|
|
89
|
+
# ============================================================================
|
|
90
|
+
|
|
91
|
+
# How many days to keep data (default: 30)
|
|
92
|
+
config.retention_days = 30
|
|
93
|
+
|
|
94
|
+
# Maximum events in Redis buffer before old ones are dropped
|
|
95
|
+
config.max_buffer_size = 10_000
|
|
96
|
+
|
|
97
|
+
# Queue name for Findbug background jobs
|
|
98
|
+
config.queue_name = "findbug"
|
|
99
|
+
|
|
100
|
+
# ============================================================================
|
|
101
|
+
# WEB DASHBOARD
|
|
102
|
+
# ============================================================================
|
|
103
|
+
|
|
104
|
+
# Dashboard authentication (required for dashboard to be enabled)
|
|
105
|
+
# We recommend using environment variables for security
|
|
106
|
+
config.web_username = ENV["FINDBUG_USERNAME"]
|
|
107
|
+
config.web_password = ENV["FINDBUG_PASSWORD"]
|
|
108
|
+
|
|
109
|
+
# Dashboard URL path (default: "/findbug")
|
|
110
|
+
config.web_path = "/findbug"
|
|
111
|
+
|
|
112
|
+
# ============================================================================
|
|
113
|
+
# ALERTS
|
|
114
|
+
# ============================================================================
|
|
115
|
+
|
|
116
|
+
config.alerts do |alerts|
|
|
117
|
+
# Throttle period - don't alert for same error more than once in this period
|
|
118
|
+
alerts.throttle_period = 5.minutes
|
|
119
|
+
|
|
120
|
+
# Email alerts
|
|
121
|
+
# alerts.email(
|
|
122
|
+
# enabled: true,
|
|
123
|
+
# recipients: ["dev-team@example.com"]
|
|
124
|
+
# )
|
|
125
|
+
|
|
126
|
+
# Slack alerts
|
|
127
|
+
# alerts.slack(
|
|
128
|
+
# enabled: true,
|
|
129
|
+
# webhook_url: ENV["SLACK_WEBHOOK_URL"],
|
|
130
|
+
# channel: "#errors" # optional
|
|
131
|
+
# )
|
|
132
|
+
|
|
133
|
+
# Discord alerts
|
|
134
|
+
# alerts.discord(
|
|
135
|
+
# enabled: true,
|
|
136
|
+
# webhook_url: ENV["DISCORD_WEBHOOK_URL"]
|
|
137
|
+
# )
|
|
138
|
+
|
|
139
|
+
# Generic webhook
|
|
140
|
+
# alerts.webhook(
|
|
141
|
+
# enabled: true,
|
|
142
|
+
# url: "https://your-service.com/findbug-webhook",
|
|
143
|
+
# headers: { "Authorization" => "Bearer #{ENV['WEBHOOK_TOKEN']}" }
|
|
144
|
+
# )
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# ============================================================================
|
|
148
|
+
# MISC
|
|
149
|
+
# ============================================================================
|
|
150
|
+
|
|
151
|
+
# Release/version identifier (auto-detected from git or ENV)
|
|
152
|
+
# Useful for tracking which deploy introduced a bug
|
|
153
|
+
# config.release = ENV["GIT_COMMIT"]
|
|
154
|
+
|
|
155
|
+
# Custom logger (defaults to Rails.logger)
|
|
156
|
+
# config.logger = Rails.logger
|
|
157
|
+
end
|
data/sig/findbug.rbs
ADDED
metadata
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: findbug
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Soumit Das
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 2026-01-04 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: railties
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '7.0'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '9.0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '7.0'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '9.0'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: activesupport
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '7.0'
|
|
39
|
+
- - "<"
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '9.0'
|
|
42
|
+
type: :runtime
|
|
43
|
+
prerelease: false
|
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '7.0'
|
|
49
|
+
- - "<"
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '9.0'
|
|
52
|
+
- !ruby/object:Gem::Dependency
|
|
53
|
+
name: activerecord
|
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '7.0'
|
|
59
|
+
- - "<"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '9.0'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '7.0'
|
|
69
|
+
- - "<"
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '9.0'
|
|
72
|
+
- !ruby/object:Gem::Dependency
|
|
73
|
+
name: activejob
|
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - ">="
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '7.0'
|
|
79
|
+
- - "<"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '9.0'
|
|
82
|
+
type: :runtime
|
|
83
|
+
prerelease: false
|
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '7.0'
|
|
89
|
+
- - "<"
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '9.0'
|
|
92
|
+
- !ruby/object:Gem::Dependency
|
|
93
|
+
name: redis
|
|
94
|
+
requirement: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ">="
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '4.0'
|
|
99
|
+
- - "<"
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '6.0'
|
|
102
|
+
type: :runtime
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
requirements:
|
|
106
|
+
- - ">="
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: '4.0'
|
|
109
|
+
- - "<"
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '6.0'
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: connection_pool
|
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - "~>"
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '2.2'
|
|
119
|
+
type: :runtime
|
|
120
|
+
prerelease: false
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - "~>"
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '2.2'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: turbo-rails
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - ">="
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: '1.0'
|
|
133
|
+
- - "<"
|
|
134
|
+
- !ruby/object:Gem::Version
|
|
135
|
+
version: '3.0'
|
|
136
|
+
type: :runtime
|
|
137
|
+
prerelease: false
|
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
139
|
+
requirements:
|
|
140
|
+
- - ">="
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: '1.0'
|
|
143
|
+
- - "<"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '3.0'
|
|
146
|
+
- !ruby/object:Gem::Dependency
|
|
147
|
+
name: stimulus-rails
|
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '1.0'
|
|
153
|
+
- - "<"
|
|
154
|
+
- !ruby/object:Gem::Version
|
|
155
|
+
version: '3.0'
|
|
156
|
+
type: :runtime
|
|
157
|
+
prerelease: false
|
|
158
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
159
|
+
requirements:
|
|
160
|
+
- - ">="
|
|
161
|
+
- !ruby/object:Gem::Version
|
|
162
|
+
version: '1.0'
|
|
163
|
+
- - "<"
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '3.0'
|
|
166
|
+
description: Findbug is a Sentry-like error tracking and performance monitoring gem
|
|
167
|
+
that stores data locally using Redis and your database. Features include exception
|
|
168
|
+
capture, performance instrumentation, alerting, and a built-in dashboard.
|
|
169
|
+
email:
|
|
170
|
+
- its.soumit.das@gmail.com
|
|
171
|
+
executables: []
|
|
172
|
+
extensions: []
|
|
173
|
+
extra_rdoc_files: []
|
|
174
|
+
files:
|
|
175
|
+
- ".rspec"
|
|
176
|
+
- ".rubocop.yml"
|
|
177
|
+
- LICENSE.txt
|
|
178
|
+
- README.md
|
|
179
|
+
- Rakefile
|
|
180
|
+
- app/controllers/findbug/application_controller.rb
|
|
181
|
+
- app/controllers/findbug/dashboard_controller.rb
|
|
182
|
+
- app/controllers/findbug/errors_controller.rb
|
|
183
|
+
- app/controllers/findbug/performance_controller.rb
|
|
184
|
+
- app/jobs/findbug/alert_job.rb
|
|
185
|
+
- app/jobs/findbug/cleanup_job.rb
|
|
186
|
+
- app/jobs/findbug/persist_job.rb
|
|
187
|
+
- app/models/findbug/error_event.rb
|
|
188
|
+
- app/models/findbug/performance_event.rb
|
|
189
|
+
- app/views/findbug/dashboard/index.html.erb
|
|
190
|
+
- app/views/findbug/errors/index.html.erb
|
|
191
|
+
- app/views/findbug/errors/show.html.erb
|
|
192
|
+
- app/views/findbug/performance/index.html.erb
|
|
193
|
+
- app/views/findbug/performance/show.html.erb
|
|
194
|
+
- app/views/layouts/findbug/application.html.erb
|
|
195
|
+
- lib/findbug.rb
|
|
196
|
+
- lib/findbug/alerts/channels/base.rb
|
|
197
|
+
- lib/findbug/alerts/channels/discord.rb
|
|
198
|
+
- lib/findbug/alerts/channels/email.rb
|
|
199
|
+
- lib/findbug/alerts/channels/slack.rb
|
|
200
|
+
- lib/findbug/alerts/channels/webhook.rb
|
|
201
|
+
- lib/findbug/alerts/dispatcher.rb
|
|
202
|
+
- lib/findbug/alerts/throttler.rb
|
|
203
|
+
- lib/findbug/background_persister.rb
|
|
204
|
+
- lib/findbug/capture/context.rb
|
|
205
|
+
- lib/findbug/capture/exception_handler.rb
|
|
206
|
+
- lib/findbug/capture/exception_subscriber.rb
|
|
207
|
+
- lib/findbug/capture/message_handler.rb
|
|
208
|
+
- lib/findbug/capture/middleware.rb
|
|
209
|
+
- lib/findbug/configuration.rb
|
|
210
|
+
- lib/findbug/engine.rb
|
|
211
|
+
- lib/findbug/performance/instrumentation.rb
|
|
212
|
+
- lib/findbug/performance/transaction.rb
|
|
213
|
+
- lib/findbug/processing/data_scrubber.rb
|
|
214
|
+
- lib/findbug/rails/controller_methods.rb
|
|
215
|
+
- lib/findbug/railtie.rb
|
|
216
|
+
- lib/findbug/storage/circuit_breaker.rb
|
|
217
|
+
- lib/findbug/storage/connection_pool.rb
|
|
218
|
+
- lib/findbug/storage/redis_buffer.rb
|
|
219
|
+
- lib/findbug/tasks/findbug.rake
|
|
220
|
+
- lib/findbug/version.rb
|
|
221
|
+
- lib/generators/findbug/install_generator.rb
|
|
222
|
+
- lib/generators/findbug/templates/POST_INSTALL
|
|
223
|
+
- lib/generators/findbug/templates/create_findbug_error_events.rb
|
|
224
|
+
- lib/generators/findbug/templates/create_findbug_performance_events.rb
|
|
225
|
+
- lib/generators/findbug/templates/initializer.rb
|
|
226
|
+
- sig/findbug.rbs
|
|
227
|
+
homepage: https://github.com/ITSSOUMIT/findbug
|
|
228
|
+
licenses:
|
|
229
|
+
- MIT
|
|
230
|
+
metadata:
|
|
231
|
+
homepage_uri: https://github.com/ITSSOUMIT/findbug
|
|
232
|
+
source_code_uri: https://github.com/ITSSOUMIT/findbug
|
|
233
|
+
changelog_uri: https://github.com/ITSSOUMIT/findbug/blob/main/CHANGELOG.md
|
|
234
|
+
rdoc_options: []
|
|
235
|
+
require_paths:
|
|
236
|
+
- lib
|
|
237
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
238
|
+
requirements:
|
|
239
|
+
- - ">="
|
|
240
|
+
- !ruby/object:Gem::Version
|
|
241
|
+
version: 3.1.0
|
|
242
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
|
+
requirements:
|
|
244
|
+
- - ">="
|
|
245
|
+
- !ruby/object:Gem::Version
|
|
246
|
+
version: '0'
|
|
247
|
+
requirements: []
|
|
248
|
+
rubygems_version: 3.6.3
|
|
249
|
+
specification_version: 4
|
|
250
|
+
summary: Self-hosted error tracking and performance monitoring for Rails
|
|
251
|
+
test_files: []
|