gat 0.2.12 → 0.2.13

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.
@@ -1,3 +1,6 @@
1
+ == 0.2.13 2010-04-23
2
+ * Improved sending of mails from synchronization gatget
3
+
1
4
  == 0.2.12 2010-03-30
2
5
  * Bugfix release
3
6
  * Fix bug at get_reference_backups. Condition was name.include?('1.dar') so xxx.11.dar was also include. change to .include?('.1.dar')
@@ -17,6 +17,6 @@
17
17
 
18
18
  module Gat
19
19
 
20
- VERSION = '0.2.12'
20
+ VERSION = '0.2.13'
21
21
 
22
22
  end
@@ -41,8 +41,6 @@ class GatgetDarBackup < Gat::Base
41
41
 
42
42
  backups_path = get_dependence_value("folders", "backups_folder_data_local")
43
43
  last_complet_backup = SystemBackup.find(:last, backups_path, { :current => true, :type => 'complet'})
44
-
45
-
46
44
  if not last_complet_backup
47
45
 
48
46
  # * perform a complet backup
@@ -1,5 +1,5 @@
1
1
  class SystemBackup
2
-
2
+
3
3
  attr_accessor :name
4
4
  attr_accessor :isolate
5
5
  attr_accessor :isolate_slices
@@ -11,7 +11,7 @@ class SystemBackup
11
11
  attr_accessor :folder
12
12
  attr_accessor :current
13
13
  attr_accessor :full_dar_path
14
-
14
+
15
15
  def initialize(backup_file, backup_folder_path, current_folder)
16
16
  @name = backup_file.split('.').first
17
17
  @isolate = has_isolate?("#{ backup_folder_path }/#{ @name }")
@@ -24,72 +24,70 @@ class SystemBackup
24
24
  @type = @name.include?('complet') ? 'complet' : 'diff'
25
25
  @folder = backup_folder_path.split('/').last
26
26
  @current = @folder == current_folder
27
-
27
+
28
28
  @full_dar_path = "#{ backup_folder_path }/#{ @name }"
29
-
29
+
30
30
  end
31
-
32
-
31
+
32
+
33
33
  def self.find(how_many, path_to_search, conditions = {})
34
-
34
+
35
35
  current_folder = nil
36
36
  if File.exists?("#{ path_to_search }/current")
37
37
  current_folder = File.readlink("#{ path_to_search }/current").gsub(/\//,'')
38
38
  end
39
-
40
39
  all_backups = get_backups_in(path_to_search, current_folder)
41
40
  backups = []
42
-
41
+
43
42
  all_backups.each do |backup|
44
43
  backups << backup if SystemBackup.valid_backup_file?(backup, conditions)
45
44
  end
46
-
47
45
  if how_many == :first
48
46
  return_backups = backups.first
49
- elsif how_many == :last
47
+ elsif how_many == :last
50
48
  return_backups = backups.last
51
49
  elsif how_many == :all
52
50
  return_backups = backups
53
51
  else
54
52
  raise Gat::GatgetProcessException.new("Undefined return backups symbol #{ how_many }", "find")
55
53
  end
56
-
54
+
57
55
  return_backups
58
56
  end
59
-
60
-
57
+
58
+
61
59
  def search_pattern(pattern)
62
60
  unless self.has_dump?(self.full_dar_path)
63
61
  raise Gat::GatgetProcessException.new("Unable to search_pattern withour dump. Create it first", "search_pattern")
64
62
  end
65
-
63
+
66
64
  results = ''
67
-
65
+
68
66
  dump_file = File.open("#{ self.full_dar_path }_dump", "r")
69
-
67
+
70
68
  dump_file.each_line do |line|
71
69
  if line.include?(pattern)
72
70
  results << line
73
71
  end
74
72
  end
75
-
73
+
76
74
  results
77
75
  end
78
-
76
+
79
77
  protected
80
78
  def has_isolate?(path)
81
79
  File.exists?("#{ path }_isolate.1.dar")
82
80
  end
83
-
81
+
84
82
  def has_dump?(path)
85
83
  File.exists?("#{ path }_dump")
86
84
  end
87
-
85
+
88
86
  private
89
87
  def self.valid_backup_file?(backup, conditions)
90
-
88
+
91
89
  valid_conditions = [ :current, :dump, :isolate, :folder, :type]
92
-
90
+
93
91
  conditions.each_key do |cond|
94
92
  unless valid_conditions.include?(cond)
95
93
  raise Gat::GatgetProcessException.new("Find backup with condition #{ cond }. Condition not valid", "valid_backup_file?")
@@ -102,19 +100,18 @@ class SystemBackup
102
100
  passed = false
103
101
  end
104
102
  end
105
-
103
+
106
104
  passed
107
105
  end
108
-
106
+
109
107
  def self.get_backups_in(path_to_search, current_folder)
110
-
111
108
  backups = []
112
109
  (Dir.entries(path_to_search) - ['current', '.', '..']).each do |backup_folder|
113
-
110
+ puts backup_folder
114
111
  backup_folder_path = "#{ path_to_search }/#{ backup_folder }"
115
-
112
+
116
113
  (Dir.entries(backup_folder_path) - ['..', '.' ]).each do |backup_file|
117
-
114
+ puts backup_file
118
115
  if SystemBackup.is_reference_backup_file?(backup_file)
119
116
  backups << SystemBackup.new(backup_file, backup_folder_path, current_folder)
120
117
  end
@@ -122,13 +119,13 @@ class SystemBackup
122
119
  end
123
120
  backups
124
121
  end
125
-
122
+
126
123
  # reference file is the first slice of backup. No isolate, no dump
127
124
  def self.is_reference_backup_file?(name)
128
125
  name.include?('.1.dar') and not name.include?('_isolate') and not name.include?('_dump')
129
126
  end
130
-
131
-
127
+
128
+
132
129
  def slices_for(path, name)
133
130
  slices = []
134
131
  (Dir.entries(path) - ['.', '..']).each do |entry|
@@ -138,6 +135,6 @@ class SystemBackup
138
135
  end
139
136
  slices
140
137
  end
141
-
142
-
138
+
139
+
143
140
  end
@@ -63,6 +63,33 @@ class GatgetSynchronization < Gat::Base
63
63
  end
64
64
 
65
65
 
66
+ def notify_end
67
+ st_notify_email_ended = get_dependence_value("static", "notify_email_ended")
68
+ if st_notify_email_ended && st_notify_email_ended["sent_to"]
69
+ to = st_notify_email_ended
70
+ end
71
+ subject = st_notify_email_ended["subject"]
72
+ body = st_notify_email_ended["body"]
73
+ if to.nil?
74
+ if self.config["email_config"]
75
+ to = self.config["email_config"]["send_to"]
76
+ else
77
+ raise Gat::GatgetConfigException.new("Default email config[to] is empty at gatget.config['email_config']", "run_output_email")
78
+ end
79
+ end
80
+ subject = "Rsync ended" if subject.nil?
81
+ body = "Define your own body in static.notify_email_ended.body" if body.nil?
82
+
83
+ full_subject = "[GAT] [#{ self.class.name }] [#{ self.operation.name.camelize }] #{subject}"
84
+ create_and_deliver_email(to,
85
+ { 'subject' => full_subject,
86
+ 'body' => body },
87
+ self.config["email_config"]
88
+ )
89
+ end
90
+
91
+
92
+
66
93
  # send rescue email will send a email for notification errors at do_backup operation
67
94
  def onfail
68
95
 
@@ -11,6 +11,11 @@ static:
11
11
  notify_email_started:
12
12
  subject: Rsync started
13
13
  body: You will receive an email when the rsync is ended
14
+ to: sandraantolin@lopez-brea.com
15
+ notify_email_ended:
16
+ subject: Rsync finished
17
+ body: Rsync finished OK
18
+ to: sandraantolin@lopez-brea.com
14
19
  my_host_remote_folder: /home/backup/
15
20
  my_host_remote_host: my_host
16
21
  my_host_remote_user: backup
@@ -84,8 +89,8 @@ operations:
84
89
  folders: [ source, dest ]
85
90
  helpers: [ ]
86
91
  conditions: [ check_enough_space_for_sync ]
87
- actions: [ notify_start, exec_local_rsync ]
88
- outputs: [ email ]
92
+ actions: [ notify_start, exec_local_rsync, notify_end ]
93
+ outputs: [ ]
89
94
  onfail: [ ]
90
95
  options:
91
96
  verbose: 1
@@ -125,6 +130,8 @@ operations:
125
130
  actions:
126
131
  notify_start:
127
132
  type: ruby_method
133
+ notify_end:
134
+ type: ruby_method
128
135
  exec_local_rsync:
129
136
  type: shell_command
130
137
  syntax: "rsync -az --delete {{folders_source}} {{folders_dest}}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.2.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - gnoxys
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-04-16 00:00:00 +02:00
12
+ date: 2010-04-23 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency