Move yabeda/prometheus configuration to gem
This commit is contained in:
@@ -24,4 +24,15 @@ Gem::Specification.new do |spec|
|
||||
spec.add_dependency "rails", ">= 8.1.0.beta1"
|
||||
spec.add_dependency "queenbee"
|
||||
spec.add_dependency "rails_structured_logging"
|
||||
spec.add_dependency "sentry-ruby"
|
||||
spec.add_dependency "sentry-rails"
|
||||
spec.add_dependency "yabeda"
|
||||
spec.add_dependency "yabeda-actioncable"
|
||||
spec.add_dependency "yabeda-activejob"
|
||||
spec.add_dependency "yabeda-gc"
|
||||
spec.add_dependency "yabeda-http_requests"
|
||||
spec.add_dependency "yabeda-prometheus-mmap"
|
||||
spec.add_dependency "yabeda-puma-plugin"
|
||||
spec.add_dependency "yabeda-rails"
|
||||
spec.add_dependency "prometheus-client-mmap"
|
||||
end
|
||||
|
||||
@@ -18,6 +18,42 @@ module Fizzy
|
||||
app.config.middleware.insert_after(ActiveRecord::Middleware::DatabaseSelector, TransactionPinning::Middleware)
|
||||
end
|
||||
|
||||
initializer "fizzy_saas.sentry" do
|
||||
if !Rails.env.local? && ENV["SKIP_TELEMETRY"].blank?
|
||||
Sentry.init do |config|
|
||||
config.dsn = ENV["SENTRY_DSN"]
|
||||
config.breadcrumbs_logger = %i[ active_support_logger http_logger ]
|
||||
config.send_default_pii = false
|
||||
config.release = ENV["GIT_REVISION"]
|
||||
config.excluded_exceptions += [ "ActiveRecord::ConcurrentMigrationError" ]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
initializer "fizzy_saas.yabeda" do
|
||||
require "prometheus/client/support/puma"
|
||||
|
||||
Prometheus::Client.configuration.logger = Rails.logger
|
||||
Prometheus::Client.configuration.pid_provider = Prometheus::Client::Support::Puma.method(:worker_pid_provider)
|
||||
Yabeda::Rails.config.controller_name_case = :camel
|
||||
|
||||
Yabeda::ActiveJob.install!
|
||||
|
||||
require "yabeda/solid_queue"
|
||||
Yabeda::SolidQueue.install!
|
||||
|
||||
Yabeda::ActionCable.configure do |config|
|
||||
config.channel_class_name = "ActionCable::Channel::Base"
|
||||
end
|
||||
end
|
||||
|
||||
initializer "fizzy_saas.solid_queue" do
|
||||
SolidQueue.on_start do
|
||||
Process.warmup
|
||||
Yabeda::Prometheus::Exporter.start_metrics_server!
|
||||
end
|
||||
end
|
||||
|
||||
initializer "fizzy_saas.production_config", before: :load_config_initializers do |app|
|
||||
if Rails.env.local?
|
||||
if Rails.root.join("tmp/structured-logging.txt").exist?
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
module Yabeda
|
||||
module SolidQueue
|
||||
def self.install!
|
||||
Yabeda.configure do
|
||||
group :solid_queue
|
||||
|
||||
gauge :jobs_failed_count, comment: "Number of failed jobs"
|
||||
gauge :jobs_unreleased_count, comment: "Number of claimed jobs that don't belong to any process"
|
||||
gauge :jobs_scheduled_and_delayed_count, comment: "Number of scheduled jobs that have over 5 minutes delay"
|
||||
gauge :recurring_tasks_count, comment: "Number of recurring jobs scheduled"
|
||||
gauge :recurring_tasks_delayed_count, comment: "Number of recurring jobs that haven't been enqueued within their schedule"
|
||||
|
||||
collect do
|
||||
if ::SolidQueue.supervisor?
|
||||
solid_queue.jobs_failed_count.set({}, ::SolidQueue::FailedExecution.count)
|
||||
solid_queue.jobs_unreleased_count.set({}, ::SolidQueue::ClaimedExecution.where(process: nil).count)
|
||||
solid_queue.jobs_scheduled_and_delayed_count.set({}, ::SolidQueue::ScheduledExecution.where(scheduled_at: ..5.minutes.ago).count)
|
||||
solid_queue.recurring_tasks_count.set({}, ::SolidQueue::RecurringTask.count)
|
||||
solid_queue.recurring_tasks_delayed_count.set({}, ::SolidQueue::RecurringTask.count do |task|
|
||||
task.last_enqueued_time.present? && (task.previous_time - task.last_enqueued_time) > 5.minutes
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user