seaweedrb 0.0.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 +7 -0
- data/lib/seaweed/file.rb +36 -0
- data/lib/seaweed/master.rb +28 -0
- data/lib/seaweed.rb +34 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 40635ace82a6b849e6429965cf5fe16ff6dd42e2
|
4
|
+
data.tar.gz: 73393bf1d946f8b1b91a46d523d006296d9e7574
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cc1ab879adfd7ee94f648c9e3ea87c113e9fd1079b5d3b9ddc858ba888ed0f26c3c1cbd171416e7f4618616ea5cb36bdc89ba5631084d1efe3b2e46f0b45f974
|
7
|
+
data.tar.gz: 8d4069db44c6187ac6d8c239e71857cf7cdfbce10c4a076f704a256fe514a8a3188962967ba06daf33db28ba61b2b8667c64818ee4d7feaa9706ca19cb1fe566
|
data/lib/seaweed/file.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
class Seaweed::File
|
2
|
+
include Seaweed::Client
|
3
|
+
|
4
|
+
attr_reader :id, :name, :volume_id, :volume_url, :attachment, :size
|
5
|
+
|
6
|
+
def initialize(fid, volume_url: nil, attachment: nil)
|
7
|
+
@id = fid
|
8
|
+
@volume_id, @key, @cookie = fid.match(/^(\d),(\w\w)(\w+)$/).captures
|
9
|
+
@volume_url = volume_url
|
10
|
+
@attachment = attachment
|
11
|
+
end
|
12
|
+
|
13
|
+
def upload!
|
14
|
+
response = parse RestClient.put(url, file: File.new(@attachment, 'rb'))
|
15
|
+
@name = response[:name]
|
16
|
+
@size = response[:size]
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete!
|
21
|
+
response = parse RestClient.delete(url)
|
22
|
+
!response[:size].nil?
|
23
|
+
end
|
24
|
+
|
25
|
+
def read
|
26
|
+
RestClient.get url
|
27
|
+
end
|
28
|
+
|
29
|
+
def url
|
30
|
+
"#{@volume_url}/#{@id}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def pretty_url
|
34
|
+
"#{@volume_url}/#{@volume_id}/#{@key}#{@cookie}/#{@name}"
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Seaweed::Master
|
2
|
+
extend Seaweed::Client
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def connect(host: "localhost", port: 9333)
|
6
|
+
@host = host
|
7
|
+
@port = port
|
8
|
+
@base_url = "http://#{@host}:#{@port}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def status
|
12
|
+
RestClient.get "#{@base_url}/cluster/status?pretty=y"
|
13
|
+
end
|
14
|
+
|
15
|
+
def dir_assign!
|
16
|
+
parse RestClient.post "#{@base_url}/dir/assign", {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def dir_lookup(volume_id)
|
20
|
+
data = parse RestClient.get("#{@base_url}/dir/lookup?volumeId=#{volume_id}")
|
21
|
+
data[:locations][0]
|
22
|
+
end
|
23
|
+
|
24
|
+
def vaccum!(threshold: 0.3)
|
25
|
+
parse RestClient.get "#{@base_url}/vol/vaccum?garbageThreshold=#{threshold}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/seaweed.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Seaweed
|
2
|
+
|
3
|
+
def self.connect(host: "localhost", port: 9333)
|
4
|
+
Seaweed::Master.connect host: host, port: port
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.status
|
8
|
+
Seaweed::Master.status
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.upload(path)
|
12
|
+
location = Seaweed::Master.dir_assign!
|
13
|
+
file = Seaweed::File.new location[:fid], volume_url: location[:url], attachment: path
|
14
|
+
file.upload!
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.find(fid)
|
18
|
+
location = Seaweed::Master.dir_lookup fid.split(",")[0]
|
19
|
+
file = Seaweed::File.new fid, volume_url: location[:url]
|
20
|
+
end
|
21
|
+
|
22
|
+
require 'rest-client'
|
23
|
+
module Client
|
24
|
+
def parse(response)
|
25
|
+
if response.code.between?(200, 300)
|
26
|
+
return JSON.parse response, symbolize_names: true unless block_given?
|
27
|
+
yield
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'seaweed/master'
|
34
|
+
require 'seaweed/file'
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: seaweedrb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Guest
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-24 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A Seaweed-FS Ruby Client
|
14
|
+
email: guest.john88@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/seaweed.rb
|
20
|
+
- lib/seaweed/file.rb
|
21
|
+
- lib/seaweed/master.rb
|
22
|
+
homepage: http://rubygems.org/gems/seaweedrb
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.0.0
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.4.6
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: seaweedrb
|
46
|
+
test_files: []
|
47
|
+
has_rdoc:
|