Class: Railswatch::Pruner
- Inherits:
-
Object
- Object
- Railswatch::Pruner
- Defined in:
- lib/railswatch/pruner.rb
Constant Summary collapse
- DEFAULT_BATCH_SIZE =
1_000- MODEL_TYPES =
{ requests: 'RequestRecord', sidekiq: 'SidekiqRecord', delayed_job: 'DelayedJobRecord', grape: 'GrapeRecord', rake: 'RakeRecord', custom: 'CustomRecord', resources: 'ResourceRecord', traces: 'TraceRecord', events: 'EventRecord' }.freeze
Class Method Summary collapse
- .call(batch_size: DEFAULT_BATCH_SIZE) ⇒ Object
- .delete_in_batches(model, threshold, batch_size) ⇒ Object
- .deleted_records(type, class_name, batch_size) ⇒ Object
Class Method Details
.call(batch_size: DEFAULT_BATCH_SIZE) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/railswatch/pruner.rb', line 19 def self.call(batch_size: DEFAULT_BATCH_SIZE) MODEL_TYPES.each_with_object({}) do |(type, class_name), results| deleted = deleted_records(type, class_name, batch_size) results[type] = deleted unless deleted.nil? end end |
.delete_in_batches(model, threshold, batch_size) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/railswatch/pruner.rb', line 36 def self.delete_in_batches(model, threshold, batch_size) deleted = 0 loop do ids = model.where('occurred_at < ?', threshold).limit(batch_size).pluck(:id) break deleted if ids.empty? deleted += model.where(id: ids).delete_all end end |
.deleted_records(type, class_name, batch_size) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/railswatch/pruner.rb', line 26 def self.deleted_records(type, class_name, batch_size) retention = Railswatch.retention[type] return if retention.nil? model = Railswatch::Models.const_get(class_name) threshold = Railswatch::Utils.kind_of_now - retention delete_in_batches(model, threshold, batch_size) end |