rabbit_swift 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/RELEASE.md +7 -0
- data/bin/slo_client.rb +11 -59
- data/lib/rabbit_swift.rb +1 -1
- data/lib/rabbit_swift/client.rb +15 -3
- data/lib/rabbit_swift/large_object/slo_client.rb +60 -0
- data/lib/rabbit_swift/large_object/static_large_object.rb +1 -1
- data/lib/rabbit_swift/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39963e45fd183eca61bb3ab443a8ef18c396424c
|
4
|
+
data.tar.gz: 50a027e4738e68276e808ac6e8f4a47d96450253
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1644fae715b829e70220ac574243ec3ed3f49aa7eba2dcf678e3ad6f0c053f0d5ace0b1e05e00e649d2c5251667e11613ea7974570d61c6296a12105185d77a
|
7
|
+
data.tar.gz: f5a03d16eff1ffb8e9b8aade26fa3712ac81cfa313fa0a00eb9f1ba023a18c15f6ffc2098e41add1e914c8790731452e6ba9d56f32932946f12f3996930766a8
|
data/README.md
CHANGED
@@ -47,6 +47,17 @@ Or install it yourself as:
|
|
47
47
|
end
|
48
48
|
|
49
49
|
### Support Static Large Object
|
50
|
+
|
51
|
+
#### When object size 5BG over. Auto change mode SLO
|
52
|
+
rabbit_swift_client.upload(token, dest_url, 5GB_under_file.zip) --> normal upload
|
53
|
+
rabbit_swift_client.upload(token, dest_url, 5GB_over_file.zip) --> static large object upload
|
54
|
+
|
55
|
+
#### SLO Flow
|
56
|
+
1. split File
|
57
|
+
2. upload split files
|
58
|
+
3. upload manifest file
|
59
|
+
|
60
|
+
#### SLO Client
|
50
61
|
bundle exec ruby -I./lib bin/slo_client.rb -s ~/Downloads/test.zip -d /test -c ../chino/conf/conf.json -l 100MB
|
51
62
|
|
52
63
|
## Contributing
|
data/RELEASE.md
CHANGED
data/bin/slo_client.rb
CHANGED
@@ -5,6 +5,7 @@ require 'rabbit_swift'
|
|
5
5
|
#ruby -I./lib/ this.rb
|
6
6
|
#bundle exec ruby -I./lib bin/slo_client.rb -s ~/Downloads/test.zip -d /test -c ../chino/conf/conf.json -l 1048576
|
7
7
|
#bundle exec ruby -I./lib bin/slo_client.rb -s ~/Downloads/test.zip -d /test -c ../chino/conf/conf.json -l 100MB
|
8
|
+
#bundle exec ruby -I./lib bin/slo_client.rb -s ~/MBA_Grahics/mba2/1423672249367.jpg -d /test -c ../chino/conf/conf.json -l 100KB
|
8
9
|
|
9
10
|
=begin
|
10
11
|
-c conf.json
|
@@ -25,73 +26,24 @@ Version = '1.0.0'
|
|
25
26
|
src_path = nil
|
26
27
|
dest_path = nil
|
27
28
|
conf_path = nil
|
28
|
-
|
29
|
+
slo_option = {}
|
30
|
+
swift_conf_json = {}
|
29
31
|
opt.on('-s SRC_PATH', 'src_file_path') {|v| src_path = v}
|
30
32
|
opt.on('-d DEST_PATH', 'dest_path') {|v| dest_path = v}
|
31
33
|
opt.on('-c CONF_PATH', 'conf_path') {|v| conf_path = v}
|
32
|
-
opt.on('-l LIMIT_BYTE', 'limit_file_size') {|v| limit_file_size = v}
|
34
|
+
opt.on('-l LIMIT_BYTE', 'limit_file_size') {|v| slo_option['limit_file_size'] = v}
|
33
35
|
opt.parse!(ARGV)
|
34
36
|
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
def initialize(src_path, dest_path, conf_path, send_timeout: 7200, limit_file_size: RabbitSwift::LargeObject::StaticLargeObject::LIMIT_FILE_SIZE)
|
41
|
-
@src_path = src_path
|
42
|
-
@dest_path = dest_path
|
43
|
-
@original_dest_path = dest_path
|
44
|
-
@conf_path = conf_path
|
45
|
-
@limit_file_size = limit_file_size
|
46
|
-
File.open conf_path do |file|
|
47
|
-
conf = JSON.load(file.read)
|
48
|
-
@swift = conf['swift']
|
49
|
-
|
50
|
-
if @dest_path =~ /^\//
|
51
|
-
@dest_path = @swift['endPoint'] + dest_path
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
@swift['send_timeout'] = send_timeout
|
56
|
-
end
|
57
|
-
|
58
|
-
def upload
|
59
|
-
slo = RabbitSwift::LargeObject::StaticLargeObject.new(src_path, dest_path, limit_file_size: @limit_file_size)
|
60
|
-
|
61
|
-
# (指定されたファイルサイズ単位で)ファイルを分割する
|
62
|
-
rabbit_file_split = slo.split
|
63
|
-
# JSONマニフェストファイルをつくる
|
64
|
-
manifest_json = slo.create_manifest_list(rabbit_file_split.file_list)
|
65
|
-
puts manifest_json
|
66
|
-
|
67
|
-
rabbit_swift_client = RabbitSwift::Client.new(@swift)
|
68
|
-
@token = rabbit_swift_client.get_token
|
69
|
-
puts 'token -> ' + token
|
70
|
-
|
71
|
-
#ファイルを全てアップロード(with etag)
|
72
|
-
rabbit_file_split.file_list.each do |file_path|
|
73
|
-
status = rabbit_swift_client.upload(token, dest_path, file_path)
|
74
|
-
puts file_path
|
75
|
-
puts 'http_status -> ' + status.to_s
|
76
|
-
if (status == RabbitSwift::Client::UPLOAD_SUCCESS_HTTP_STATUS_CODE)
|
77
|
-
puts 'upload OK'
|
78
|
-
else
|
79
|
-
puts 'upload NG'
|
80
|
-
return
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
puts "dest_path->" + dest_path
|
85
|
-
#マニフェストをアップロード
|
86
|
-
rabbit_swift_client.upload_manifest(token, dest_path, @original_dest_path, @src_path, manifest_json)
|
87
|
-
|
88
|
-
#分割したファイルを削除
|
89
|
-
rabbit_file_split.delete_all
|
38
|
+
File.open conf_path do |file|
|
39
|
+
conf = JSON.load(file.read)
|
40
|
+
swift_conf_json = conf['swift']
|
90
41
|
|
42
|
+
if dest_path =~ /^\//
|
43
|
+
dest_path = swift_conf_json['endPoint'] + dest_path
|
91
44
|
end
|
92
|
-
|
93
45
|
end
|
94
46
|
|
47
|
+
rabbit_swift_client = RabbitSwift::Client.new(swift_conf_json)
|
95
48
|
|
96
|
-
|
97
|
-
slo.upload
|
49
|
+
RabbitSwift::LargeObject::Slo_client.new(rabbit_swift_client, src_path, dest_path, slo_option).upload
|
data/lib/rabbit_swift.rb
CHANGED
data/lib/rabbit_swift/client.rb
CHANGED
@@ -14,6 +14,8 @@ module RabbitSwift
|
|
14
14
|
HEAD_SUCCESS_HTTP_STATUS_CODE = 204
|
15
15
|
DELETE_SUCCESS_HTTP_STATUS_CODE = 204
|
16
16
|
|
17
|
+
@token = nil
|
18
|
+
|
17
19
|
def initialize(opt)
|
18
20
|
@auth_url = opt['auth_url']
|
19
21
|
@tenantName = opt['tenantName']
|
@@ -29,6 +31,7 @@ module RabbitSwift
|
|
29
31
|
|
30
32
|
#curl -i 'https://********.jp/v2.0/tokens' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": {"tenantName": "1234567", "passwordCredentials": {"username": "1234567", "password": "************"}}}'
|
31
33
|
def get_token
|
34
|
+
return @token if !@token.nil?
|
32
35
|
body = build_auth_json
|
33
36
|
|
34
37
|
http_client = HTTPClient.new
|
@@ -36,7 +39,7 @@ module RabbitSwift
|
|
36
39
|
response = http_client.post_content(@auth_url, body, 'Content-Type' => 'application/json')
|
37
40
|
response_json_body = JSON.load(response)
|
38
41
|
|
39
|
-
response_json_body['access']['token']['id']
|
42
|
+
@token = response_json_body['access']['token']['id']
|
40
43
|
end
|
41
44
|
|
42
45
|
def head(token, url)
|
@@ -141,9 +144,18 @@ module RabbitSwift
|
|
141
144
|
end
|
142
145
|
else
|
143
146
|
p auth_header
|
144
|
-
|
145
|
-
|
147
|
+
|
148
|
+
if LargeObject::StaticLargeObject.is_over_default_limit_object_size(File.size(file_path))
|
149
|
+
#Auto SLO Mode
|
150
|
+
p File.size(file_path)
|
151
|
+
puts '------ Over limit object size! change Static Large Object Mode. ------- '
|
152
|
+
LargeObject::Slo_client.new(self, input_file_path, end_point).upload
|
153
|
+
else
|
154
|
+
File.open(file_path) do |file|
|
155
|
+
@res = http_client.put(URI.parse(URI.encode(target_url)), file, auth_header)
|
156
|
+
end
|
146
157
|
end
|
158
|
+
|
147
159
|
end
|
148
160
|
|
149
161
|
#p @res
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rabbit_swift'
|
2
|
+
|
3
|
+
module RabbitSwift::LargeObject
|
4
|
+
class Slo_client
|
5
|
+
|
6
|
+
attr_accessor :rabbit_swift_client, :src_path, :dest_path, :original_dest_path, :slo_option
|
7
|
+
|
8
|
+
def initialize(rabbit_swift_client, src_path, dest_path, slo_option = {})
|
9
|
+
@rabbit_swift_client = rabbit_swift_client
|
10
|
+
@src_path = src_path
|
11
|
+
@dest_path = dest_path
|
12
|
+
#TODO かなり無理があるので改修必要
|
13
|
+
@original_dest_path = dest_path.sub(/https:\/\/.*\/v1\/.*\//, '/')
|
14
|
+
|
15
|
+
|
16
|
+
@slo_option = slo_option
|
17
|
+
end
|
18
|
+
|
19
|
+
def upload
|
20
|
+
if @slo_option.has_key?('limit_file_size')
|
21
|
+
slo = RabbitSwift::LargeObject::StaticLargeObject.new(src_path, dest_path, limit_file_size: @slo_option['limit_file_size'])
|
22
|
+
else
|
23
|
+
slo = RabbitSwift::LargeObject::StaticLargeObject.new(src_path, dest_path)
|
24
|
+
end
|
25
|
+
# (指定されたファイルサイズ単位で)ファイルを分割する
|
26
|
+
rabbit_file_split = slo.split
|
27
|
+
# JSONマニフェストファイルをつくる
|
28
|
+
manifest_json = slo.create_manifest_list(rabbit_file_split.file_list)
|
29
|
+
puts manifest_json
|
30
|
+
|
31
|
+
token = rabbit_swift_client.get_token
|
32
|
+
|
33
|
+
#TODO with etag
|
34
|
+
#ファイルを全てアップロード
|
35
|
+
rabbit_file_split.file_list.each do |file_path|
|
36
|
+
status = rabbit_swift_client.upload(token, dest_path, file_path)
|
37
|
+
puts file_path
|
38
|
+
puts 'http_status -> ' + status.to_s
|
39
|
+
if (status == RabbitSwift::Client::UPLOAD_SUCCESS_HTTP_STATUS_CODE)
|
40
|
+
puts 'upload OK'
|
41
|
+
else
|
42
|
+
puts 'upload NG'
|
43
|
+
return
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "dest_path->" + dest_path
|
48
|
+
#マニフェストをアップロード
|
49
|
+
rabbit_swift_client.upload_manifest(token, dest_path, @original_dest_path, @src_path, manifest_json)
|
50
|
+
|
51
|
+
#分割したファイルを削除
|
52
|
+
rabbit_file_split.delete_all
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
end
|
data/lib/rabbit_swift/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbit_swift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AKB428
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- lib/rabbit_swift/account/.gitkeep
|
100
100
|
- lib/rabbit_swift/client.rb
|
101
101
|
- lib/rabbit_swift/container/.gitkeep
|
102
|
+
- lib/rabbit_swift/large_object/slo_client.rb
|
102
103
|
- lib/rabbit_swift/large_object/static_large_object.rb
|
103
104
|
- lib/rabbit_swift/object/delete.rb
|
104
105
|
- lib/rabbit_swift/object/head.rb
|