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.
- data/bin/s3query.rb +28 -3
- data/bin/s3rbackup.rb +5 -1
- data/lib/s3dbsync.rb +45 -32
- metadata +2 -2
data/bin/s3query.rb
CHANGED
@@ -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 = {}
|
data/bin/s3rbackup.rb
CHANGED
@@ -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
|
data/lib/s3dbsync.rb
CHANGED
@@ -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
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
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
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
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.
|
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-
|
12
|
+
date: 2008-11-28 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|