boned 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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