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.
- 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
|