Module: SidekiqVigil

Defined in:
lib/sidekiq_vigil.rb,
lib/sidekiq_vigil/cli.rb,
lib/sidekiq_vigil/config.rb,
lib/sidekiq_vigil/result.rb,
lib/sidekiq_vigil/checker.rb,
lib/sidekiq_vigil/runtime.rb,
lib/sidekiq_vigil/storage.rb,
lib/sidekiq_vigil/version.rb,
lib/sidekiq_vigil/reporter.rb,
lib/sidekiq_vigil/timezone.rb,
lib/sidekiq_vigil/collector.rb,
lib/sidekiq_vigil/alert/cron.rb,
lib/sidekiq_vigil/alert/mute.rb,
lib/sidekiq_vigil/check/base.rb,
lib/sidekiq_vigil/health_app.rb,
lib/sidekiq_vigil/alert/event.rb,
lib/sidekiq_vigil/alert/state.rb,
lib/sidekiq_vigil/sidekiq_api.rb,
lib/sidekiq_vigil/check/memory.rb,
lib/sidekiq_vigil/notifier/log.rb,
lib/sidekiq_vigil/alert/manager.rb,
lib/sidekiq_vigil/notifier/base.rb,
lib/sidekiq_vigil/alert/grouping.rb,
lib/sidekiq_vigil/check/registry.rb,
lib/sidekiq_vigil/check/set_size.rb,
lib/sidekiq_vigil/notifier/slack.rb,
lib/sidekiq_vigil/leader_election.rb,
lib/sidekiq_vigil/check/queue_size.rb,
lib/sidekiq_vigil/check/stuck_jobs.rb,
lib/sidekiq_vigil/notifier/manager.rb,
lib/sidekiq_vigil/notifier/webhook.rb,
lib/sidekiq_vigil/check/utilization.rb,
lib/sidekiq_vigil/middleware/server.rb,
lib/sidekiq_vigil/check/failure_rate.rb,
lib/sidekiq_vigil/check/redis_health.rb,
lib/sidekiq_vigil/check/process_alive.rb,
lib/sidekiq_vigil/check/queue_latency.rb,
lib/sidekiq_vigil/check/scheduled_backlog.rb,
lib/sidekiq_vigil/notifier/http_transport.rb,
lib/sidekiq_vigil/check/throughput_anomaly.rb

Defined Under Namespace

Modules: Alert, Check, Middleware, Notifier, Timezone Classes: AlertingConfig, CLI, Checker, Collector, Config, ConfigError, Error, HealthApp, LeaderElection, Reporter, Result, Runtime, SidekiqApi, Storage

Constant Summary collapse

BUILT_IN_CHECKS =
{
  queue_latency: SidekiqVigil::Check::QueueLatency,
  queue_size: SidekiqVigil::Check::QueueSize,
  retry_set: SidekiqVigil::Check::RetrySet,
  dead_set: SidekiqVigil::Check::DeadSet,
  process_alive: SidekiqVigil::Check::ProcessAlive,
  utilization: SidekiqVigil::Check::Utilization,
  failure_rate: SidekiqVigil::Check::FailureRate,
  stuck_jobs: SidekiqVigil::Check::StuckJobs,
  memory: SidekiqVigil::Check::Memory,
  redis_health: SidekiqVigil::Check::RedisHealth,
  scheduled_backlog: SidekiqVigil::Check::ScheduledBacklog,
  throughput_anomaly: SidekiqVigil::Check::ThroughputAnomaly
}.freeze
VERSION =
"0.1.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject



29
30
31
# File 'lib/sidekiq_vigil.rb', line 29

def logger
  @logger ||= defined?(Sidekiq.logger) ? Sidekiq.logger : Logger.new($stdout)
end

Class Method Details

.build_storage(configuration = config) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/sidekiq_vigil.rb', line 33

def build_storage(configuration = config)
  redis = if configuration.redis
            options = configuration.redis.transform_keys(&:to_sym).compact
            pool_size = options.delete(:pool_size) || 5
            pool_timeout = options.delete(:pool_timeout) || 1
            RedisClient.config(**options).new_pool(size: pool_size, timeout: pool_timeout)
          end
  Storage.new(redis:, key_prefix: configuration.key_prefix)
end

.collectorObject



25
26
27
# File 'lib/sidekiq_vigil.rb', line 25

def collector
  @collector ||= Collector.new
end

.configObject



21
22
23
# File 'lib/sidekiq_vigil.rb', line 21

def config
  @config ||= Config.new
end

.configure {|config| ... } ⇒ Object

Yields:



15
16
17
18
19
# File 'lib/sidekiq_vigil.rb', line 15

def configure
  yield config
  config.validate!
  config
end

.install!Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/sidekiq_vigil.rb', line 43

def install!
  return if @installed

  Sidekiq.configure_server do |server|
    server.server_middleware { |chain| chain.add(Middleware::Server) }
    server.on(:startup) { start_runtime }
    server.on(:quiet) { @runtime&.quiet }
    server.on(:shutdown) { stop_runtime }
  end
  @installed = true
end

.reset!Object



65
66
67
68
69
70
# File 'lib/sidekiq_vigil.rb', line 65

def reset!
  @config = Config.new
  @collector = Collector.new
  @logger = nil
  @runtime = nil
end

.start_runtimeObject



55
56
57
58
# File 'lib/sidekiq_vigil.rb', line 55

def start_runtime
  @runtime ||= Runtime.new(config:, storage: build_storage)
  @runtime.start
end

.stop_runtimeObject



60
61
62
63
# File 'lib/sidekiq_vigil.rb', line 60

def stop_runtime
  @runtime&.stop
  @runtime = nil
end