Class: Jobs::ScheduleBackup

Inherits:
Scheduled show all
Defined in:
app/jobs/scheduled/schedule_backup.rb

Instance Method Summary collapse

Methods inherited from Scheduled

#perform

Methods inherited from Base

acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately

Instance Method Details

#execute(args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/jobs/scheduled/schedule_backup.rb', line 8

def execute(args)
  return unless SiteSetting.enable_backups? && SiteSetting.automatic_backups_enabled?

  store = BackupRestore::BackupStore.create
  if latest_backup = store.latest_file
    date = latest_backup.last_modified.to_date
    return if (date + SiteSetting.backup_frequency.days) > Time.now.utc.to_date
  end

  ::Jobs.cancel_scheduled_job(:create_backup)

  time_of_day = Time.parse(SiteSetting.backup_time_of_day)
  seconds = time_of_day.hour.hours + time_of_day.min.minutes + rand(10.minutes)

  ::Jobs.enqueue_in(seconds, :create_backup)
rescue => e
  notify_user(e)
  raise
end

#notify_user(ex) ⇒ Object



28
29
30
31
32
33
34
35
# File 'app/jobs/scheduled/schedule_backup.rb', line 28

def notify_user(ex)
  SystemMessage.create_from_system_user(
    Discourse.system_user,
    :backup_failed,
    target_group_names: Group[:admins].name,
    logs: "#{ex}\n" + ex.backtrace.join("\n"),
  )
end