Class: Etzetera::Client

Inherits:
Object
  • Object
show all
Includes:
Celluloid::IO, Celluloid::Logger
Defined in:
lib/etzetera/client.rb

Constant Summary collapse

API_VERSION =
'v2'.freeze
KEYS_PREFIX =
"/#{API_VERSION}/keys".freeze
LOCK_PREFIX =
"/mod/#{API_VERSION}/lock/".freeze
LEADER_PREFIX =
"/mod/#{API_VERSION}/leader/".freeze
STATS_PREFIX =
"/#{API_VERSION}/stats/".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(servers = ['http://127.0.0.1:4001'], default_options = {}) ⇒ Client

Returns a new instance of Client.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/etzetera/client.rb', line 19

def initialize(servers = ['http://127.0.0.1:4001'], default_options = {})

  self.servers = servers.dup

  def_opts = default_options.dup

  opts = {}
  opts[:headers]          = {:accept => 'application/json'}
  opts[:response]         = :object
  opts[:socket_class]     = Celluloid::IO::TCPSocket
  opts[:ssl_socket_class] = Celluloid::IO::SSLSocket

  @etcd_opts = {}
  @etcd_opts[:election_timeout]   = def_opts.delete(:election_timeout) {|key| 200}
  @etcd_opts[:heartbeat_interval] = def_opts.delete(:heartbeat_interval) {|key| 50}

  @default_options = ::HTTP::Options.new(opts.merge(def_opts))
end

Instance Attribute Details

#serversObject

Returns the value of attribute servers.



17
18
19
# File 'lib/etzetera/client.rb', line 17

def servers
  @servers
end

Instance Method Details

#acquire_lock(name, ttl) ⇒ Object



91
92
93
# File 'lib/etzetera/client.rb', line 91

def acquire_lock(name, ttl)
  request(:post, LOCK_PREFIX, name, :form => {:ttl => ttl})
end

#compareAndDelete(key, prevValue) ⇒ Object



87
88
89
# File 'lib/etzetera/client.rb', line 87

def compareAndDelete(key, prevValue)
  request(:delete, KEYS_PREFIX, key, :params => {:prevValue => prevValue})
end

#compareAndSwap(key, prevValue, form) ⇒ Object



83
84
85
# File 'lib/etzetera/client.rb', line 83

def compareAndSwap(key, prevValue, form)
  request(:put, KEYS_PREFIX, key, :form => form, :params => {:prevValue => prevValue})
end

#create(key, form, params = {}) ⇒ Object



63
64
65
# File 'lib/etzetera/client.rb', line 63

def create(key, form, params = {})
  request(:put, KEYS_PREFIX, key, :form => form, :params => params.merge({:prevExist => false}))
end

#delete(key, params = {}) ⇒ Object



46
47
48
# File 'lib/etzetera/client.rb', line 46

def delete(key, params = {})
  request(:delete, KEYS_PREFIX, key, :params => params)
end

#delete_leader(clustername, name) ⇒ Object



115
116
117
# File 'lib/etzetera/client.rb', line 115

def delete_leader(clustername, name)
  request(:delete, LEADER_PREFIX, clustername, :form => {:name => name})
end

#dir(dir, params = {}) ⇒ Object



75
76
77
# File 'lib/etzetera/client.rb', line 75

def dir(dir, params = {})
  request(:get, KEYS_PREFIX, dir, :params => params.merge({:recursive => true}))
end

#get(key, params = {}) ⇒ Object



38
39
40
# File 'lib/etzetera/client.rb', line 38

def get(key, params = {})
  request(:get, KEYS_PREFIX, key, :params => params)
end

#get_leader(clustername, params = {}) ⇒ Object



111
112
113
# File 'lib/etzetera/client.rb', line 111

def get_leader(clustername, params = {})
  request(:get, LEADER_PREFIX, clustername, :params => params)
end

#mkdir(dir) ⇒ Object



71
72
73
# File 'lib/etzetera/client.rb', line 71

def mkdir(dir)
  request(:put, KEYS_PREFIX, dir, :params => {:dir => true})
end

#release_lock(name, form) ⇒ Object



99
100
101
# File 'lib/etzetera/client.rb', line 99

def release_lock(name, form)
  request(:delete, LOCK_PREFIX, name, :form => form)
end

#renew_lock(name, form) ⇒ Object



95
96
97
# File 'lib/etzetera/client.rb', line 95

def renew_lock(name, form)
  request(:put, LOCK_PREFIX, name, :form => form)
end

#retrieve_lock(name, params) ⇒ Object



103
104
105
# File 'lib/etzetera/client.rb', line 103

def retrieve_lock(name, params)
  request(:get, LOCK_PREFIX, name, :params => params)
end

#rmdir(dir, params = {}) ⇒ Object



79
80
81
# File 'lib/etzetera/client.rb', line 79

def rmdir(dir, params = {})
  request(:delete, KEYS_PREFIX, dir, :params => {:recursive => true}.merge(params))
end

#set(key, form, params = {}) ⇒ Object



42
43
44
# File 'lib/etzetera/client.rb', line 42

def set(key, form, params = {})
  request(:put, KEYS_PREFIX, key, form: form, :params => params)
end

#set_leader(clustername, name, ttl) ⇒ Object



107
108
109
# File 'lib/etzetera/client.rb', line 107

def set_leader(clustername, name, ttl)
  request(:put, LEADER_PREFIX, clustername, :form => {:name => name, :ttl => ttl})
end

#stats(type) ⇒ Object



119
120
121
# File 'lib/etzetera/client.rb', line 119

def stats(type)
  request(:get, STATS_PREFIX, type)
end

#update(key, form, params = {}) ⇒ Object



67
68
69
# File 'lib/etzetera/client.rb', line 67

def update(key, form, params = {})
  request(:put, KEYS_PREFIX, key, :form => form, :params => params.merge({:prevExist => true}))
end

#wait(key, callback = nil, params = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/etzetera/client.rb', line 50

def wait(key, callback = nil, params = {})
  response = request(:get, KEYS_PREFIX, key, :params => params.merge({:wait => true}))

  if block_given?
    yield response
  elsif callback
    #sleep (@etcd_opts[:heartbeat_interval] / 1000.0)
    callback.call(response)
  else
    response
  end
end