niky81-s3rbackup 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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