backup 4.4.1 → 5.0.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +19 -0
- data/README.md +13 -9
- data/bin/docker_test +24 -0
- data/lib/backup/archive.rb +31 -32
- data/lib/backup/binder.rb +2 -6
- data/lib/backup/cleaner.rb +14 -18
- data/lib/backup/cli.rb +104 -108
- data/lib/backup/cloud_io/base.rb +4 -7
- data/lib/backup/cloud_io/cloud_files.rb +60 -62
- data/lib/backup/cloud_io/s3.rb +69 -76
- data/lib/backup/compressor/base.rb +4 -7
- data/lib/backup/compressor/bzip2.rb +3 -7
- data/lib/backup/compressor/custom.rb +2 -6
- data/lib/backup/compressor/gzip.rb +16 -17
- data/lib/backup/config/dsl.rb +16 -17
- data/lib/backup/config/helpers.rb +10 -16
- data/lib/backup/config.rb +17 -18
- data/lib/backup/database/base.rb +22 -21
- data/lib/backup/database/mongodb.rb +36 -37
- data/lib/backup/database/mysql.rb +40 -41
- data/lib/backup/database/openldap.rb +8 -10
- data/lib/backup/database/postgresql.rb +29 -30
- data/lib/backup/database/redis.rb +27 -30
- data/lib/backup/database/riak.rb +15 -18
- data/lib/backup/database/sqlite.rb +4 -6
- data/lib/backup/encryptor/base.rb +2 -4
- data/lib/backup/encryptor/gpg.rb +49 -59
- data/lib/backup/encryptor/open_ssl.rb +11 -14
- data/lib/backup/errors.rb +7 -12
- data/lib/backup/logger/console.rb +5 -8
- data/lib/backup/logger/fog_adapter.rb +2 -6
- data/lib/backup/logger/logfile.rb +10 -12
- data/lib/backup/logger/syslog.rb +2 -4
- data/lib/backup/logger.rb +16 -18
- data/lib/backup/model.rb +33 -40
- data/lib/backup/notifier/base.rb +24 -26
- data/lib/backup/notifier/campfire.rb +9 -11
- data/lib/backup/notifier/command.rb +0 -3
- data/lib/backup/notifier/datadog.rb +9 -12
- data/lib/backup/notifier/flowdock.rb +13 -17
- data/lib/backup/notifier/hipchat.rb +11 -13
- data/lib/backup/notifier/http_post.rb +11 -14
- data/lib/backup/notifier/mail.rb +42 -59
- data/lib/backup/notifier/nagios.rb +5 -9
- data/lib/backup/notifier/pagerduty.rb +10 -12
- data/lib/backup/notifier/prowl.rb +15 -15
- data/lib/backup/notifier/pushover.rb +7 -10
- data/lib/backup/notifier/ses.rb +34 -16
- data/lib/backup/notifier/slack.rb +39 -40
- data/lib/backup/notifier/twitter.rb +2 -5
- data/lib/backup/notifier/zabbix.rb +11 -14
- data/lib/backup/package.rb +5 -9
- data/lib/backup/packager.rb +16 -17
- data/lib/backup/pipeline.rb +17 -21
- data/lib/backup/splitter.rb +8 -11
- data/lib/backup/storage/base.rb +5 -8
- data/lib/backup/storage/cloud_files.rb +21 -23
- data/lib/backup/storage/cycler.rb +10 -15
- data/lib/backup/storage/dropbox.rb +15 -21
- data/lib/backup/storage/ftp.rb +14 -10
- data/lib/backup/storage/local.rb +5 -8
- data/lib/backup/storage/qiniu.rb +8 -8
- data/lib/backup/storage/rsync.rb +24 -26
- data/lib/backup/storage/s3.rb +27 -28
- data/lib/backup/storage/scp.rb +10 -12
- data/lib/backup/storage/sftp.rb +10 -12
- data/lib/backup/syncer/base.rb +5 -8
- data/lib/backup/syncer/cloud/base.rb +27 -30
- data/lib/backup/syncer/cloud/cloud_files.rb +16 -18
- data/lib/backup/syncer/cloud/local_file.rb +5 -8
- data/lib/backup/syncer/cloud/s3.rb +23 -24
- data/lib/backup/syncer/rsync/base.rb +6 -10
- data/lib/backup/syncer/rsync/local.rb +1 -5
- data/lib/backup/syncer/rsync/pull.rb +6 -10
- data/lib/backup/syncer/rsync/push.rb +18 -22
- data/lib/backup/template.rb +9 -14
- data/lib/backup/utilities.rb +78 -69
- data/lib/backup/version.rb +1 -3
- data/lib/backup.rb +74 -78
- metadata +107 -676
data/lib/backup/model.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Backup
|
4
2
|
class Model
|
5
3
|
class Error < Backup::Error; end
|
@@ -18,11 +16,11 @@ module Backup
|
|
18
16
|
# Return an Array of Models matching the given +trigger+.
|
19
17
|
def find_by_trigger(trigger)
|
20
18
|
trigger = trigger.to_s
|
21
|
-
if trigger.include?(
|
19
|
+
if trigger.include?("*")
|
22
20
|
regex = /^#{ trigger.gsub('*', '(.*)') }$/
|
23
|
-
all.select {|model| regex =~ model.trigger }
|
21
|
+
all.select { |model| regex =~ model.trigger }
|
24
22
|
else
|
25
|
-
all.select {|model| trigger == model.trigger }
|
23
|
+
all.select { |model| trigger == model.trigger }
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
@@ -128,7 +126,7 @@ module Backup
|
|
128
126
|
|
129
127
|
# trigger all defined databases to generate their #dump_filename
|
130
128
|
# so warnings may be logged if `backup perform --check` is used
|
131
|
-
databases.each {|db| db.send(:dump_filename) }
|
129
|
+
databases.each { |db| db.send(:dump_filename) }
|
132
130
|
|
133
131
|
Model.all << self
|
134
132
|
end
|
@@ -142,15 +140,15 @@ module Backup
|
|
142
140
|
##
|
143
141
|
# Adds an Database. Multiple Databases may be added to the model.
|
144
142
|
def database(name, database_id = nil, &block)
|
145
|
-
@databases << get_class_from_scope(Database, name)
|
146
|
-
|
143
|
+
@databases << get_class_from_scope(Database, name)
|
144
|
+
.new(self, database_id, &block)
|
147
145
|
end
|
148
146
|
|
149
147
|
##
|
150
148
|
# Adds an Storage. Multiple Storages may be added to the model.
|
151
149
|
def store_with(name, storage_id = nil, &block)
|
152
|
-
@storages << get_class_from_scope(Storage, name)
|
153
|
-
|
150
|
+
@storages << get_class_from_scope(Storage, name)
|
151
|
+
.new(self, storage_id, &block)
|
154
152
|
end
|
155
153
|
|
156
154
|
##
|
@@ -270,14 +268,11 @@ module Backup
|
|
270
268
|
end
|
271
269
|
|
272
270
|
syncers.each(&:perform!)
|
273
|
-
|
274
271
|
rescue Interrupt
|
275
272
|
@interrupted = true
|
276
273
|
raise
|
277
|
-
|
278
274
|
rescue Exception => err
|
279
275
|
@exception = err
|
280
|
-
|
281
276
|
ensure
|
282
277
|
unless @interrupted
|
283
278
|
set_exit_status
|
@@ -302,8 +297,8 @@ module Backup
|
|
302
297
|
def procedures
|
303
298
|
return [] unless databases.any? || archives.any?
|
304
299
|
|
305
|
-
[
|
306
|
-
|
300
|
+
[-> { prepare! }, databases, archives,
|
301
|
+
-> { package! }, -> { store! }, -> { clean! }]
|
307
302
|
end
|
308
303
|
|
309
304
|
##
|
@@ -341,8 +336,8 @@ module Backup
|
|
341
336
|
|
342
337
|
if first_exception
|
343
338
|
other_exceptions.each do |exception|
|
344
|
-
|
345
|
-
|
339
|
+
Logger.error exception.to_s
|
340
|
+
Logger.error exception.backtrace.join('\n')
|
346
341
|
end
|
347
342
|
raise first_exception
|
348
343
|
else
|
@@ -375,8 +370,8 @@ module Backup
|
|
375
370
|
#
|
376
371
|
def get_class_from_scope(scope, name)
|
377
372
|
klass = scope
|
378
|
-
name = name.to_s.sub(/^Backup::Config::DSL::/,
|
379
|
-
name.split(
|
373
|
+
name = name.to_s.sub(/^Backup::Config::DSL::/, "")
|
374
|
+
name.split("::").each do |chunk|
|
380
375
|
klass = klass.const_get(chunk)
|
381
376
|
end
|
382
377
|
klass
|
@@ -385,11 +380,12 @@ module Backup
|
|
385
380
|
##
|
386
381
|
# Sets or updates the model's #exit_status.
|
387
382
|
def set_exit_status
|
388
|
-
@exit_status =
|
389
|
-
exception
|
390
|
-
|
391
|
-
|
392
|
-
|
383
|
+
@exit_status =
|
384
|
+
if exception
|
385
|
+
exception.is_a?(StandardError) ? 2 : 3
|
386
|
+
else
|
387
|
+
Logger.has_warnings? ? 1 : 0
|
388
|
+
end
|
393
389
|
end
|
394
390
|
|
395
391
|
##
|
@@ -401,14 +397,13 @@ module Backup
|
|
401
397
|
def before_hook
|
402
398
|
return unless before
|
403
399
|
|
404
|
-
Logger.info
|
400
|
+
Logger.info "Before Hook Starting..."
|
405
401
|
before.call
|
406
|
-
Logger.info
|
407
|
-
|
402
|
+
Logger.info "Before Hook Finished."
|
408
403
|
rescue Exception => err
|
409
404
|
@before_hook_failed = true
|
410
405
|
ex = err.is_a?(StandardError) ? Error : FatalError
|
411
|
-
raise ex.wrap(err,
|
406
|
+
raise ex.wrap(err, "Before Hook Failed!")
|
412
407
|
end
|
413
408
|
|
414
409
|
##
|
@@ -418,16 +413,15 @@ module Backup
|
|
418
413
|
def after_hook
|
419
414
|
return unless after && !@before_hook_failed
|
420
415
|
|
421
|
-
Logger.info
|
416
|
+
Logger.info "After Hook Starting..."
|
422
417
|
after.call(exit_status)
|
423
|
-
Logger.info
|
418
|
+
Logger.info "After Hook Finished."
|
424
419
|
|
425
420
|
set_exit_status # in case hook logged warnings
|
426
|
-
|
427
421
|
rescue Exception => err
|
428
422
|
fatal = !err.is_a?(StandardError)
|
429
423
|
ex = fatal ? FatalError : Error
|
430
|
-
Logger.error ex.wrap(err,
|
424
|
+
Logger.error ex.wrap(err, "After Hook Failed!")
|
431
425
|
# upgrade exit_status if needed
|
432
426
|
(@exit_status = fatal ? 3 : 2) unless exit_status == 3
|
433
427
|
end
|
@@ -440,24 +434,24 @@ module Backup
|
|
440
434
|
def log!(action)
|
441
435
|
case action
|
442
436
|
when :started
|
443
|
-
Logger.info "Performing Backup for '#{
|
444
|
-
"[ backup #{
|
437
|
+
Logger.info "Performing Backup for '#{label} (#{trigger})'!\n" \
|
438
|
+
"[ backup #{VERSION} : #{RUBY_DESCRIPTION} ]"
|
445
439
|
|
446
440
|
when :finished
|
447
441
|
if exit_status > 1
|
448
442
|
ex = exit_status == 2 ? Error : FatalError
|
449
|
-
err = ex.wrap(exception, "Backup for #{
|
443
|
+
err = ex.wrap(exception, "Backup for #{label} (#{trigger}) Failed!")
|
450
444
|
Logger.error err
|
451
445
|
Logger.error "\nBacktrace:\n\s\s" + err.backtrace.join("\n\s\s") + "\n\n"
|
452
446
|
|
453
447
|
Cleaner.warnings(self)
|
454
448
|
else
|
455
|
-
msg = "Backup for '#{
|
449
|
+
msg = "Backup for '#{label} (#{trigger})' "
|
456
450
|
if exit_status == 1
|
457
|
-
msg << "Completed Successfully (with Warnings) in #{
|
451
|
+
msg << "Completed Successfully (with Warnings) in #{duration}"
|
458
452
|
Logger.warn msg
|
459
453
|
else
|
460
|
-
msg << "Completed Successfully in #{
|
454
|
+
msg << "Completed Successfully in #{duration}"
|
461
455
|
Logger.info msg
|
462
456
|
end
|
463
457
|
end
|
@@ -472,8 +466,7 @@ module Backup
|
|
472
466
|
remainder = duration - (hours * 3600)
|
473
467
|
minutes = remainder / 60
|
474
468
|
seconds = remainder - (minutes * 60)
|
475
|
-
|
469
|
+
sprintf "%02d:%02d:%02d", hours, minutes, seconds
|
476
470
|
end
|
477
|
-
|
478
471
|
end
|
479
472
|
end
|
data/lib/backup/notifier/base.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Backup
|
4
2
|
module Notifier
|
5
3
|
class Error < Backup::Error; end
|
@@ -56,8 +54,8 @@ module Backup
|
|
56
54
|
@on_failure = true if on_failure.nil?
|
57
55
|
@max_retries ||= 10
|
58
56
|
@retry_waitsec ||= 30
|
59
|
-
@message ||= lambda do |
|
60
|
-
"[#{
|
57
|
+
@message ||= lambda do |m, data|
|
58
|
+
"[#{data[:status][:message]}] #{m.label} (#{m.trigger})"
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
@@ -65,22 +63,22 @@ module Backup
|
|
65
63
|
# not raise any exceptions. However, each Notifier's #notify! method
|
66
64
|
# should raise an exception if the request fails so it may be retried.
|
67
65
|
def perform!
|
68
|
-
status =
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
66
|
+
status =
|
67
|
+
case model.exit_status
|
68
|
+
when 0
|
69
|
+
:success if notify_on_success?
|
70
|
+
when 1
|
71
|
+
:warning if notify_on_success? || notify_on_warning?
|
72
|
+
else
|
73
|
+
:failure if notify_on_failure?
|
74
|
+
end
|
76
75
|
|
77
76
|
if status
|
78
|
-
Logger.info "Sending notification using #{
|
77
|
+
Logger.info "Sending notification using #{notifier_name}..."
|
79
78
|
with_retries { notify!(status) }
|
80
79
|
end
|
81
|
-
|
82
80
|
rescue Exception => err
|
83
|
-
Logger.error Error.wrap(err, "#{
|
81
|
+
Logger.error Error.wrap(err, "#{notifier_name} Failed!")
|
84
82
|
end
|
85
83
|
|
86
84
|
private
|
@@ -93,7 +91,7 @@ module Backup
|
|
93
91
|
retries += 1
|
94
92
|
raise if retries > max_retries
|
95
93
|
|
96
|
-
Logger.info Error.wrap(err, "Retry ##{
|
94
|
+
Logger.info Error.wrap(err, "Retry ##{retries} of #{max_retries}.")
|
97
95
|
sleep(retry_waitsec)
|
98
96
|
retry
|
99
97
|
end
|
@@ -102,24 +100,24 @@ module Backup
|
|
102
100
|
##
|
103
101
|
# Return the notifier name, with Backup namespace removed
|
104
102
|
def notifier_name
|
105
|
-
self.class.to_s.sub(
|
103
|
+
self.class.to_s.sub("Backup::", "")
|
106
104
|
end
|
107
105
|
|
108
106
|
##
|
109
107
|
# Return status data for message creation
|
110
108
|
def status_data_for(status)
|
111
109
|
{
|
112
|
-
:
|
113
|
-
:
|
114
|
-
:
|
110
|
+
success: {
|
111
|
+
message: "Backup::Success",
|
112
|
+
key: :success
|
115
113
|
},
|
116
|
-
:
|
117
|
-
:
|
118
|
-
:
|
114
|
+
warning: {
|
115
|
+
message: "Backup::Warning",
|
116
|
+
key: :warning
|
119
117
|
},
|
120
|
-
:
|
121
|
-
:
|
122
|
-
:
|
118
|
+
failure: {
|
119
|
+
message: "Backup::Failure",
|
120
|
+
key: :failure
|
123
121
|
}
|
124
122
|
}[status]
|
125
123
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'json'
|
1
|
+
require "json"
|
3
2
|
|
4
3
|
module Backup
|
5
4
|
module Notifier
|
6
5
|
class Campfire < Base
|
7
|
-
|
8
6
|
##
|
9
7
|
# Campfire api authentication token
|
10
8
|
attr_accessor :api_token
|
@@ -42,22 +40,22 @@ module Backup
|
|
42
40
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
43
41
|
#
|
44
42
|
def notify!(status)
|
45
|
-
send_message(message.call(model, :
|
43
|
+
send_message(message.call(model, status: status_data_for(status)))
|
46
44
|
end
|
47
45
|
|
48
46
|
def send_message(message)
|
49
|
-
uri = "https://#{
|
47
|
+
uri = "https://#{subdomain}.campfirenow.com/room/#{room_id}/speak.json"
|
50
48
|
options = {
|
51
|
-
:
|
52
|
-
:
|
53
|
-
|
49
|
+
headers: { "Content-Type" => "application/json" },
|
50
|
+
body: JSON.dump(
|
51
|
+
message: { body: message, type: "Textmessage" }
|
54
52
|
)
|
55
53
|
}
|
56
|
-
options
|
57
|
-
options
|
54
|
+
options[:user] = api_token
|
55
|
+
options[:password] = "x" # Basic Auth
|
56
|
+
options[:expects] = 201 # raise error if unsuccessful
|
58
57
|
Excon.post(uri, options)
|
59
58
|
end
|
60
|
-
|
61
59
|
end
|
62
60
|
end
|
63
61
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'dogapi'
|
1
|
+
require "dogapi"
|
3
2
|
|
4
3
|
module Backup
|
5
4
|
module Notifier
|
6
5
|
class DataDog < Base
|
7
|
-
|
8
6
|
##
|
9
7
|
# The DataDog API key
|
10
8
|
attr_accessor :api_key
|
@@ -14,9 +12,9 @@ module Backup
|
|
14
12
|
attr_accessor :title
|
15
13
|
|
16
14
|
attr_deprecate :text,
|
17
|
-
:
|
18
|
-
:
|
19
|
-
|
15
|
+
version: "4.2",
|
16
|
+
message: "Please use the `message` attribute. For more information "\
|
17
|
+
"see https://github.com/backup/backup/pull/698"
|
20
18
|
|
21
19
|
##
|
22
20
|
# The timestamp for the event
|
@@ -49,7 +47,7 @@ module Backup
|
|
49
47
|
def initialize(model, &block)
|
50
48
|
super
|
51
49
|
instance_eval(&block) if block_given?
|
52
|
-
@title ||= "Backup #{
|
50
|
+
@title ||= "Backup #{model.label}"
|
53
51
|
end
|
54
52
|
|
55
53
|
private
|
@@ -72,7 +70,7 @@ module Backup
|
|
72
70
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
73
71
|
#
|
74
72
|
def notify!(status)
|
75
|
-
msg = message.call(model, :
|
73
|
+
msg = message.call(model, status: status_data_for(status))
|
76
74
|
|
77
75
|
hash = { alert_type: default_alert_type(status) }
|
78
76
|
hash.store(:msg_title, @title)
|
@@ -96,12 +94,11 @@ module Backup
|
|
96
94
|
# set alert type
|
97
95
|
def default_alert_type(status)
|
98
96
|
case status
|
99
|
-
when :success then
|
100
|
-
when :warning then
|
101
|
-
when :failure then
|
97
|
+
when :success then "success"
|
98
|
+
when :warning then "warning"
|
99
|
+
when :failure then "error"
|
102
100
|
end
|
103
101
|
end
|
104
|
-
|
105
102
|
end
|
106
103
|
end
|
107
104
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'flowdock'
|
1
|
+
require "flowdock"
|
3
2
|
|
4
3
|
module Backup
|
5
4
|
module Notifier
|
6
5
|
class FlowDock < Base
|
7
|
-
|
8
6
|
##
|
9
7
|
# The Flowdock API token
|
10
8
|
attr_accessor :token
|
@@ -68,36 +66,34 @@ module Backup
|
|
68
66
|
# Flowdock::Client will raise an error if unsuccessful.
|
69
67
|
def send_message(msg)
|
70
68
|
client = Flowdock::Flow.new(
|
71
|
-
:
|
72
|
-
:
|
69
|
+
api_token: token, source: source,
|
70
|
+
from: { name: from_name, address: from_email }
|
73
71
|
)
|
74
72
|
|
75
|
-
client.push_to_team_inbox(:
|
76
|
-
:
|
77
|
-
:
|
78
|
-
:
|
73
|
+
client.push_to_team_inbox(subject: subject,
|
74
|
+
content: msg,
|
75
|
+
tags: tags,
|
76
|
+
link: link)
|
79
77
|
end
|
80
78
|
|
81
79
|
# set related tags
|
82
80
|
def default_tags(status)
|
83
81
|
case status
|
84
|
-
when :success then [
|
85
|
-
when :warning then [
|
86
|
-
when :failure then [
|
82
|
+
when :success then ["#BackupSuccess"]
|
83
|
+
when :warning then ["#BackupWarning"]
|
84
|
+
when :failure then ["#BackupFailure"]
|
87
85
|
end
|
88
86
|
end
|
89
87
|
|
90
|
-
|
91
|
-
#set default source
|
88
|
+
# set default source
|
92
89
|
def default_source
|
93
|
-
"Backup #{
|
90
|
+
"Backup #{model.label}"
|
94
91
|
end
|
95
92
|
|
96
93
|
# set default subject
|
97
94
|
def default_subject
|
98
|
-
|
95
|
+
"Backup Notification"
|
99
96
|
end
|
100
|
-
|
101
97
|
end
|
102
98
|
end
|
103
99
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'hipchat'
|
1
|
+
require "hipchat"
|
3
2
|
|
4
3
|
module Backup
|
5
4
|
module Notifier
|
6
5
|
class Hipchat < Base
|
7
|
-
|
8
6
|
##
|
9
7
|
# The Hipchat API token
|
10
8
|
attr_accessor :token
|
@@ -51,10 +49,10 @@ module Backup
|
|
51
49
|
|
52
50
|
@notify_users ||= false
|
53
51
|
@rooms_notified ||= []
|
54
|
-
@success_color ||=
|
55
|
-
@warning_color ||=
|
56
|
-
@failure_color ||=
|
57
|
-
@api_version ||=
|
52
|
+
@success_color ||= "yellow"
|
53
|
+
@warning_color ||= "yellow"
|
54
|
+
@failure_color ||= "yellow"
|
55
|
+
@api_version ||= "v1"
|
58
56
|
end
|
59
57
|
|
60
58
|
private
|
@@ -78,7 +76,7 @@ module Backup
|
|
78
76
|
#
|
79
77
|
def notify!(status)
|
80
78
|
status_data = status_data_for(status)
|
81
|
-
msg = message.call(model, :
|
79
|
+
msg = message.call(model, status: status_data)
|
82
80
|
send_message(msg, status_data[:color])
|
83
81
|
end
|
84
82
|
|
@@ -92,12 +90,12 @@ module Backup
|
|
92
90
|
def send_message(msg, color)
|
93
91
|
client = HipChat::Client.new(token, client_options)
|
94
92
|
rooms_to_notify.each do |room|
|
95
|
-
client[room].send(from, msg, :
|
93
|
+
client[room].send(from, msg, color: color, notify: notify_users)
|
96
94
|
end
|
97
95
|
end
|
98
96
|
|
99
97
|
def rooms_to_notify
|
100
|
-
Array(rooms_notified).map {|r| r.split(
|
98
|
+
Array(rooms_notified).map { |r| r.split(",").map(&:strip) }.flatten
|
101
99
|
end
|
102
100
|
|
103
101
|
def status_data_for(status)
|
@@ -108,9 +106,9 @@ module Backup
|
|
108
106
|
|
109
107
|
def status_color_for(status)
|
110
108
|
{
|
111
|
-
:
|
112
|
-
:
|
113
|
-
:
|
109
|
+
success: success_color,
|
110
|
+
warning: warning_color,
|
111
|
+
failure: failure_color
|
114
112
|
}[status]
|
115
113
|
end
|
116
114
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'uri'
|
1
|
+
require "uri"
|
3
2
|
|
4
3
|
module Backup
|
5
4
|
module Notifier
|
6
5
|
class HttpPost < Base
|
7
|
-
|
8
6
|
##
|
9
7
|
# URI to post notification to.
|
10
8
|
#
|
@@ -95,23 +93,22 @@ module Backup
|
|
95
93
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
96
94
|
#
|
97
95
|
def notify!(status)
|
98
|
-
msg = message.call(model, :
|
96
|
+
msg = message.call(model, status: status_data_for(status))
|
99
97
|
|
100
98
|
opts = {
|
101
|
-
:
|
102
|
-
|
103
|
-
|
104
|
-
:
|
105
|
-
merge(params).reject {|
|
106
|
-
merge(
|
107
|
-
:
|
99
|
+
headers: { "User-Agent" => "Backup/#{VERSION}" }
|
100
|
+
.merge(headers).reject { |_, value| value.nil? }
|
101
|
+
.merge("Content-Type" => "application/x-www-form-urlencoded"),
|
102
|
+
body: URI.encode_www_form({ "message" => msg }
|
103
|
+
.merge(params).reject { |_, value| value.nil? }
|
104
|
+
.merge("status" => status.to_s)),
|
105
|
+
expects: success_codes # raise error if unsuccessful
|
108
106
|
}
|
109
|
-
opts
|
110
|
-
opts
|
107
|
+
opts[:ssl_verify_peer] = ssl_verify_peer unless ssl_verify_peer.nil?
|
108
|
+
opts[:ssl_ca_file] = ssl_ca_file if ssl_ca_file
|
111
109
|
|
112
110
|
Excon.post(uri, opts)
|
113
111
|
end
|
114
|
-
|
115
112
|
end
|
116
113
|
end
|
117
114
|
end
|