gat 0.2.8 → 0.2.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,28 +3,28 @@
3
3
  require 'rubygems'
4
4
  require 'gatgets/dar_backup/dar_backup'
5
5
 
6
- class YourLauncherBackupScript < GatgetDarBackup #:nodoc:
6
+ class LauncherForGatgetDarBackup < GatgetDarBackup #:nodoc:
7
7
  end
8
8
 
9
9
  # default options... see all options at Gatget config file GAT_ROOT + /lib/gatgets/dar_backup/dar_backup.yml
10
10
 
11
11
  options = {
12
- # include gat common config
13
- 'gat_config' => '/etc/gat/gat.yml',
14
- # gatget config
15
- 'gatget_config' => {
16
- # backup folder
17
- 'folders' => {
18
- 'backups_folder' => {
19
- 'path' => '/tmp/backup'
20
- }
12
+ 'gat_config' => '/etc/gat/gat.yml', # include gat common config
13
+ 'gatget_config' => { # gatget config
14
+ 'folders' => { # backup folder
15
+ 'backups_folder' => { 'path' => '/mnt/backups' }
16
+ },
17
+ 'operations' => { # change user allowed to run backup operations, by default only root is allowed
18
+ 'do_backup' => { 'users' => [ 'root' ] },
19
+ 'list_backups' => { 'users' => [ 'root' ] },
20
+ 'search' => { 'users' => [ 'root' ] }
21
21
  },
22
22
  # static values
23
23
  'static' => {
24
24
  # week days in which complete backup is performed
25
25
  'complet_backup_days' => [ 0 ],
26
26
  # number of complet backups are going to be stored at the machine
27
- 'number_backup_stored' => 0,
27
+ 'number_backup_stored' => 1,
28
28
  # disk space limit to perform backup, in megas
29
29
  'space_thresold' => '3000M',
30
30
  # folders to exclude from backup
@@ -32,6 +32,8 @@ options = {
32
32
  'sys', 'usr', 'cdrom', 'lib', 'lost+found', 'mnt', 'proc', 'bin',
33
33
  'srv', 'tmp', 'home',
34
34
  'var', 'etc' ],
35
+ 'dar_encrypt_passwd' => 'none',
36
+ 'dar_decrypt_passwd' => 'none',
35
37
  # should gatget does a mysqldumps
36
38
  'mysql_dumps' => false,
37
39
  'mysql_user' => '',
@@ -41,4 +43,4 @@ options = {
41
43
  }
42
44
 
43
45
  # Launch Gatget
44
- YourLauncherBackupScript.launch(options, ARGV)
46
+ LauncherForGatgetDarBackup.launch(options, ARGV)
@@ -0,0 +1,143 @@
1
+ class SystemBackup
2
+
3
+ attr_accessor :name
4
+ attr_accessor :isolate
5
+ attr_accessor :isolate_slices
6
+ attr_accessor :slices
7
+ attr_accessor :size
8
+ attr_accessor :size_nice
9
+ attr_accessor :dump
10
+ attr_accessor :type
11
+ attr_accessor :folder
12
+ attr_accessor :current
13
+ attr_accessor :full_dar_path
14
+
15
+ def initialize(backup_file, backup_folder_path, current_folder)
16
+ @name = backup_file.split('.').first
17
+ @isolate = has_isolate?("#{ backup_folder_path }/#{ @name }")
18
+ @dump = has_dump?("#{ backup_folder_path }/#{ @name }")
19
+ @slices = slices_for(backup_folder_path, @name)
20
+ @size = 0
21
+ @slices.each do |slice|
22
+ @size += File.size("#{ backup_folder_path }/#{ slice }")
23
+ end
24
+ @type = @name.include?('complet') ? 'complet' : 'diff'
25
+ @folder = backup_folder_path.split('/').last
26
+ @current = @folder == current_folder
27
+
28
+ @full_dar_path = "#{ backup_folder_path }/#{ @name }"
29
+
30
+ end
31
+
32
+
33
+ def self.find(how_many, path_to_search, conditions = {})
34
+
35
+ current_folder = nil
36
+ if File.exists?("#{ path_to_search }/current")
37
+ current_folder = File.readlink("#{ path_to_search }/current").gsub(/\//,'')
38
+ end
39
+
40
+ all_backups = get_backups_in(path_to_search, current_folder)
41
+ backups = []
42
+
43
+ all_backups.each do |backup|
44
+ backups << backup if SystemBackup.valid_backup_file?(backup, conditions)
45
+ end
46
+
47
+ if how_many == :first
48
+ return_backups = backups.first
49
+ elsif how_many == :last
50
+ return_backups = backups.last
51
+ elsif how_many == :all
52
+ return_backups = backups
53
+ else
54
+ raise Gat::GatgetProcessException.new("Undefined return backups symbol #{ how_many }", "find")
55
+ end
56
+
57
+ return_backups
58
+ end
59
+
60
+
61
+ def search_pattern(pattern)
62
+ unless self.has_dump?(self.full_dar_path)
63
+ raise Gat::GatgetProcessException.new("Unable to search_pattern withour dump. Create it first", "search_pattern")
64
+ end
65
+
66
+ results = ''
67
+
68
+ dump_file = File.open("#{ self.full_dar_path }_dump", "r")
69
+
70
+ dump_file.each_line do |line|
71
+ if line.include?(pattern)
72
+ results << line
73
+ end
74
+ end
75
+
76
+ results
77
+ end
78
+
79
+ protected
80
+ def has_isolate?(path)
81
+ File.exists?("#{ path }_isolate.1.dar")
82
+ end
83
+
84
+ def has_dump?(path)
85
+ File.exists?("#{ path }_dump")
86
+ end
87
+
88
+ private
89
+ def self.valid_backup_file?(backup, conditions)
90
+
91
+ valid_conditions = [ :current, :dump, :isolate, :folder, :type]
92
+
93
+ conditions.each_key do |cond|
94
+ unless valid_conditions.include?(cond)
95
+ raise Gat::GatgetProcessException.new("Find backup with condition #{ cond }. Condition not valid", "valid_backup_file?")
96
+ end
97
+ end
98
+
99
+ passed = true
100
+ conditions.each_pair do |condition_name, condition_value|
101
+ unless backup.send(condition_name) == condition_value
102
+ passed = false
103
+ end
104
+ end
105
+
106
+ passed
107
+ end
108
+
109
+ def self.get_backups_in(path_to_search, current_folder)
110
+
111
+ backups = []
112
+ (Dir.entries(path_to_search) - ['current', '.', '..']).each do |backup_folder|
113
+
114
+ backup_folder_path = "#{ path_to_search }/#{ backup_folder }"
115
+
116
+ (Dir.entries(backup_folder_path) - ['..', '.' ]).each do |backup_file|
117
+
118
+ if SystemBackup.is_reference_backup_file?(backup_file)
119
+ backups << SystemBackup.new(backup_file, backup_folder_path, current_folder)
120
+ end
121
+ end
122
+ end
123
+ backups
124
+ end
125
+
126
+ # reference file is the first slice of backup. No isolate, no dump
127
+ def self.is_reference_backup_file?(name)
128
+ name.include?('1.dar') and not name.include?('_isolate') and not name.include?('_dump')
129
+ end
130
+
131
+
132
+ def slices_for(path, name)
133
+ slices = []
134
+ (Dir.entries(path) - ['.', '..']).each do |entry|
135
+ if entry.include?(name) and not entry.include?('isolate') and not entry.include?('dump')
136
+ slices << entry
137
+ end
138
+ end
139
+ slices
140
+ end
141
+
142
+
143
+ end
@@ -1,31 +1,24 @@
1
1
  % system_backups = operation.gatget.get_dependence_value("variable", "system_backups") || []
2
- % catalog_backups = operation.gatget.get_dependence_value("variable", "catalog_backups") || []
3
- % system_backups = system_backups.select{ |backup| !backup['isolate']}
4
- % if system_backups.empty? and catalog_backups.empty?
2
+ % if system_backups.empty?
5
3
 
6
4
  ERROR: No Backups stored at System
7
5
 
8
6
  % else
9
7
 
10
- Listintg Backups in File System and at Catalog:
8
+ Listintg Backups in File System:
11
9
 
12
10
  - Backup Folder : <%= operation.gatget.get_dependence_value("folders", "backups_folder_data_local") %>
13
- - Catalog : <%= operation.gatget.get_flag("catalog_exists") ? operation.gatget.get_dependence_value("variable", "catalog_path") : "Catalog doesnt exists!" %>
14
11
 
15
- /<%= '-' * 148 %>\
16
- | <%= 'File Name'.ljust(50) %> | <%= 'File Folder'.ljust(15) %> | <%= 'Size'.ljust(10) %> | <%= 'In Catalog'.ljust(10) %> | <%= 'Dar ID'.ljust(6) %> | <%= 'Dar Name'.ljust(40) %> |
17
- |<%= '-' * 148 %>|
18
- % system_backups.each do |system_backup|
19
- % is_in_catalog = catalog_backups.select{ |backup| backup['dar_name'] == system_backup['dar_name'] }
20
- % if is_in_catalog.empty?
21
- % in_catalog = 'No'
22
- % id_catalog = '-'
23
- % else
24
- % in_catalog = 'Yes'
25
- % id_catalog = is_in_catalog.first['id'] || 'x'
26
- % end
27
- | <%= system_backup['name'].ljust(50) %> | <%= system_backup['folder'].ljust(15) %> | <%= File.nice_size(system_backup['path']).ljust(10) %> | <%= in_catalog.ljust(10) %> | <%= id_catalog.ljust(6) %> | <%= system_backup['dar_name'].ljust(40) %> |
12
+ /<%= '-' * 122 %>\
13
+ | <%= 'Backup Name'.ljust(40) %> | <%= 'File Folder'.ljust(15) %> | <%= 'Size'.ljust(10) %> | <%= 'Slices'.ljust(7) %> | <%= 'Isolate?'.ljust(10) %> | <%= 'Dumped?'.ljust(10) %> | <%= 'Current?'.ljust(10) %> |
14
+ % last_folder = ''
15
+ % system_backups.each do |backup|
16
+ % if last_folder != backup.folder
17
+ |<%= '-' * 122 %>|
28
18
  % end
29
- \<%= '-' * 148 %>/
19
+ | <%= backup.name.ljust(40) %> | <%= backup.folder.ljust(15) %> | <%= nice_file_size(backup.size).ljust(10) %> | <%= backup.slices.count.to_s.ljust(7) %> | <%= (backup.isolate ? "Yes" : "No").ljust(10) %> | <%= (backup.dump ? "Yes" : "No").ljust(10) %> | <%= (backup.current ? "Yes" : "No").ljust(10) %> |
20
+ % last_folder = backup.folder
21
+ % end
22
+ \<%= '-' * 122 %>/
30
23
 
31
24
  %end
@@ -0,0 +1,27 @@
1
+ #!/bin/bash
2
+
3
+ # Maybe we want to show only devices with ID_FS_USAGE
4
+
5
+ for block in `ls -d /sys/block/*`; do
6
+ echo "Comprobando $block"
7
+ USB=`udevinfo -a -p $block | grep "SUBSYSTEMS==\"usb\""`
8
+ if [ "x$USB" != "x" ]; then
9
+ echo "======= $block =========="
10
+ udevinfo -q all -p $block
11
+ for option in `echo "ATTR{size} ATTRS{serial} ATTRS{model} ATTRS{vendor}"`; do
12
+ udevinfo -a -p $block | grep "$option"
13
+ done
14
+ echo
15
+ # Look for partitions
16
+ for part in `find $block/* -name partition`; do
17
+ part_name=`echo $part | sed -e "s0/partition00"`
18
+ echo "========== PARTITION $part_name =========="
19
+ udevinfo -q all -p $part_name
20
+ for option in `echo "KERNEL== SUBSYSTEM== DRIVER== ATTR{partition} ATTR{start} ATTR{stat} ATTR{size}"`; do
21
+ udevinfo -a -p $part_name | grep "$option"
22
+ done
23
+
24
+ done
25
+ fi
26
+ done
27
+
@@ -67,7 +67,7 @@ class GatgetSynchronization < Gat::Base
67
67
  def onfail
68
68
 
69
69
  unless self.config['email_config']
70
- raise Gat::GatgetConfigException.new("Default email config is empty at gatget.config['email_config']", "run_output_email")
70
+ raise Gat::GatgetConfigException.new("Default email config is empty at gatget.config['email_config']", "synchronization:onfail")
71
71
  end
72
72
 
73
73
  unless self.config['email_config']['send_to']
data/test/test_gat.rb CHANGED
@@ -1,36 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
-
4
- # define Test Class
5
- GATGET_TESTER_ROOT = File.expand_path(File.dirname(__FILE__))
6
- class GatgetTester < Gat::Base
7
-
8
- def test_ruby_method
9
- 'tested'
10
- end
11
- end
12
-
13
-
14
- class TesterLauncher < GatgetTester
15
- end
16
-
17
3
  class TestGat < Test::Unit::TestCase
18
4
 
19
5
  def setup
20
6
  end
21
7
 
22
- def test_gat
23
-
24
- # Testing is done with a testing yml File
25
- # so, process it!!!
26
- test_options = { 'config_file_name' => "#{ GATGET_TESTER_ROOT }/test.yml" }
27
- TesterLauncher.launch(test_options, ['test'])
28
-
29
-
30
-
8
+ def test_truth
31
9
  assert true
32
10
  end
33
-
34
- def test_de
35
- end
36
11
  end
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.8
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - gnoxys
@@ -9,9 +9,29 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-17 00:00:00 +01:00
12
+ date: 2010-03-22 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: tmail
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.3
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: open4
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "1.0"
34
+ version:
15
35
  - !ruby/object:Gem::Dependency
16
36
  name: rubyforge
17
37
  type: :development
@@ -66,10 +86,11 @@ files:
66
86
  - bin/gat
67
87
  - lib/gat.rb
68
88
  - lib/gat/action/base.rb
69
- - lib/gat/action/shell_command.rb
70
89
  - lib/gat/action/ruby_method.rb
90
+ - lib/gat/action/shell_command.rb
71
91
  - lib/gat/boot.rb
72
92
  - lib/gat/checks.rb
93
+ - lib/gat/condition.rb
73
94
  - lib/gat/debug.rb
74
95
  - lib/gat/dependence/argument.rb
75
96
  - lib/gat/dependence/base.rb
@@ -83,8 +104,10 @@ files:
83
104
  - lib/gat/launcher.rb
84
105
  - lib/gat/logger.rb
85
106
  - lib/gat/operation.rb
107
+ - lib/gat/sample.yml
86
108
  - lib/gat/version.rb
87
109
  - lib/gatgets/dar_backup/dar_backup.rb
110
+ - lib/gatgets/dar_backup/system_backup.rb
88
111
  - lib/gatgets/dar_backup/dar_backup.yml
89
112
  - lib/gatgets/dar_backup/launcher.rb
90
113
  - lib/gatgets/dar_backup/templates/list_backups.erb
@@ -92,11 +115,12 @@ files:
92
115
  - lib/gatgets/gatgets_manager/gatgets_manager.rb
93
116
  - lib/gatgets/gatgets_manager/gatgets_manager.yml
94
117
  - lib/gatgets/gatgets_manager/templates/list.erb
118
+ - lib/gatgets/synchronization/README
119
+ - lib/gatgets/synchronization/launcher.rb
120
+ - lib/gatgets/synchronization/launcher_cron.sh
95
121
  - lib/gatgets/synchronization/synchronization.rb
96
122
  - lib/gatgets/synchronization/synchronization.yml
97
- - lib/gatgets/synchronization/launcher_cron.sh
98
- - lib/gatgets/synchronization/launcher.rb
99
- - lib/gatgets/synchronization/README
123
+ - lib/gatgets/synchronization/detect_block_devices.sh
100
124
  has_rdoc: true
101
125
  homepage:
102
126
  licenses: []