boned 0.2.6 → 0.3.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/.gitignore +4 -0
- data/README.md +6 -4
- data/Rakefile +45 -38
- data/VERSION.yml +4 -0
- data/api/api-set.rb +31 -30
- data/api/api.rb +49 -49
- data/app.ru +36 -0
- data/bin/boned +6 -71
- data/boned.gemspec +68 -46
- data/config/redis-server.conf +149 -131
- data/lib/boned/api/base.rb +163 -0
- data/lib/boned/api.rb +76 -69
- data/lib/boned/app.rb +0 -0
- data/lib/boned.rb +33 -165
- data/try/10_basics_try.rb +37 -0
- data/try/11_signature_try.rb +11 -0
- data/try/20_keys_try.rb +34 -0
- metadata +72 -30
- data/config.ru +0 -31
- data/lib/boned/api/debug.rb +0 -21
- data/lib/boned/api/redis.rb +0 -44
- data/lib/boned/api/service.rb +0 -86
- data/lib/boned/cli.rb +0 -62
- data/lib/boned/models/bone.rb +0 -112
- data/lib/boned/models.rb +0 -34
- data/lib/boned/server.rb +0 -67
- data/try/10_bone_model.rb +0 -21
data/lib/boned/cli.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'boned/server'
|
2
|
-
require 'pp'
|
3
|
-
|
4
|
-
class Boned::CLI < Drydock::Command
|
5
|
-
attr_accessor :exit_code
|
6
|
-
|
7
|
-
|
8
|
-
def start
|
9
|
-
Boned.connect
|
10
|
-
if Boned.service_available?('127.0.0.1', server_opts[:port])
|
11
|
-
raise Boned::Server::ServerRunning, server_opts[:port]
|
12
|
-
end
|
13
|
-
Boned::Controllers::Controller.new(server_opts).start
|
14
|
-
end
|
15
|
-
|
16
|
-
def stop
|
17
|
-
Boned.connect(false)
|
18
|
-
Boned.stop_redis
|
19
|
-
if not Boned.service_available?('127.0.0.1', server_opts[:port])
|
20
|
-
raise Boned::Server::ServerNotRunning, server_opts[:port]
|
21
|
-
end
|
22
|
-
Boned::Controllers::Controller.new(server_opts).stop
|
23
|
-
end
|
24
|
-
|
25
|
-
def stop_redis
|
26
|
-
Boned.connect(false)
|
27
|
-
Boned.stop_redis
|
28
|
-
end
|
29
|
-
|
30
|
-
def info
|
31
|
-
require 'yaml'
|
32
|
-
if Boned.service_available?('127.0.0.1', server_opts[:port])
|
33
|
-
puts "boned is running on port #{server_opts[:port]}"
|
34
|
-
else
|
35
|
-
puts "No boned"
|
36
|
-
end
|
37
|
-
puts "Options:", server_opts.to_yaml if @global.verbose > 0
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def server_opts
|
43
|
-
port = @global.port || Boned::Server::DEFAULT_PORT
|
44
|
-
config = @global.rackup || File.join(BONED_HOME, "config.ru")
|
45
|
-
@server_opts ||= {
|
46
|
-
:chdir => Dir.pwd,
|
47
|
-
:environment => @global.environment || 'development',
|
48
|
-
:address => '0.0.0.0',
|
49
|
-
:port => port,
|
50
|
-
:timeout => 30,
|
51
|
-
:log => "/tmp/boned-#{port}.log",
|
52
|
-
:pid => "/tmp/boned-#{port}.pid",
|
53
|
-
:max_conns => Thin::Server::DEFAULT_MAXIMUM_CONNECTIONS,
|
54
|
-
:max_persistent_conns => Thin::Server::DEFAULT_MAXIMUM_PERSISTENT_CONNECTIONS,
|
55
|
-
:require => [],
|
56
|
-
:wait => Thin::Controllers::Cluster::DEFAULT_WAIT_TIME,
|
57
|
-
:backend => "Boned::Server",
|
58
|
-
:rackup => config,
|
59
|
-
:daemonize => @global.daemon || false
|
60
|
-
}
|
61
|
-
end
|
62
|
-
end
|
data/lib/boned/models/bone.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
|
2
|
-
# Bone:a462b9ebda71f16cb1567ba8704695ae8dba9999:simple
|
3
|
-
# Bone:a462b9ebda71f16cb1567ba8704695ae8dba9999:us-east-1a-dev-fe:simple
|
4
|
-
# Bone:a462b9ebda71f16cb1567ba8704695ae8dba9999:dev-fe:simple
|
5
|
-
# Bone:a462b9ebda71f16cb1567ba8704695ae8dba9999:us-east-1a:simple
|
6
|
-
|
7
|
-
class Bone < Boned::Model
|
8
|
-
|
9
|
-
primarykey :boneid
|
10
|
-
|
11
|
-
field :token
|
12
|
-
field :name
|
13
|
-
field :value
|
14
|
-
field :prop
|
15
|
-
|
16
|
-
def initialize(token, name, value, prop={})
|
17
|
-
@prop ||= {}
|
18
|
-
prop ||= {}
|
19
|
-
prop.each_pair { |n,v| @prop[n.to_sym] ||= v }
|
20
|
-
@token, @name = token, name
|
21
|
-
@new = refresh!.nil?
|
22
|
-
@value = value unless value.nil? # use the new value if provided
|
23
|
-
@prop[:created] = Time.now.utc.to_i if new? || @prop[:created].nil?
|
24
|
-
# resolve string/symbol ambiguity for properties
|
25
|
-
def @prop.[](k) super(k.to_s.to_sym) || super(k.to_s) end
|
26
|
-
def @prop.[]=(k,v) super(k.to_s.to_sym,v) end
|
27
|
-
end
|
28
|
-
|
29
|
-
def [](k)
|
30
|
-
self.respond_to?(k) ? self.send : self.prop[k]
|
31
|
-
end
|
32
|
-
|
33
|
-
def new?() @new == true end
|
34
|
-
|
35
|
-
def file?
|
36
|
-
!prop[:file].nil?
|
37
|
-
end
|
38
|
-
|
39
|
-
def region() prop[:region] end
|
40
|
-
def env() prop[:env] end
|
41
|
-
def role() prop[:role] end
|
42
|
-
def num() prop[:num] end
|
43
|
-
def path() prop[:path] end
|
44
|
-
|
45
|
-
def boneid
|
46
|
-
loc = [region, env, role, num].compact.join('-')
|
47
|
-
parts = loc.empty? ? [token] : [token, loc]
|
48
|
-
parts << path.gsub(/\A\//, '').tr('/', '-') unless path.nil? # TODO: support windows
|
49
|
-
parts << name
|
50
|
-
parts.collect { |p| p.to_s.tr(':', '-') }.join(':')
|
51
|
-
end
|
52
|
-
|
53
|
-
def key(*parts)
|
54
|
-
parts.unshift boneid
|
55
|
-
self.class.key *parts
|
56
|
-
end
|
57
|
-
|
58
|
-
def save
|
59
|
-
redis.set(key, value)
|
60
|
-
prop[:modified] = Time.now.utc.to_i
|
61
|
-
redis.set(key(:prop), prop.to_json)
|
62
|
-
end
|
63
|
-
|
64
|
-
def refresh!
|
65
|
-
Boned.ld "REFRESH: #{key}"
|
66
|
-
@value = redis.get key
|
67
|
-
prop = redis.get key(:prop)
|
68
|
-
prop &&= JSON.parse(prop) rescue {}
|
69
|
-
# Merge the stored props with the current ones. Enforce symbols!
|
70
|
-
prop.each_pair { |n,v| @prop[n.to_sym] ||= v }
|
71
|
-
Boned.ld " -> #{@value} #{@prop.inspect}"
|
72
|
-
self
|
73
|
-
rescue
|
74
|
-
nil
|
75
|
-
end
|
76
|
-
|
77
|
-
def destroy!
|
78
|
-
Boned.ld "DESTROY: #{key}"
|
79
|
-
redis.del key
|
80
|
-
redis.del key(:prop)
|
81
|
-
end
|
82
|
-
|
83
|
-
class << self
|
84
|
-
|
85
|
-
def del(token, name, opts={})
|
86
|
-
bone = get(token, name, opts)
|
87
|
-
bone.destroy!
|
88
|
-
bone
|
89
|
-
end
|
90
|
-
|
91
|
-
def get(token, name, opts={})
|
92
|
-
bone = Bone.new token, name, nil, opts
|
93
|
-
raise Boned::BadBone, bone.name if bone.value.nil?
|
94
|
-
bone
|
95
|
-
end
|
96
|
-
|
97
|
-
def keys(token, k=nil, opts={})
|
98
|
-
search = key(token) << '*'
|
99
|
-
search << k unless k.nil?
|
100
|
-
Boned.ld "SEARCHING: #{search}"
|
101
|
-
dirty = redis.keys search # contains :prop when no keyname specified
|
102
|
-
clean = []
|
103
|
-
dirty.each { |k|
|
104
|
-
next if k.match(/prop\z/);
|
105
|
-
clean << k.split(':')[4..-1].join(':')
|
106
|
-
}
|
107
|
-
clean
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
data/lib/boned/models.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Boned
|
4
|
-
class Model < Storable
|
5
|
-
def self.key(*el)
|
6
|
-
raise "#{self}: nil keypart: #{el.inspect}" if el.size != el.compact.size
|
7
|
-
a = "v1::#{self}"
|
8
|
-
a << ':' << el.join(':') unless el.empty?
|
9
|
-
a
|
10
|
-
end
|
11
|
-
def self.redis
|
12
|
-
Boned.redis
|
13
|
-
end
|
14
|
-
def self.primarykey(v=nil)
|
15
|
-
unless v.nil?
|
16
|
-
@primarykey = v
|
17
|
-
class_eval do
|
18
|
-
def primarykey() send(self.class.primarykey) end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
@primarykey
|
22
|
-
end
|
23
|
-
def redis
|
24
|
-
self.class.redis
|
25
|
-
end
|
26
|
-
def save
|
27
|
-
redis.sadd(self.class.key(kind, :all), self.primarykey) &&
|
28
|
-
redis.set(key(:created), self.time.to_i) &&
|
29
|
-
redis.set(key(:object), to_json)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
Boned.require_glob 'boned', 'models', '*.rb'
|
data/lib/boned/server.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'thin'
|
2
|
-
require 'logging'
|
3
|
-
require 'forwardable'
|
4
|
-
|
5
|
-
module Boned
|
6
|
-
class Server < Thin::Backends::Base
|
7
|
-
DEFAULT_PORT = 6043.freeze
|
8
|
-
|
9
|
-
class ServerRunning < Boned::Problem
|
10
|
-
def message() "Server already running on port: #{super}" end
|
11
|
-
end
|
12
|
-
|
13
|
-
class ServerNotRunning < Boned::Problem
|
14
|
-
def message() "Server not running on port: #{super}" end
|
15
|
-
end
|
16
|
-
|
17
|
-
class << self
|
18
|
-
end
|
19
|
-
|
20
|
-
# Address and port on which the server is listening for connections.
|
21
|
-
attr_accessor :host, :port
|
22
|
-
|
23
|
-
def initialize(host, port, options)
|
24
|
-
@host = host
|
25
|
-
@port = port
|
26
|
-
super()
|
27
|
-
end
|
28
|
-
|
29
|
-
# Connect the server
|
30
|
-
def connect
|
31
|
-
@signature = EventMachine.start_server(@host, @port, Thin::Connection, &method(:initialize_connection))
|
32
|
-
rescue => ex
|
33
|
-
puts ex.message
|
34
|
-
puts ex.backtrace if Boned.debug
|
35
|
-
stop!
|
36
|
-
end
|
37
|
-
|
38
|
-
# Stops the server
|
39
|
-
def disconnect
|
40
|
-
EventMachine.stop_server(@signature)
|
41
|
-
end
|
42
|
-
|
43
|
-
def to_s
|
44
|
-
"#{@host}:#{@port}"
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
module Controllers
|
49
|
-
class Controller < Thin::Controllers::Controller
|
50
|
-
end
|
51
|
-
class Service < Thin::Controllers::Service
|
52
|
-
end
|
53
|
-
class Cluster < Thin::Controllers::Cluster
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
#controller = case
|
62
|
-
#when cluster? then Thin::Controllers::Cluster.new(options)
|
63
|
-
#when service? then Thin::Controllers::Service.new(options)
|
64
|
-
#else Thin::Controllers::Controller.new(options)
|
65
|
-
#end
|
66
|
-
|
67
|
-
|
data/try/10_bone_model.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# ruby -rubygems -Ilib try/10_bone_model.rb
|
2
|
-
require 'boned'
|
3
|
-
Boned.load_config
|
4
|
-
Boned.connect
|
5
|
-
Boned.enable_debug
|
6
|
-
|
7
|
-
token = Digest::SHA256.hexdigest('1901484c41b8752d61863e323c743')
|
8
|
-
key = 'simple'
|
9
|
-
|
10
|
-
puts Bone.keys(token)
|
11
|
-
|
12
|
-
__END__
|
13
|
-
opts = { :env => 'dev', :region => 'us-east-1a', :num => '01', :role => 'fe', :path => Dir.pwd }
|
14
|
-
bone = Bone.new token, key, rand(100000).to_i, opts
|
15
|
-
#puts "BONE: " << bone.inspect, $/
|
16
|
-
bone.save
|
17
|
-
#puts "KEYS: " << Bone.keys( token, key).inspect, $/
|
18
|
-
|
19
|
-
bone = Bone.get( token, key, opts)
|
20
|
-
puts "GET: " << bone.inspect, $/
|
21
|
-
puts bone.to_json
|