niky81-s3rbackup 0.3.4 → 0.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.
Files changed (4) hide show
  1. data/bin/s3query.rb +28 -3
  2. data/bin/s3rbackup.rb +5 -1
  3. data/lib/s3dbsync.rb +45 -32
  4. metadata +2 -2
@@ -16,7 +16,7 @@ class OptS3rquery
16
16
  def self.parse(args)
17
17
  options = {}
18
18
  opts = OptionParser.new do |opts|
19
- opts.banner = "Usage: s3query.rb [options] <search|get|unpack|delete|stats> <parameters> (parameters can be name=test or simply test)"
19
+ opts.banner = "Usage: s3query.rb [options] <search|get|unpack|delete|stats|delete_older> <parameters> (parameters can be name=test or simply test)"
20
20
 
21
21
  opts.on("-s", "search words", String, "Search something") do |name|
22
22
  options[:op] = "search"
@@ -78,6 +78,10 @@ class OptS3rquery
78
78
  options[:config_num] = name
79
79
  end
80
80
 
81
+ opts.on("-e", "--item-to-keep NUM", Integer, "Number of item to keep after deleting the olders (delete_older)") do |name|
82
+ options[:delete_older] = name
83
+ end
84
+
81
85
  opts.on("--initialize", "Inizializza bucket and db") do |name|
82
86
  options[:initialize] = true
83
87
  end
@@ -85,7 +89,7 @@ class OptS3rquery
85
89
  opts.on("--destroy", "Destroy bucket and db") do |name|
86
90
  options[:destroy] = true
87
91
  end
88
-
92
+
89
93
  opts.on("--test", "Test something") do |name|
90
94
  options[:test] = true
91
95
  end
@@ -129,7 +133,7 @@ s3db = S3SyncDb.new(config.current)
129
133
 
130
134
  command = ARGV.shift
131
135
  case command
132
- when /[search|get|unpack|delete|stats]/
136
+ when /[search|get|unpack|delete|stats|delete_older]/
133
137
  results = s3db.find(ARGV, nil, options)
134
138
  results = get_last(results) if options[:last]
135
139
  results = get_first(results) if options[:first]
@@ -166,6 +170,27 @@ case command
166
170
  puts "Deleting of #{ret["aws_name"]}"
167
171
  s3db.delete(ret)
168
172
  end
173
+ when 'delete_older'
174
+ #cancella i piu' vecchi mantenendo options[:delete_older] item
175
+ # per ongi nome trovato
176
+ if options[:delete_older] == nil
177
+ options[:delete_older] = 2
178
+ end
179
+ group = {}
180
+ results.each do |ret|
181
+ group[ret["name"]] ||= []
182
+ group[ret["name"]] << ret
183
+ end
184
+ group.each do |key, arr_ret|
185
+ arr_ret.sort! {|x,y| x["datetime"] <=> y["datetime"] }
186
+ options[:delete_older].times do |num|
187
+ arr_ret.pop
188
+ end
189
+ arr_ret.each do |ret|
190
+ puts "Deleting of #{ret["aws_name"]}"
191
+ s3db.delete(ret)
192
+ end
193
+ end
169
194
  when 'stats'
170
195
  #get size
171
196
  bucks_s = {}
@@ -40,6 +40,10 @@ class OptS3rbackup
40
40
  options[:log] = true
41
41
  end
42
42
 
43
+ opts.on("--md5", "Check md5, upload only if md5 differ") do |name|
44
+ options[:md5_check] = true
45
+ end
46
+
43
47
  opts.on("--nolog", "Log disabled") do |name|
44
48
  options[:log] = false
45
49
  end
@@ -77,5 +81,5 @@ config.current["log"] = options[:log] if options[:log] != nil
77
81
  config.current["bucket_log"] = options[:bucket_log] if options[:bucket_log]
78
82
  config.current["compression"] = options[:compression] if options[:compression]
79
83
  s3db = S3SyncDb.new(config.current)
80
- s3db.bak(ARGV, options[:name], options[:descr])
84
+ s3db.bak(ARGV, options[:name], options[:descr], options[:md5_check])
81
85
  #s3db.salva_db
@@ -60,7 +60,7 @@ class S3SyncDb
60
60
  end
61
61
 
62
62
  #s3 sdb
63
- def bak(dirs, name, descr)
63
+ def bak(dirs, name, descr, md5_check = false)
64
64
  name = dirs[0] if !name
65
65
  tf = Tempfile.new("s3rbackup")
66
66
  tf_l = Tempfile.new("s3rbackup-listfile")
@@ -95,45 +95,58 @@ class S3SyncDb
95
95
  doc["host"] = `hostname`.gsub("\n","").to_s
96
96
  doc["user"] = `whoami`.gsub("\n","").to_s
97
97
  doc["size"] = File.size(file_path)
98
+ doc["md5"] = `md5sum #{file_path} | cut -d " " -f 1`.gsub("\n", "")
98
99
  doc["compression"] = @config["compression"]
99
100
  doc["archive"] = "tar"
100
101
  #@db << doc
101
102
  aws_name = "#{doc["name"]}##{`date +%Y%m%d_%H.%M.%S`}".gsub("\n","")
102
103
  doc["aws_name"] = aws_name
103
- @sdb.put_attributes @domain_db, aws_name, doc
104
- if @config['files_db']
105
- #tutti in uno
106
- filez_name = []
107
- filez.each do |fil|
108
- begin
109
- filez_name << File.basename(fil.gsub("\n", ""))
110
- rescue
104
+
105
+ carica = true
106
+ if md5_check
107
+ search = "['md5' = '#{doc["md5"]}']"
108
+ @sdb.query(@domain_db, search) do |result|
109
+ result[:items].each do |item|
110
+ hattr = @sdb.get_attributes(@domain_db, item)[:attributes]
111
+ if hattr["name"][0] == doc["name"]
112
+ carica = false
113
+ end
111
114
  end
112
115
  end
113
- @sdb.put_attributes @config['files_db'], aws_name, {
114
- :files_full => filez.map {|t| t.gsub("\n","")},
115
- :files_name => filez_name}
116
116
  end
117
-
118
- #TODO aggiungere md5
119
- # Store it!
120
- options = {}
121
- options["x-amz-meta-host"] = doc["host"]
122
- options["x-amz-meta-user"] = doc["user"]
123
- options["x-amz-meta-descrizione"] = doc["description"]
124
- options["x-amz-meta-current_path"] = doc["current_path"]
125
- options["x-amz-meta-size"] = doc["size"]
126
- options["x-amz-meta-compression"] = doc["compression"]
127
- options["x-amz-meta-archive"] = doc["archive"]
128
-
129
- store = S3Object.store(aws_name, open(file_path), @config["bucket"], options)
130
- #obj = S3Object.find(aws_name, @config["bucket"])
131
- #obj.store
132
- #obj.about.each do |key,val|
133
- # doc[key] = val
134
- #end
135
- #TODO aggiungere check
136
- send_mail("S3rbackup - Saved #{doc["name"]}", (doc.to_a.map {|val| "#{val[0]}: #{val[1]}"}).join("\n") + "\n\nFiles:\n\t#{filez.join("\t")}")
117
+ if carica
118
+ @sdb.put_attributes @domain_db, aws_name, doc
119
+ if @config['files_db']
120
+ #tutti in uno
121
+ filez_name = []
122
+ filez.each do |fil|
123
+ begin
124
+ filez_name << File.basename(fil.gsub("\n", ""))
125
+ rescue
126
+ end
127
+ end
128
+ @sdb.put_attributes @config['files_db'], aws_name, {
129
+ :files_full => filez.map {|t| t.gsub("\n","")},
130
+ :files_name => filez_name}
131
+ end
132
+
133
+ #TODO aggiungere md5
134
+ # Store it!
135
+ options = {}
136
+ # options["x-amz-meta-host"] = doc["host"]
137
+ # options["x-amz-meta-user"] = doc["user"]
138
+ # options["x-amz-meta-descrizione"] = doc["description"]
139
+ # options["x-amz-meta-current_path"] = doc["current_path"]
140
+ # options["x-amz-meta-size"] = doc["size"]
141
+ # options["x-amz-meta-compression"] = doc["compression"]
142
+ # options["x-amz-meta-archive"] = doc["archive"]
143
+
144
+ store = S3Object.store(aws_name, open(file_path), @config["bucket"], options)
145
+ #TODO aggiungere check
146
+ send_mail("S3rbackup - Saved #{doc["name"]}", (doc.to_a.map {|val| "#{val[0]}: #{val[1]}"}).join("\n") + "\n\nFiles:\n\t#{filez.join("\t")}")
147
+ else
148
+ send_mail("S3rbackup - Not Saved #{doc["name"]} - md5 already exist", (doc.to_a.map {|val| "#{val[0]}: #{val[1]}"}).join("\n") + "\n\nFiles:\n\t#{filez.join("\t")}")
149
+ end
137
150
  end
138
151
 
139
152
  def find(words, bucket = nil, cmd_opt = {})
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: niky81-s3rbackup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicola Sacchi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-28 00:00:00 -07:00
12
+ date: 2008-11-28 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency