backup 4.1.12 → 4.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05a10c86b1bc49eee3b2e65770817d4c5d19aa32
4
- data.tar.gz: 4c4118f48da862a40ccfc92de56014a589490fbd
3
+ metadata.gz: 4b3395ec5399914784eeb39f638352a1ce486589
4
+ data.tar.gz: 7e8dfbc5aea5da8abed31b2dbf14d920cfcebb41
5
5
  SHA512:
6
- metadata.gz: 5d2a68639830362e7250a83f76553c62b08a0511cee9ba105c0b699529edd344a4a2788f525653a377d4b9e114071b88125a7ca736217c1a85fea985465f2865
7
- data.tar.gz: 50f8c2d48d66f84f6190cbe1d6497c6b37f44f44357931458b673f5d40dca58dbc165d6c1cbc77e6e27341a9e48237f658748b0842c49616d1715a5955f9b851
6
+ metadata.gz: 4e9ac7c7b0ad9ef5d7b4d5ac4147206c4407cceba3704aa15f53b0c99fadfe4c8703e07daa16dd874f0c3c80e836f89d1db56204de60e5c607080c4f96c498cc
7
+ data.tar.gz: e64842958d8d39f15f739e76b554012389fbd7720710a0602cded468ae2c0829ed43039b0757bbec5d6f48a1e1b58db6aec625ad8954d956c44b8eec125f69ca
@@ -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
- tag = case status
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)
@@ -13,9 +13,10 @@ module Backup
13
13
  # The title of the event
14
14
  attr_accessor :title
15
15
 
16
- ##
17
- # The text information for the event
18
- attr_accessor :text
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
- hash = {alert_type: default_alert_type(status)}
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(@text, hash)
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 += default_tags(status)
65
- message = "#{ model.label } (#{ model.trigger })"
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(:api_token => token, :source => source,
72
- :from => {:name => from_name, :address => from_email })
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,
@@ -67,13 +67,9 @@ module Backup
67
67
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
68
68
  #
69
69
  def notify!(status)
70
- tag, color = case status
71
- when :success then ['[Backup::Success]', success_color]
72
- when :warning then ['[Backup::Warning]', warning_color]
73
- when :failure then ['[Backup::Failure]', failure_color]
74
- end
75
- message = "#{ tag } #{ model.label } (#{ model.trigger })"
76
- send_message(message, color)
70
+ status_data = status_data_for(status)
71
+ msg = message.call(model, :status => status_data)
72
+ send_message(msg, status_data[:color])
77
73
  end
78
74
 
79
75
  # Hipchat::Client will raise an error if unsuccessful.
@@ -88,6 +84,19 @@ module Backup
88
84
  Array(rooms_notified).map {|r| r.split(',').map(&:strip) }.flatten
89
85
  end
90
86
 
87
+ def status_data_for(status)
88
+ data = super(status)
89
+ data[:color] = status_color_for(status)
90
+ data
91
+ end
92
+
93
+ def status_color_for(status)
94
+ {
95
+ :success => success_color,
96
+ :warning => warning_color,
97
+ :failure => failure_color
98
+ }[status]
99
+ end
91
100
  end
92
101
  end
93
102
  end
@@ -95,18 +95,13 @@ module Backup
95
95
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
96
96
  #
97
97
  def notify!(status)
98
- tag = case status
99
- when :success then '[Backup::Success]'
100
- when :failure then '[Backup::Failure]'
101
- when :warning then '[Backup::Warning]'
102
- end
103
- message = "#{ tag } #{ model.label } (#{ model.trigger })"
98
+ msg = message.call(model, :status => status_data_for(status))
104
99
 
105
100
  opts = {
106
101
  :headers => { 'User-Agent' => "Backup/#{ VERSION }" }.
107
102
  merge(headers).reject {|k,v| v.nil? }.
108
103
  merge('Content-Type' => 'application/x-www-form-urlencoded'),
109
- :body => URI.encode_www_form({ 'message' => message }.
104
+ :body => URI.encode_www_form({ 'message' => msg }.
110
105
  merge(params).reject {|k,v| v.nil? }.
111
106
  merge('status' => status.to_s)),
112
107
  :expects => success_codes # raise error if unsuccessful
@@ -148,14 +148,8 @@ module Backup
148
148
  # : backup log, if `on_failure` is `true`.
149
149
  #
150
150
  def notify!(status)
151
- tag = case status
152
- when :success then '[Backup::Success]'
153
- when :warning then '[Backup::Warning]'
154
- when :failure then '[Backup::Failure]'
155
- end
156
-
157
151
  email = new_email
158
- email.subject = "#{ tag } #{ model.label } (#{ model.trigger })"
152
+ email.subject = message.call(model, :status => status_data_for(status))
159
153
 
160
154
  send_log = send_log_on.include?(status)
161
155
  template = Backup::Template.new({ :model => model, :send_log => send_log })
@@ -14,8 +14,8 @@ module Backup
14
14
 
15
15
  ##
16
16
  # Nagios nrpe configuration file.
17
- attr_accessor :send_nsca_cfg
18
-
17
+ attr_accessor :send_nsca_cfg
18
+
19
19
  ##
20
20
  # Name of the Nagios service for the backup check.
21
21
  attr_accessor :service_name
@@ -55,12 +55,7 @@ module Backup
55
55
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
56
56
  #
57
57
  def notify!(status)
58
- message = case status
59
- when :success then 'Completed Successfully'
60
- when :warning then 'Completed Successfully (with Warnings)'
61
- when :failure then 'Failed'
62
- end
63
- send_message("#{ message } in #{ model.duration }")
58
+ send_message(message.call(model, :status => status_data_for(status)))
64
59
  end
65
60
 
66
61
  def send_message(message)
@@ -16,6 +16,9 @@ module Backup
16
16
  attr_accessor :api_key
17
17
 
18
18
  def initialize(model, &block)
19
+ @message = lambda do |model, data|
20
+ "#{ model.label } (#{ model.trigger })"
21
+ end
19
22
  super
20
23
  instance_eval(&block) if block_given?
21
24
  end
@@ -40,21 +43,17 @@ module Backup
40
43
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
41
44
  #
42
45
  def notify!(status)
43
- tag = case status
44
- when :success then '[Backup::Success]'
45
- when :warning then '[Backup::Warning]'
46
- when :failure then '[Backup::Failure]'
47
- end
48
- send_message(tag)
46
+ send_message(status)
49
47
  end
50
48
 
51
- def send_message(message)
49
+ def send_message(status)
52
50
  uri = 'https://api.prowlapp.com/publicapi/add'
51
+ status_data = status_data_for(status)
53
52
  data = {
54
53
  :application => application,
55
54
  :apikey => api_key,
56
- :event => message,
57
- :description => "#{ model.label } (#{ model.trigger })"
55
+ :event => status_data[:message],
56
+ :description => message.call(model, :status => status_data)
58
57
  }
59
58
  options = {
60
59
  :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
@@ -51,13 +51,7 @@ module Backup
51
51
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
52
52
  #
53
53
  def notify!(status)
54
- tag = case status
55
- when :success then '[Backup::Success]'
56
- when :failure then '[Backup::Failure]'
57
- when :warning then '[Backup::Warning]'
58
- end
59
- message = "#{ tag } #{ model.label } (#{ model.trigger })"
60
- send_message(message)
54
+ send_message(message.call(model, :status => status_data_for(status)))
61
55
  end
62
56
 
63
57
  def send_message(message)
@@ -66,14 +66,8 @@ module Backup
66
66
  # : backup log, if `on_failure` is `true`.
67
67
  #
68
68
  def notify!(status)
69
- tag = case status
70
- when :success then '[Backup::Success]'
71
- when :warning then '[Backup::Warning]'
72
- when :failure then '[Backup::Failure]'
73
- end
74
-
75
69
  email = ::Mail.new(:to => to, :from => from)
76
- email.subject = "#{ tag } #{ model.label } (#{ model.trigger })"
70
+ email.subject = message.call(model, :status => status_data_for(status))
77
71
 
78
72
  send_log = send_log_on.include?(status)
79
73
  template = Backup::Template.new({ :model => model, :send_log => send_log })
@@ -61,21 +61,15 @@ module Backup
61
61
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
62
62
  #
63
63
  def notify!(status)
64
- tag = case status
65
- when :success then '[Backup::Success]'
66
- when :failure then '[Backup::Failure]'
67
- when :warning then '[Backup::Warning]'
68
- end
69
- message = "#{ tag } #{ model.label } (#{ model.trigger })"
70
-
71
- data = { :text => message }
64
+ data = {
65
+ :text => message.call(model, :status => status_data_for(status)),
66
+ :attachments => [attachment(status)]
67
+ }
72
68
  [:channel, :username, :icon_emoji].each do |param|
73
69
  val = send(param)
74
70
  data.merge!(param => val) if val
75
71
  end
76
72
 
77
- data.merge!(:attachments => [attachment(status)])
78
-
79
73
  options = {
80
74
  :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
81
75
  :body => URI.encode_www_form(:payload => JSON.dump(data))
@@ -38,13 +38,7 @@ module Backup
38
38
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
39
39
  #
40
40
  def notify!(status)
41
- tag = case status
42
- when :success then '[Backup::Success]'
43
- when :warning then '[Backup::Warning]'
44
- when :failure then '[Backup::Failure]'
45
- end
46
- message = "#{ tag } #{ model.label } (#{ model.trigger }) (@ #{ model.time })"
47
- send_message(message)
41
+ send_message(message.call(model, :status => status_data_for(status)))
48
42
  end
49
43
 
50
44
  # Twitter::Client will raise an error if unsuccessful.
@@ -45,12 +45,7 @@ module Backup
45
45
  # : Notification will be sent if `on_warning` or `on_success` is `true`.
46
46
  #
47
47
  def notify!(status)
48
- message = case status
49
- when :success then 'Completed Successfully'
50
- when :warning then 'Completed Successfully (with Warnings)'
51
- when :failure then 'Failed'
52
- end
53
- send_message("#{ message } in #{ model.duration }")
48
+ send_message(message.call(model, :status => status_data_for(status)))
54
49
  end
55
50
 
56
51
  def send_message(message)
@@ -42,8 +42,11 @@ module Backup
42
42
  # The command's output will then be either piped to the Encryptor
43
43
  # or the Splitter (if no Encryptor), or through `cat` into the final
44
44
  # output file if neither are configured.
45
- @pipeline << "#{ utility(:tar) } -cf - " +
46
- "-C '#{ Config.tmp_path }' '#{ @package.trigger }'"
45
+ @pipeline.add(
46
+ "#{ utility(:tar) } -cf - " +
47
+ "-C '#{ Config.tmp_path }' '#{ @package.trigger }'",
48
+ tar_success_codes
49
+ )
47
50
 
48
51
  ##
49
52
  # If an Encryptor was configured, it will be called first
@@ -96,6 +99,9 @@ module Backup
96
99
  stack.shift
97
100
  end
98
101
 
102
+ def tar_success_codes
103
+ gnu_tar? ? [0, 1] : [0]
104
+ end
99
105
  end
100
106
  end
101
107
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Backup
4
- VERSION = '4.1.12'
4
+ VERSION = '4.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.12
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael van Rooijen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-01 00:00:00.000000000 Z
11
+ date: 2015-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: CFPropertyList