Get detailed info about new versions from the Discourse Hub. Include version notes from the latest version in notification email.

This commit is contained in:
Neil Lalonde 2013-12-31 15:52:16 -05:00
parent 4f8aed295a
commit df220ae973
5 changed files with 62 additions and 8 deletions

View File

@ -8,7 +8,7 @@ module Jobs
def execute(args)
if SiteSetting.version_checks? and (DiscourseUpdates.updated_at.nil? or DiscourseUpdates.updated_at < 1.minute.ago)
begin
should_send_email = (SiteSetting.new_version_emails and DiscourseUpdates.missing_versions_count and DiscourseUpdates.missing_versions_count == 0)
prev_missing_versions_count = DiscourseUpdates.missing_versions_count || 0
json = DiscourseHub.discourse_version_check
DiscourseUpdates.last_installed_version = Discourse::VERSION::STRING
@ -16,8 +16,9 @@ module Jobs
DiscourseUpdates.critical_updates_available = json['criticalUpdates']
DiscourseUpdates.missing_versions_count = json['missingVersionsCount']
DiscourseUpdates.updated_at = Time.zone.now
DiscourseUpdates.missing_versions = json['versions']
if should_send_email and json['missingVersionsCount'] > 0
if SiteSetting.new_version_emails and json['missingVersionsCount'] > 0 and prev_missing_versions_count < json['missingVersionsCount'].to_i
message = VersionMailer.send_notice
Email::Sender.new(message, :new_version).send
end

View File

@ -5,10 +5,19 @@ class VersionMailer < ActionMailer::Base
def send_notice
if SiteSetting.contact_email.present?
build_email( SiteSetting.contact_email,
template: 'new_version_mailer',
new_version: DiscourseUpdates.latest_version,
installed_version: Discourse::VERSION::STRING )
missing_versions = DiscourseUpdates.missing_versions
if missing_versions.present? and missing_versions.first['notes'].present?
build_email( SiteSetting.contact_email,
template: 'new_version_mailer_with_notes',
notes: missing_versions.first['notes'],
new_version: DiscourseUpdates.latest_version,
installed_version: Discourse::VERSION::STRING )
else
build_email( SiteSetting.contact_email,
template: 'new_version_mailer',
new_version: DiscourseUpdates.latest_version,
installed_version: Discourse::VERSION::STRING )
end
end
end
end

View File

@ -927,11 +927,22 @@ en:
text_body_template: |
A new version of Discourse is available.
Your version: %{installed_version}
**New version: %{new_version}**
Please upgrade as soon as possible to get the latest fixes and new features.
new_version_mailer_with_notes:
subject_template: "[%{site_name}] Updates Are Available"
text_body_template: |
A new version of Discourse is available. Please upgrade as soon as possible to get the latest fixes and new features.
Your version: %{installed_version}
Please upgrade as soon as possible to get the latest fixes and new features.
**New version: %{new_version}**
%{notes}
system_messages:
post_hidden:

View File

@ -45,7 +45,8 @@ class DiscourseRedis
# Proxy key methods through, but prefix the keys with the namespace
[:append, :blpop, :brpop, :brpoplpush, :decr, :decrby, :del, :exists, :expire, :expireat, :get, :getbit, :getrange, :getset,
:hdel, :hexists, :hget, :hgetall, :hincrby, :hincrbyfloat, :hkeys, :hlen, :hmget, :hmset, :hset, :hsetnx, :hvals, :incr,
:incrby, :incrbyfloat, :lindex, :linsert, :llen, :lpop, :lpush, :lpushx, :lrange, :lrem, :lset, :ltrim, :mget, :move, :mset,
:incrby, :incrbyfloat, :lindex, :linsert, :llen, :lpop, :lpush, :lpushx, :lrange, :lrem, :lset, :ltrim,
:mapped_hmset, :mapped_hmget, :mapped_mget, :mapped_mset, :mapped_msetnx, :mget, :move, :mset,
:msetnx, :persist, :pexpire, :pexpireat, :psetex, :pttl, :rename, :renamenx, :rpop, :rpoplpush, :rpush, :rpushx, :sadd, :scard,
:sdiff, :set, :setbit, :setex, :setnx, :setrange, :sinter, :sismember, :smembers, :sort, :spop, :srandmember, :srem, :strlen,
:sunion, :ttl, :type, :watch, :zadd, :zcard, :zcount, :zincrby, :zrange, :zrangebyscore, :zrank, :zrem, :zremrangebyrank,

View File

@ -72,6 +72,30 @@ module DiscourseUpdates
end"
end
def missing_versions=(versions)
# delete previous list from redis
prev_keys = $redis.lrange(missing_versions_list_key, 0, 4)
if prev_keys
$redis.del prev_keys
$redis.del(missing_versions_list_key)
end
# store the list in redis
version_keys = []
versions[0,5].each do |v|
key = "#{missing_versions_key_prefix}:#{v['version']}"
$redis.mapped_hmset key, v
version_keys << key
end
$redis.rpush missing_versions_list_key, version_keys
versions
end
def missing_versions
keys = $redis.lrange(missing_versions_list_key, 0, 4) # max of 5 versions
keys.present? ? keys.map { |k| $redis.hgetall(k) } : []
end
private
@ -94,5 +118,13 @@ module DiscourseUpdates
def updated_at_key
'last_version_check_at'
end
def missing_versions_list_key
'missing_versions'
end
def missing_versions_key_prefix
'missing_version'
end
end
end