Version checks: tolerate old version check data that can happen immediately after upgrading but forgetting to restart sidekiq/clockwork. Don't cache version check data along with other dashboard data.

This commit is contained in:
Neil Lalonde 2013-07-30 12:11:51 -04:00
parent fc25da09e3
commit 06140740d0
5 changed files with 40 additions and 8 deletions

View File

@ -4,6 +4,7 @@ class Admin::DashboardController < Admin::AdminController
dashboard_data = Rails.cache.fetch("admin-dashboard-data-#{Discourse::VERSION::STRING}", expires_in: 1.hour) do
AdminDashboardData.fetch_all.as_json
end
dashboard_data.merge!({version_check: DiscourseUpdates.check_version.as_json}) if SiteSetting.version_checks?
render json: dashboard_data
end

View File

@ -59,9 +59,7 @@ class AdminDashboardData
top_referrers: IncomingLinksReport.find('top_referrers').as_json,
top_traffic_sources: IncomingLinksReport.find('top_traffic_sources').as_json,
top_referred_topics: IncomingLinksReport.find('top_referred_topics').as_json
}.merge(
SiteSetting.version_checks? ? {version_check: DiscourseUpdates.check_version.as_json} : {}
)
}
end
def rails_env_check

View File

@ -20,10 +20,19 @@ module DiscourseUpdates
)
end
if version_info.updated_at.nil? or
(version_info.missing_versions_count == 0 and version_info.latest_version != version_info.installed_version)
# Version check data is out of date.
Jobs.enqueue(:version_check, all_sites: true)
if SiteSetting.version_checks?
# Handle cases when version check data is old so we report something that makes sense
if (version_info.updated_at.nil? or
(version_info.missing_versions_count == 0 and version_info.latest_version != version_info.installed_version) or
(version_info.missing_versions_count != 0 and version_info.latest_version == version_info.installed_version))
Jobs.enqueue(:version_check, all_sites: true)
end
if !version_info.updated_at.nil? and version_info.latest_version == version_info.installed_version
version_info.missing_versions_count = 0
end
end
version_info

View File

@ -5,7 +5,7 @@ module Jobs
class VersionCheck < Jobs::Base
def execute(args)
if SiteSetting.version_checks and (DiscourseUpdates.updated_at.nil? or DiscourseUpdates.updated_at < 1.minute.ago)
if SiteSetting.version_checks? and (DiscourseUpdates.updated_at.nil? or DiscourseUpdates.updated_at < 1.minute.ago)
begin
json = DiscourseHub.discourse_version_check
DiscourseUpdates.latest_version = json['latestVersion']

View File

@ -81,4 +81,28 @@ describe DiscourseUpdates do
end
end
context 'old version check data' do
context 'installed is latest' do
before { stub_data(Discourse::VERSION::STRING, 1, false, 8.hours.ago) }
it 'queues a version check' do
Jobs.expects(:enqueue).with(:version_check, anything)
subject
end
it 'reports 0 missing versions' do
subject['missing_versions_count'].should == 0
end
end
context 'installed is not latest' do
before { stub_data('0.9.1', 0, false, 8.hours.ago) }
it 'queues a version check' do
Jobs.expects(:enqueue).with(:version_check, anything)
subject
end
end
end
end