diff --git a/app/models/admin_dashboard_data.rb b/app/models/admin_dashboard_data.rb index abe94003d..001d23f3c 100644 --- a/app/models/admin_dashboard_data.rb +++ b/app/models/admin_dashboard_data.rb @@ -32,28 +32,37 @@ class AdminDashboardData MOBILE_REPORTS ||= ['mobile_visits'] + ApplicationRequest.req_types.keys.select {|r| r =~ /mobile/}.map { |r| r + "_reqs" } + def self.add_problem_check(*syms, &blk) + @problem_syms ||= [] + @problem_blocks ||= [] + + @problem_syms.push(*syms) if syms + @problem_blocks << blk if blk + end + class << self; attr_reader :problem_syms, :problem_blocks; end + def problems - [ rails_env_check, - ruby_version_check, - host_names_check, - gc_checks, - sidekiq_check || queue_size_check, - ram_check, - google_oauth2_config_check, - facebook_config_check, - twitter_config_check, - github_config_check, - s3_config_check, - image_magick_check, - failing_emails_check, - default_logo_check, - contact_email_check, - send_consumer_email_check, - title_check, - site_description_check, - site_contact_username_check, - notification_email_check - ].compact + problems = [] + AdminDashboardData.problem_syms.each do |sym| + problems << send(sym) + end + AdminDashboardData.problem_blocks.each do |blk| + problems << instance_exec(&blk) + end + problems.compact + end + + add_problem_check :rails_env_check, :ruby_version_check, :host_names_check, + :gc_checks, :ram_check, :google_oauth2_config_check, + :facebook_config_check, :twitter_config_check, + :github_config_check, :s3_config_check, :image_magick_check, + :failing_emails_check, :default_logo_check, :contact_email_check, + :send_consumer_email_check, :title_check, + :site_description_check, :site_contact_username_check, + :notification_email_check + + add_problem_check do + sidekiq_check || queue_size_check end diff --git a/spec/models/admin_dashboard_data_spec.rb b/spec/models/admin_dashboard_data_spec.rb index 30dd8ec2f..80286f860 100644 --- a/spec/models/admin_dashboard_data_spec.rb +++ b/spec/models/admin_dashboard_data_spec.rb @@ -2,6 +2,32 @@ require 'spec_helper' describe AdminDashboardData do + describe "adding new checks" do + it 'calls the passed block' do + called = false + AdminDashboardData.add_problem_check do + called = true + end + + AdminDashboardData.fetch_problems + expect(called).to eq(true) + end + + it 'calls the passed method' do + $test_AdminDashboardData_global = false + class AdminDashboardData + def my_test_method + $test_AdminDashboardData_global = true + end + end + AdminDashboardData.add_problem_check :my_test_method + + AdminDashboardData.fetch_problems + expect($test_AdminDashboardData_global).to eq(true) + $test_AdminDashboardData_global = nil + end + end + describe "rails_env_check" do subject { described_class.new.rails_env_check }