Module: ActiveRecord::Health

Defined in:
lib/activerecord/health.rb,
lib/activerecord/health/railtie.rb,
lib/activerecord/health/extensions.rb,
lib/activerecord/health/configuration.rb,
lib/activerecord/health/adapters/mysql_adapter.rb,
lib/activerecord/health/adapters/postgresql_adapter.rb

Defined Under Namespace

Modules: Adapters, ConnectionExtension, ModelExtension Classes: Configuration, ConfigurationError, ConnectionModelProxy, DbConfigProxy, ModelConfiguration, Railtie

Constant Summary collapse

QUERY_TIMEOUT =
1

Class Method Summary collapse

Class Method Details

.configurationObject



18
19
20
# File 'lib/activerecord/health.rb', line 18

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



14
15
16
# File 'lib/activerecord/health.rb', line 14

def configure
  yield(configuration)
end

.load_pct(model: ActiveRecord::Base) ⇒ Object



30
31
32
33
34
35
# File 'lib/activerecord/health.rb', line 30

def load_pct(model: ActiveRecord::Base)
  db_config_name = model.connection_db_config.name
  cache_key = "activerecord_health:load_pct:#{db_config_name}"

  read_from_cache(cache_key) { query_load_pct(model) }
end

.ok?(model: ActiveRecord::Base) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/activerecord/health.rb', line 26

def ok?(model: ActiveRecord::Base)
  load_pct(model: model) <= config_for(model).threshold
end

.reset_configuration!Object



22
23
24
# File 'lib/activerecord/health.rb', line 22

def reset_configuration!
  @configuration = nil
end

.sheddable(model: ActiveRecord::Base) ⇒ Object



37
38
39
40
41
# File 'lib/activerecord/health.rb', line 37

def sheddable(model: ActiveRecord::Base)
  return false unless ok?(model: model)
  yield
  true
end

.sheddable_pct(pct:, model: ActiveRecord::Base) ⇒ Object



43
44
45
46
47
# File 'lib/activerecord/health.rb', line 43

def sheddable_pct(pct:, model: ActiveRecord::Base)
  return false if load_pct(model: model) > pct
  yield
  true
end