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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +8 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +375 -0
  6. data/Rakefile +12 -0
  7. data/app/controllers/findbug/application_controller.rb +105 -0
  8. data/app/controllers/findbug/dashboard_controller.rb +93 -0
  9. data/app/controllers/findbug/errors_controller.rb +129 -0
  10. data/app/controllers/findbug/performance_controller.rb +80 -0
  11. data/app/jobs/findbug/alert_job.rb +40 -0
  12. data/app/jobs/findbug/cleanup_job.rb +132 -0
  13. data/app/jobs/findbug/persist_job.rb +158 -0
  14. data/app/models/findbug/error_event.rb +197 -0
  15. data/app/models/findbug/performance_event.rb +237 -0
  16. data/app/views/findbug/dashboard/index.html.erb +199 -0
  17. data/app/views/findbug/errors/index.html.erb +137 -0
  18. data/app/views/findbug/errors/show.html.erb +185 -0
  19. data/app/views/findbug/performance/index.html.erb +168 -0
  20. data/app/views/findbug/performance/show.html.erb +203 -0
  21. data/app/views/layouts/findbug/application.html.erb +601 -0
  22. data/lib/findbug/alerts/channels/base.rb +75 -0
  23. data/lib/findbug/alerts/channels/discord.rb +155 -0
  24. data/lib/findbug/alerts/channels/email.rb +179 -0
  25. data/lib/findbug/alerts/channels/slack.rb +149 -0
  26. data/lib/findbug/alerts/channels/webhook.rb +143 -0
  27. data/lib/findbug/alerts/dispatcher.rb +126 -0
  28. data/lib/findbug/alerts/throttler.rb +110 -0
  29. data/lib/findbug/background_persister.rb +142 -0
  30. data/lib/findbug/capture/context.rb +301 -0
  31. data/lib/findbug/capture/exception_handler.rb +141 -0
  32. data/lib/findbug/capture/exception_subscriber.rb +228 -0
  33. data/lib/findbug/capture/message_handler.rb +104 -0
  34. data/lib/findbug/capture/middleware.rb +247 -0
  35. data/lib/findbug/configuration.rb +381 -0
  36. data/lib/findbug/engine.rb +109 -0
  37. data/lib/findbug/performance/instrumentation.rb +336 -0
  38. data/lib/findbug/performance/transaction.rb +193 -0
  39. data/lib/findbug/processing/data_scrubber.rb +163 -0
  40. data/lib/findbug/rails/controller_methods.rb +152 -0
  41. data/lib/findbug/railtie.rb +222 -0
  42. data/lib/findbug/storage/circuit_breaker.rb +223 -0
  43. data/lib/findbug/storage/connection_pool.rb +134 -0
  44. data/lib/findbug/storage/redis_buffer.rb +285 -0
  45. data/lib/findbug/tasks/findbug.rake +167 -0
  46. data/lib/findbug/version.rb +5 -0
  47. data/lib/findbug.rb +216 -0
  48. data/lib/generators/findbug/install_generator.rb +67 -0
  49. data/lib/generators/findbug/templates/POST_INSTALL +41 -0
  50. data/lib/generators/findbug/templates/create_findbug_error_events.rb +44 -0
  51. data/lib/generators/findbug/templates/create_findbug_performance_events.rb +47 -0
  52. data/lib/generators/findbug/templates/initializer.rb +157 -0
  53. data/sig/findbug.rbs +4 -0
  54. 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
@@ -0,0 +1,4 @@
1
+ module Findbug
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
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: []