scalingo_backups_manager 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ddc26bcd894cfe092ba3fbbcfa954c68661bf64639a88f224e99d8848de16e2
4
- data.tar.gz: 8742e9f0f1b4d3d2655a96f218eda3a753f13f4873440bb1e1e3c84ab7ba573c
3
+ metadata.gz: cb4252e471c6c966e5673feab9807268aaafcb8a59d5d2aea1f0a6d49a994bd8
4
+ data.tar.gz: f9861da02ad73c2446c78c8cf5cda3259413c90abb7e3f46e5d5c93be6fd57a0
5
5
  SHA512:
6
- metadata.gz: 75f37abc3dc0c5fd0eb259d55d857cf79bdd402f2d653dae315822830a06f4dce895cdb686f74e845f806c3847a0606afa088ca0d279408002129c500186d276
7
- data.tar.gz: 58f6b07bbf870eff376e88c284e8dafa50eb5a0d95d28e685e2127de7544550ea2d81179214d0f031ad9002396237995db78afaa40162ffdace39ae42c3264e0
6
+ metadata.gz: '08d683e68796cdb06ee814d6e01fc68e48dac4ff8d6d8f57ca1c3a065d3d48e141513ba0811f97d7f7cef10a5fa28ac5ab6bef5af4948c7533f917aa1f31aa20'
7
+ data.tar.gz: 49683566926006725fa2eab13418542ba7b60d6f74d6e1643b38ffe2ace9967bd7e24636a52dc820bb2a5a5affbfbb5a80d552c539c72100ae00428942204a24
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- scalingo_backups_manager (0.4.0)
4
+ scalingo_backups_manager (0.5.0)
5
5
  httparty (~> 0.18)
6
6
  net-sftp (~> 3.0.0)
7
7
  scalingo (~> 3.0)
@@ -128,38 +128,41 @@ module ScalingoBackupsManager
128
128
  def upload_to_ftp
129
129
  invoke :download, [], application: options[:application], addon: options[:addon]
130
130
  configuration = Configuration.new
131
+ opts = {
132
+ webhooks: configuration.config[:webhooks]
133
+ }
131
134
  configuration.for_each_addons do |application, addon|
132
135
  step = 1
133
- config = addon.sftp_config
136
+ sftp_config = addon.sftp_config
134
137
  path = ("#{addon.config[:path]}" || "backups/#{addon.addon_provider[:id]}") + "/#{Time.now.strftime("%Y%m%d")}.tar.gz"
135
138
  next unless File.exists?(path)
136
139
  puts "** Upload backup for #{application.name} **"
137
140
 
138
- sftp = ScalingoBackupsManager::SftpTools.new(config[:auth])
141
+ sftp = ScalingoBackupsManager::SftpTools.new(sftp_config[:auth])
139
142
 
140
143
  folders = [
141
- config.dig(:auth, :dir),
142
- config.dig(:dir) || application.name,
144
+ sftp_config.dig(:auth, :dir),
145
+ sftp_config.dig(:dir) || application.name,
143
146
  addon.addon_provider[:id]
144
147
  ]
145
148
 
146
- if config[:retention].blank?
149
+ if sftp_config[:retention].blank?
147
150
  remote_path = "/" + [folders].delete_if(&:blank?).join("/")
148
151
  sftp.mkdir!(remote_path)
149
- sftp.upload_file(path, remote_path)
152
+ sftp.upload_file(path, remote_path, options: opts)
150
153
  next
151
154
  end
152
155
 
153
- config[:retention].each do |k, retention_config|
156
+ sftp_config[:retention].each do |k, retention_config|
154
157
  retention_folders = folders.dup
155
- retention_folders << config.dig(:retention, k, :dir)
158
+ retention_folders << sftp_config.dig(:retention, k, :dir)
156
159
  remote_path = "/" + retention_folders.delete_if(&:blank?).join("/")
157
160
  puts "#{step} - Creating remote directory at #{remote_path}"
158
161
  step += 1
159
162
  sftp.mkdir!(remote_path)
160
163
  case k
161
164
  when "daily"
162
- sftp.upload_file(path, remote_path)
165
+ sftp.upload_file(path, remote_path, options: opts)
163
166
  files = sftp.list_files(remote_path)
164
167
  puts "#{step} - Checking daily backups"
165
168
  step += 1
@@ -173,7 +176,7 @@ module ScalingoBackupsManager
173
176
  end
174
177
  when "monthly"
175
178
  next unless Date.today.day == 1
176
- sftp.upload_file(path, remote_path)
179
+ sftp.upload_file(path, remote_path, options: opts)
177
180
  puts "#{step} - Checking monthly backups"
178
181
  step += 1
179
182
  end
@@ -0,0 +1,30 @@
1
+ require 'httparty'
2
+ module ScalingoBackupsManager
3
+
4
+ class Notification
5
+
6
+ def self.send_slack_notification(hook_url, message)
7
+ HTTParty.post(
8
+ hook_url,
9
+ body: {
10
+ message: message
11
+ }.to_json,
12
+ headers: { 'Content-Type' => 'application/json' }
13
+ )
14
+ end
15
+
16
+ def self.send_discord_notification(hook_url, message)
17
+ payload = {
18
+ user: 'Scalingo backups manager',
19
+ content: message
20
+ }.to_json
21
+ HTTParty.post(
22
+ hook_url,
23
+ body: payload,
24
+ headers: { 'Content-Type': 'application/json' }
25
+ )
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -1,3 +1,4 @@
1
+ require 'scalingo_backups_manager/notification'
1
2
  require 'net/sftp'
2
3
 
3
4
  module ScalingoBackupsManager
@@ -45,10 +46,19 @@ module ScalingoBackupsManager
45
46
  end
46
47
  end
47
48
 
48
- def upload_file(filepath, remote_dir)
49
+ def upload_file(filepath, remote_dir, options: {})
49
50
  filename = filepath.split('/').last
50
51
  start do |sftp|
51
- sftp.upload!(filepath, "#{remote_dir}/#{filename}")
52
+ begin
53
+ sftp.upload!(filepath, "#{remote_dir}/#{filename}")
54
+ rescue
55
+ if options.dig(:webhooks, :slack_webhook_url)
56
+ ScalingoBackupsManager::Notification.send_slack_notification(options.dig(:webhooks, :slack_webhook_url), "An error has occured while uploading backup, see the logs for more information")
57
+ end
58
+ if options.dig(:webhooks, :discord_webhook_url)
59
+ ScalingoBackupsManager::Notification.send_discord_notification(options.dig(:webhooks, :discord_webhook_url), "An error has occured while uploading backup, see the logs for more information")
60
+ end
61
+ end
52
62
  end
53
63
  end
54
64
  end
@@ -1,3 +1,3 @@
1
1
  module ScalingoBackupsManager
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scalingo_backups_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Clercin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-01 00:00:00.000000000 Z
11
+ date: 2021-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -92,6 +92,7 @@ files:
92
92
  - lib/scalingo_backups_manager/backup.rb
93
93
  - lib/scalingo_backups_manager/cli.rb
94
94
  - lib/scalingo_backups_manager/configuration.rb
95
+ - lib/scalingo_backups_manager/notification.rb
95
96
  - lib/scalingo_backups_manager/restore/mongodb.rb
96
97
  - lib/scalingo_backups_manager/restore/mysql.rb
97
98
  - lib/scalingo_backups_manager/restore/postgres.rb