Class: SolidQueueGuard::Generators::MetricsGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/solid_queue_guard/metrics/metrics_generator.rb

Constant Summary collapse

RECURRING_SNIPPET =
<<~YAML
  emit_solid_queue_depth_metrics:
    class: SolidQueueGuard::Metrics::EmitDepthJob
    queue: solid_queue_recurring
    schedule: every 15 seconds
YAML
CONFIG_SNIPPET =
<<~RUBY

  # Operational Datadog metrics (requires dogstatsd-ruby)
  config.emit_depth_metrics = true
  config.emit_event_metrics = true
  # config.statsd_service_name = 'my-service' # or set DD_SERVICE
RUBY

Instance Method Summary collapse

Instance Method Details

#add_recurring_taskObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/generators/solid_queue_guard/metrics/metrics_generator.rb', line 47

def add_recurring_task
  relative = 'config/recurring.yml'
  path = File.expand_path(relative, destination_root)

  unless File.exist?(path)
    say_status :skip, "#{relative} not found", :yellow
    return
  end

  content = File.read(path)
  if content.include?('emit_solid_queue_depth_metrics')
    say_status :identical, "#{relative} already has emit_solid_queue_depth_metrics", :blue
    return
  end

  updated = insert_recurring_snippet(content)
  File.write(path, updated)
  say_status :insert, "#{relative} (emit_solid_queue_depth_metrics)", :green
end

#enable_config_flagsObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/generators/solid_queue_guard/metrics/metrics_generator.rb', line 27

def enable_config_flags
  initializer = 'config/initializers/solid_queue_guard.rb'
  full_path = File.expand_path(initializer, destination_root)

  unless File.exist?(full_path)
    say_status :error, "#{initializer} not found — run solid_queue_guard:install first", :red
    return
  end

  contents = File.read(full_path)
  if contents.include?('emit_depth_metrics')
    say_status :identical, "#{initializer} already enables depth metrics", :blue
    return
  end

  inject_into_file initializer, before: /\nend\s*\z/ do
    CONFIG_SNIPPET
  end
end

#remind_dependencyObject



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/generators/solid_queue_guard/metrics/metrics_generator.rb', line 67

def remind_dependency
  say <<~MSG

    Add to your Gemfile if missing:
      gem 'dogstatsd-ruby'

    Ensure a Solid Queue worker consumes the `solid_queue_recurring` queue,
    then deploy and verify:
      solid_queue.ready.count{service:<your-service>}
  MSG
end