From 2e5a36e53869f558d5fdebd964e711be0e4189d4 Mon Sep 17 00:00:00 2001 From: Molly Struve Date: Wed, 15 Jan 2020 12:33:14 -0500 Subject: [PATCH] Log DB Table sizes in a Sidekiq Worker (#5518) --- .../metrics/record_db_table_counts_worker.rb | 15 +++++++++++++++ lib/tasks/fetch.rake | 7 +------ .../record_db_table_counts_worker_spec.rb | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 app/workers/metrics/record_db_table_counts_worker.rb create mode 100644 spec/workers/metrics/record_db_table_counts_worker_spec.rb diff --git a/app/workers/metrics/record_db_table_counts_worker.rb b/app/workers/metrics/record_db_table_counts_worker.rb new file mode 100644 index 000000000..569745402 --- /dev/null +++ b/app/workers/metrics/record_db_table_counts_worker.rb @@ -0,0 +1,15 @@ +module Metrics + class RecordDbTableCountsWorker + include Sidekiq::Worker + sidekiq_options queue: :low_priority, retry: 10 + + def perform + models = [User, Article, Organization, Comment, Podcast, ClassifiedListing, PageView] + models.each do |model| + estimate = model.estimated_count + Rails.logger.info("db_table_size", table_info: { table_name: model.table_name, table_size: estimate }) + DataDogStatsClient.gauge("postgres.db_table_size", estimate, tags: { table_name: model.table_name }) + end + end + end +end diff --git a/lib/tasks/fetch.rake b/lib/tasks/fetch.rake index f2af0e882..f8d0a78de 100644 --- a/lib/tasks/fetch.rake +++ b/lib/tasks/fetch.rake @@ -113,12 +113,7 @@ task fix_credits_count_cache: :environment do end task record_db_table_counts: :environment do - models = [User, Article, Organization, Comment, Podcast, ClassifiedListing, PageView] - models.each do |model| - estimate = model.estimated_count - Rails.logger.info("db_table_size", table_info: { table_name: model.table_name, table_size: estimate }) - DataDogStatsClient.gauge("postgres.db_table_size", estimate, tags: { table_name: model.table_name }) - end + RecordDbTableCountsWorker.perform_async end task log_worker_queue_stats: :environment do diff --git a/spec/workers/metrics/record_db_table_counts_worker_spec.rb b/spec/workers/metrics/record_db_table_counts_worker_spec.rb new file mode 100644 index 000000000..474a2b178 --- /dev/null +++ b/spec/workers/metrics/record_db_table_counts_worker_spec.rb @@ -0,0 +1,16 @@ +require "rails_helper" + +RSpec.describe Metrics::RecordDbTableCountsWorker, type: :worker do + include_examples "#enqueues_on_correct_queue", "low_priority", 1 + + describe "#perform" do + it "logs estimated counts in Datadog" do + allow(DataDogStatsClient).to receive(:gauge) + described_class.new.perform + + expect( + DataDogStatsClient, + ).to have_received(:gauge).with("postgres.db_table_size", 0, Hash).at_least(1) + end + end +end