backup-ssh 4.1.10 → 4.4.0
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/README.md +10 -6
- data/lib/backup.rb +3 -0
- data/lib/backup/config/dsl.rb +2 -2
- data/lib/backup/database/mongodb.rb +2 -1
- data/lib/backup/database/mysql.rb +2 -2
- data/lib/backup/database/postgresql.rb +1 -1
- data/lib/backup/model.rb +26 -1
- data/lib/backup/notifier/base.rb +30 -0
- data/lib/backup/notifier/campfire.rb +1 -7
- data/lib/backup/notifier/command.rb +102 -0
- data/lib/backup/notifier/datadog.rb +11 -20
- data/lib/backup/notifier/flowdock.rb +6 -5
- data/lib/backup/notifier/hipchat.rb +33 -8
- data/lib/backup/notifier/http_post.rb +2 -7
- data/lib/backup/notifier/mail.rb +26 -15
- data/lib/backup/notifier/nagios.rb +3 -8
- data/lib/backup/notifier/prowl.rb +8 -9
- data/lib/backup/notifier/pushover.rb +1 -7
- data/lib/backup/notifier/ses.rb +19 -8
- data/lib/backup/notifier/slack.rb +4 -10
- data/lib/backup/notifier/twitter.rb +1 -7
- data/lib/backup/notifier/zabbix.rb +1 -6
- data/lib/backup/package.rb +4 -0
- data/lib/backup/packager.rb +8 -2
- data/lib/backup/storage/base.rb +15 -3
- data/lib/backup/storage/cycler.rb +24 -14
- data/lib/backup/storage/dropbox.rb +0 -24
- data/lib/backup/storage/ftp.rb +15 -1
- data/lib/backup/storage/qiniu.rb +65 -0
- data/lib/backup/storage/s3.rb +3 -2
- data/lib/backup/syncer/rsync/base.rb +7 -1
- data/lib/backup/version.rb +1 -1
- data/templates/cli/databases/mongodb +1 -1
- data/templates/cli/notifiers/command +32 -0
- data/templates/cli/notifiers/hipchat +1 -0
- data/templates/cli/notifiers/mail +3 -0
- data/templates/cli/storages/dropbox +1 -0
- data/templates/cli/storages/ftp +1 -0
- data/templates/cli/storages/local +1 -0
- data/templates/cli/storages/qiniu +12 -0
- data/templates/cli/storages/s3 +2 -0
- data/templates/cli/storages/scp +1 -0
- data/templates/cli/storages/sftp +1 -0
- metadata +79 -46
- data/LICENSE.md +0 -24
- data/lib/backup/storage/ninefold.rb +0 -74
- data/templates/cli/storages/ninefold +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e204b72f3e7d1cde84dc735f73fb5c2b040d8ff
|
4
|
+
data.tar.gz: '038ef67371243b75efaf003d2af79b822926e0b7'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f3a096e09ae0aef5d3be110e99949c4559c3889ba5710ee83273df469c24674e3616e8d5a5082b6a9e9218991c3df9182bf5ab57541889bdfb9a23b7f38eaba
|
7
|
+
data.tar.gz: f0b8d4b1134f7616fcb7b89965e0553b4f5718657efc6d97534381ea4104cce6202f3237727d78a213460d2da8cd5cb568f27ee7a06b6255c965f2ff692fd8d7
|
data/README.md
CHANGED
@@ -1,25 +1,29 @@
|
|
1
1
|
Backup v4.x
|
2
2
|
===========
|
3
|
+
|
3
4
|
[](https://codeclimate.com/github/backup/backup)
|
4
5
|
[](https://travis-ci.org/backup/backup)
|
6
|
+
[][Gitter]
|
5
7
|
|
6
8
|
Backup is a system utility for Linux and Mac OS X, distributed as a RubyGem, that allows you to easily perform backup
|
7
9
|
operations. It provides an elegant DSL in Ruby for _modeling_ your backups. Backup has built-in support for various
|
8
10
|
databases, storage protocols/services, syncers, compressors, encryptors and notifiers which you can mix and match. It
|
9
11
|
was built with modularity, extensibility and simplicity in mind.
|
10
12
|
|
11
|
-
[Installation][] · [Release Notes][] · [Documentation][] · [Issues][] · [Features][]
|
13
|
+
[Installation][] · [Release Notes][] · [Documentation][] · [Issues][] · [Features][] · [Chat][Gitter]
|
12
14
|
|
13
15
|
Please use the Backup features [issue tracker][Features] to suggest new features.
|
14
16
|
Only use the Backup gem [issue tracker][Issues] for bugs and other issues.
|
17
|
+
We're also available on [Gitter] for questions and problems.
|
15
18
|
|
16
|
-
**Copyright (c) 2009-
|
17
|
-
Released under the **MIT** [
|
19
|
+
**Copyright (c) 2009-2016 [Michael van Rooijen][] ( [@mrrooijen] )**
|
20
|
+
Released under the **MIT** [LICENSE](LICENSE).
|
18
21
|
|
19
22
|
[Installation]: http://backup.github.io/backup/v4/installation
|
20
23
|
[Release Notes]: http://backup.github.io/backup/v4/release-notes
|
21
24
|
[Documentation]: http://backup.github.io/backup/v4
|
22
25
|
[Issues]: https://github.com/backup/backup/issues
|
23
|
-
[Features]: https://github.com/
|
24
|
-
[
|
25
|
-
[
|
26
|
+
[Features]: https://github.com/backup/backup-features/issues
|
27
|
+
[Gitter]: https://gitter.im/backup/backup?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
28
|
+
[Michael van Rooijen]: http://github.com/mrrooijen
|
29
|
+
[@mrrooijen]: http://twitter.com/mrrooijen
|
data/lib/backup.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
# Load Ruby Core Libraries
|
4
|
+
require 'time'
|
4
5
|
require 'fileutils'
|
5
6
|
require 'tempfile'
|
6
7
|
require 'syslog'
|
@@ -48,6 +49,7 @@ module Backup
|
|
48
49
|
autoload :SCP, File.join(STORAGE_PATH, 'scp')
|
49
50
|
autoload :RSync, File.join(STORAGE_PATH, 'rsync')
|
50
51
|
autoload :Local, File.join(STORAGE_PATH, 'local')
|
52
|
+
autoload :Qiniu, File.join(STORAGE_PATH, 'qiniu')
|
51
53
|
end
|
52
54
|
|
53
55
|
##
|
@@ -116,6 +118,7 @@ module Backup
|
|
116
118
|
autoload :Zabbix, File.join(NOTIFIER_PATH, 'zabbix')
|
117
119
|
autoload :DataDog, File.join(NOTIFIER_PATH, 'datadog')
|
118
120
|
autoload :Ses, File.join(NOTIFIER_PATH, 'ses')
|
121
|
+
autoload :Command, File.join(NOTIFIER_PATH, 'command')
|
119
122
|
end
|
120
123
|
|
121
124
|
##
|
data/lib/backup/config/dsl.rb
CHANGED
@@ -30,7 +30,7 @@ module Backup
|
|
30
30
|
['MySQL', 'PostgreSQL', 'MongoDB', 'Redis', 'Riak', 'OpenLDAP', 'SQLite'],
|
31
31
|
# Storages
|
32
32
|
['S3', 'CloudFiles', 'Ninefold', 'Dropbox', 'FTP',
|
33
|
-
'SFTP', 'SCP', 'RSync', 'Local'],
|
33
|
+
'SFTP', 'SCP', 'RSync', 'Local', 'Qiniu'],
|
34
34
|
# Compressors
|
35
35
|
['Gzip', 'Bzip2', 'Custom', 'Pbzip2', 'Lzma'],
|
36
36
|
# Encryptors
|
@@ -43,7 +43,7 @@ module Backup
|
|
43
43
|
# Notifiers
|
44
44
|
['Mail', 'Twitter', 'Campfire', 'Prowl',
|
45
45
|
'Hipchat', 'PagerDuty', 'Pushover', 'HttpPost', 'Nagios',
|
46
|
-
'Slack', 'FlowDock', 'Zabbix', 'Ses', 'DataDog']
|
46
|
+
'Slack', 'FlowDock', 'Zabbix', 'Ses', 'DataDog', 'Command']
|
47
47
|
]
|
48
48
|
)
|
49
49
|
end
|
@@ -11,7 +11,7 @@ module Backup
|
|
11
11
|
|
12
12
|
##
|
13
13
|
# Credentials for the specified database
|
14
|
-
attr_accessor :username, :password
|
14
|
+
attr_accessor :username, :password, :authdb
|
15
15
|
|
16
16
|
##
|
17
17
|
# Connectivity options
|
@@ -132,6 +132,7 @@ module Backup
|
|
132
132
|
opts = []
|
133
133
|
opts << "--username='#{ username }'" if username
|
134
134
|
opts << "--password='#{ password }'" if password
|
135
|
+
opts << "--authenticationDatabase='#{ authdb }'" if authdb
|
135
136
|
opts.join(' ')
|
136
137
|
end
|
137
138
|
|
@@ -105,8 +105,8 @@ module Backup
|
|
105
105
|
private
|
106
106
|
|
107
107
|
def mysqldump
|
108
|
-
"#{ ssh_option } #{ utility(:mysqldump) } #{ credential_options } " +
|
109
|
-
"#{ connectivity_options } #{
|
108
|
+
"#{ ssh_option } #{ utility(:mysqldump) } #{ user_options } #{ credential_options } " +
|
109
|
+
"#{ connectivity_options } #{ name_option } " +
|
110
110
|
"#{ tables_to_dump } #{ tables_to_skip }"
|
111
111
|
end
|
112
112
|
|
data/lib/backup/model.rb
CHANGED
@@ -303,7 +303,7 @@ module Backup
|
|
303
303
|
return [] unless databases.any? || archives.any?
|
304
304
|
|
305
305
|
[lambda { prepare! }, databases, archives,
|
306
|
-
lambda { package! },
|
306
|
+
lambda { package! }, lambda { store! }, lambda { clean! }]
|
307
307
|
end
|
308
308
|
|
309
309
|
##
|
@@ -325,6 +325,31 @@ module Backup
|
|
325
325
|
Cleaner.remove_packaging(self)
|
326
326
|
end
|
327
327
|
|
328
|
+
##
|
329
|
+
# Attempts to use all configured Storages, even if some of them result in exceptions.
|
330
|
+
# Returns true or raises first encountered exception.
|
331
|
+
def store!
|
332
|
+
storage_results = storages.map do |storage|
|
333
|
+
begin
|
334
|
+
storage.perform!
|
335
|
+
rescue => ex
|
336
|
+
ex
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
first_exception, *other_exceptions = storage_results.select { |result| result.is_a? Exception }
|
341
|
+
|
342
|
+
if first_exception
|
343
|
+
other_exceptions.each do |exception|
|
344
|
+
Logger.error exception.to_s
|
345
|
+
Logger.error exception.backtrace.join('\n')
|
346
|
+
end
|
347
|
+
raise first_exception
|
348
|
+
else
|
349
|
+
true
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
328
353
|
##
|
329
354
|
# Removes the final package file(s) once all configured Storages have run.
|
330
355
|
def clean!
|
data/lib/backup/notifier/base.rb
CHANGED
@@ -36,6 +36,15 @@ module Backup
|
|
36
36
|
# Default: 30
|
37
37
|
attr_accessor :retry_waitsec
|
38
38
|
|
39
|
+
##
|
40
|
+
# Message to send. Depends on notifier implementation if this is used.
|
41
|
+
# Default: lambda returning:
|
42
|
+
# "#{ message } #{ model.label } (#{ model.trigger })"
|
43
|
+
#
|
44
|
+
# @yieldparam [model] Backup::Model
|
45
|
+
# @yieldparam [data] Hash containing `message` and `key` values.
|
46
|
+
attr_accessor :message
|
47
|
+
|
39
48
|
attr_reader :model
|
40
49
|
|
41
50
|
def initialize(model)
|
@@ -47,6 +56,9 @@ module Backup
|
|
47
56
|
@on_failure = true if on_failure.nil?
|
48
57
|
@max_retries ||= 10
|
49
58
|
@retry_waitsec ||= 30
|
59
|
+
@message ||= lambda do |model, data|
|
60
|
+
"[#{ data[:status][:message] }] #{ model.label } (#{ model.trigger })"
|
61
|
+
end
|
50
62
|
end
|
51
63
|
|
52
64
|
# This method is called from an ensure block in Model#perform! and must
|
@@ -93,6 +105,24 @@ module Backup
|
|
93
105
|
self.class.to_s.sub('Backup::', '')
|
94
106
|
end
|
95
107
|
|
108
|
+
##
|
109
|
+
# Return status data for message creation
|
110
|
+
def status_data_for(status)
|
111
|
+
{
|
112
|
+
:success => {
|
113
|
+
:message => 'Backup::Success',
|
114
|
+
:key => :success
|
115
|
+
},
|
116
|
+
:warning => {
|
117
|
+
:message => 'Backup::Warning',
|
118
|
+
:key => :warning
|
119
|
+
},
|
120
|
+
:failure => {
|
121
|
+
:message => 'Backup::Failure',
|
122
|
+
:key => :failure
|
123
|
+
}
|
124
|
+
}[status]
|
125
|
+
end
|
96
126
|
end
|
97
127
|
end
|
98
128
|
end
|
@@ -42,13 +42,7 @@ module Backup
|
|
42
42
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
43
43
|
#
|
44
44
|
def notify!(status)
|
45
|
-
|
46
|
-
when :success then '[Backup::Success]'
|
47
|
-
when :warning then '[Backup::Warning]'
|
48
|
-
when :failure then '[Backup::Failure]'
|
49
|
-
end
|
50
|
-
message = "#{ tag } #{ model.label } (#{ model.trigger })"
|
51
|
-
send_message(message)
|
45
|
+
send_message(message.call(model, :status => status_data_for(status)))
|
52
46
|
end
|
53
47
|
|
54
48
|
def send_message(message)
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Backup
|
4
|
+
module Notifier
|
5
|
+
class Command < Base
|
6
|
+
|
7
|
+
##
|
8
|
+
# Command to execute.
|
9
|
+
#
|
10
|
+
# Make sure it is accessible from your $PATH, or provide
|
11
|
+
# the absolute path to the command.
|
12
|
+
attr_accessor :command
|
13
|
+
|
14
|
+
##
|
15
|
+
# Arguments to pass to the command.
|
16
|
+
#
|
17
|
+
# Must be an array of strings or callable objects.
|
18
|
+
#
|
19
|
+
# Callables will be invoked with #call(model, status),
|
20
|
+
# and the return value used as the argument.
|
21
|
+
#
|
22
|
+
# In strings you can use the following placeholders:
|
23
|
+
#
|
24
|
+
# %l - Model label
|
25
|
+
# %t - Model trigger
|
26
|
+
# %d - Backup duration (HH:MM:SS)
|
27
|
+
# %s - Status (success/failure/warning)
|
28
|
+
# %v - Status verb (succeeded/failed/succeeded with warnings)
|
29
|
+
#
|
30
|
+
# All placeholders can be used with uppercase letters to capitalize
|
31
|
+
# the value.
|
32
|
+
#
|
33
|
+
# Defaults to ["%L %v"]
|
34
|
+
attr_accessor :args
|
35
|
+
|
36
|
+
def initialize(model, &block)
|
37
|
+
super
|
38
|
+
instance_eval(&block) if block_given?
|
39
|
+
|
40
|
+
@args ||= ["%L %v"]
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
##
|
46
|
+
# Notify the user of the backup operation results.
|
47
|
+
#
|
48
|
+
# `status` indicates one of the following:
|
49
|
+
#
|
50
|
+
# `:success`
|
51
|
+
# : The backup completed successfully.
|
52
|
+
# : Notification will be sent if `on_success` is `true`.
|
53
|
+
#
|
54
|
+
# `:warning`
|
55
|
+
# : The backup completed successfully, but warnings were logged.
|
56
|
+
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
57
|
+
#
|
58
|
+
# `:failure`
|
59
|
+
# : The backup operation failed.
|
60
|
+
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
61
|
+
#
|
62
|
+
def notify!(status)
|
63
|
+
IO.popen([@command] + args.map { |arg| format_arg(arg, status) })
|
64
|
+
end
|
65
|
+
|
66
|
+
def format_arg(arg, status)
|
67
|
+
if arg.respond_to?(:call)
|
68
|
+
arg.call(model, status)
|
69
|
+
else
|
70
|
+
arg.gsub(/%(\w)/) do |match|
|
71
|
+
ph = match[1]
|
72
|
+
val = case ph.downcase
|
73
|
+
when "l"
|
74
|
+
model.label
|
75
|
+
when "t"
|
76
|
+
model.trigger.to_s
|
77
|
+
when "d"
|
78
|
+
model.duration
|
79
|
+
when "v"
|
80
|
+
status_verb(status)
|
81
|
+
when "s"
|
82
|
+
status.to_s
|
83
|
+
end
|
84
|
+
val.capitalize! if ph == ph.upcase
|
85
|
+
val
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def status_verb(status)
|
91
|
+
case status
|
92
|
+
when :success
|
93
|
+
"succeeded"
|
94
|
+
when :failure
|
95
|
+
"failed"
|
96
|
+
when :warning
|
97
|
+
"succeeded with warnings"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -13,9 +13,10 @@ module Backup
|
|
13
13
|
# The title of the event
|
14
14
|
attr_accessor :title
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
attr_deprecate :text,
|
17
|
+
:version => '4.2',
|
18
|
+
:message => 'Please use the `message` attribute. For more information '\
|
19
|
+
'see https://github.com/backup/backup/pull/698'
|
19
20
|
|
20
21
|
##
|
21
22
|
# The timestamp for the event
|
@@ -48,9 +49,7 @@ module Backup
|
|
48
49
|
def initialize(model, &block)
|
49
50
|
super
|
50
51
|
instance_eval(&block) if block_given?
|
51
|
-
|
52
|
-
@title ||= default_title
|
53
|
-
@text ||= default_text
|
52
|
+
@title ||= "Backup #{ model.label }"
|
54
53
|
end
|
55
54
|
|
56
55
|
private
|
@@ -73,7 +72,9 @@ module Backup
|
|
73
72
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
74
73
|
#
|
75
74
|
def notify!(status)
|
76
|
-
|
75
|
+
msg = message.call(model, :status => status_data_for(status))
|
76
|
+
|
77
|
+
hash = { alert_type: default_alert_type(status) }
|
77
78
|
hash.store(:msg_title, @title)
|
78
79
|
hash.store(:date_happened, @date_happened) if @date_happened
|
79
80
|
hash.store(:priority, @priority) if @priority
|
@@ -82,13 +83,13 @@ module Backup
|
|
82
83
|
hash.store(:aggregation_key, @aggregation_key) if @aggregation_key
|
83
84
|
hash.store(:source_type_name, @source_type_name) if @source_type_name
|
84
85
|
hash.store(:alert_type, @alert_type) if @alert_type
|
85
|
-
send_event(hash)
|
86
|
+
send_event(msg, hash)
|
86
87
|
end
|
87
88
|
|
88
89
|
# Dogapi::Client will raise an error if unsuccessful.
|
89
|
-
def send_event(hash)
|
90
|
+
def send_event(msg, hash)
|
90
91
|
client = Dogapi::Client.new(@api_key)
|
91
|
-
event = Dogapi::Event.new(
|
92
|
+
event = Dogapi::Event.new(msg, hash)
|
92
93
|
client.emit_event(event)
|
93
94
|
end
|
94
95
|
|
@@ -101,16 +102,6 @@ module Backup
|
|
101
102
|
end
|
102
103
|
end
|
103
104
|
|
104
|
-
# set default title
|
105
|
-
def default_title
|
106
|
-
"Backup #{ model.label }"
|
107
|
-
end
|
108
|
-
|
109
|
-
# set default text
|
110
|
-
def default_text
|
111
|
-
"Backup Notification for #{ model.label }"
|
112
|
-
end
|
113
|
-
|
114
105
|
end
|
115
106
|
end
|
116
107
|
end
|
@@ -61,15 +61,16 @@ module Backup
|
|
61
61
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
62
62
|
#
|
63
63
|
def notify!(status)
|
64
|
-
@tags
|
65
|
-
message
|
66
|
-
send_message(message)
|
64
|
+
@tags += default_tags(status)
|
65
|
+
send_message(message.call(model, status: status_data_for(status)))
|
67
66
|
end
|
68
67
|
|
69
68
|
# Flowdock::Client will raise an error if unsuccessful.
|
70
69
|
def send_message(msg)
|
71
|
-
client = Flowdock::Flow.new(
|
72
|
-
|
70
|
+
client = Flowdock::Flow.new(
|
71
|
+
:api_token => token, :source => source,
|
72
|
+
:from => {:name => from_name, :address => from_email }
|
73
|
+
)
|
73
74
|
|
74
75
|
client.push_to_team_inbox(:subject => subject,
|
75
76
|
:content => msg,
|
@@ -9,10 +9,19 @@ module Backup
|
|
9
9
|
# The Hipchat API token
|
10
10
|
attr_accessor :token
|
11
11
|
|
12
|
+
##
|
13
|
+
# The Hipchat API version
|
14
|
+
# Either 'v1' or 'v2' (default is 'v1')
|
15
|
+
attr_accessor :api_version
|
16
|
+
|
12
17
|
##
|
13
18
|
# Who the notification should appear from
|
14
19
|
attr_accessor :from
|
15
20
|
|
21
|
+
##
|
22
|
+
# Custom server URL
|
23
|
+
attr_accessor :server_url
|
24
|
+
|
16
25
|
##
|
17
26
|
# The rooms that should be notified
|
18
27
|
attr_accessor :rooms_notified
|
@@ -45,6 +54,7 @@ module Backup
|
|
45
54
|
@success_color ||= 'yellow'
|
46
55
|
@warning_color ||= 'yellow'
|
47
56
|
@failure_color ||= 'yellow'
|
57
|
+
@api_version ||= 'v1'
|
48
58
|
end
|
49
59
|
|
50
60
|
private
|
@@ -67,18 +77,20 @@ module Backup
|
|
67
77
|
# : Notification will be sent if `on_warning` or `on_success` is `true`.
|
68
78
|
#
|
69
79
|
def notify!(status)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
80
|
+
status_data = status_data_for(status)
|
81
|
+
msg = message.call(model, :status => status_data)
|
82
|
+
send_message(msg, status_data[:color])
|
83
|
+
end
|
84
|
+
|
85
|
+
def client_options
|
86
|
+
{ api_version: @api_version }.tap do |h|
|
87
|
+
h[:server_url] = server_url if server_url
|
88
|
+
end
|
77
89
|
end
|
78
90
|
|
79
91
|
# Hipchat::Client will raise an error if unsuccessful.
|
80
92
|
def send_message(msg, color)
|
81
|
-
client = HipChat::Client.new(token)
|
93
|
+
client = HipChat::Client.new(token, client_options)
|
82
94
|
rooms_to_notify.each do |room|
|
83
95
|
client[room].send(from, msg, :color => color, :notify => notify_users)
|
84
96
|
end
|
@@ -88,6 +100,19 @@ module Backup
|
|
88
100
|
Array(rooms_notified).map {|r| r.split(',').map(&:strip) }.flatten
|
89
101
|
end
|
90
102
|
|
103
|
+
def status_data_for(status)
|
104
|
+
data = super(status)
|
105
|
+
data[:color] = status_color_for(status)
|
106
|
+
data
|
107
|
+
end
|
108
|
+
|
109
|
+
def status_color_for(status)
|
110
|
+
{
|
111
|
+
:success => success_color,
|
112
|
+
:warning => warning_color,
|
113
|
+
:failure => failure_color
|
114
|
+
}[status]
|
115
|
+
end
|
91
116
|
end
|
92
117
|
end
|
93
118
|
end
|