refactored EtcdClient
This commit is contained in:
parent
b7a91bbaf1
commit
508c4f384c
|
@ -4,40 +4,32 @@ import etcd3 as etcd3
|
||||||
from retrying import retry
|
from retrying import retry
|
||||||
|
|
||||||
CLUSTER_INFO_KEY = '/syncthing_monitor/cluster_info'
|
CLUSTER_INFO_KEY = '/syncthing_monitor/cluster_info'
|
||||||
|
DEFAULT_PORT = 2379
|
||||||
|
|
||||||
|
|
||||||
class EtcdClient:
|
class EtcdClient:
|
||||||
def __init__(self, host):
|
def __init__(self, host, port=DEFAULT_PORT):
|
||||||
self.host = host
|
self.etcd = etcd3.client(host=host, port=port)
|
||||||
|
|
||||||
|
def load_cluster_info(self):
|
||||||
|
raw_value, meta = self.etcd.get(CLUSTER_INFO_KEY)
|
||||||
|
if raw_value is None:
|
||||||
|
return {'devices': []}
|
||||||
|
return json.loads(raw_value)
|
||||||
|
|
||||||
@retry
|
@retry
|
||||||
def append_device_id(self, device_id, port=2379):
|
def append_device_id(self, device_id):
|
||||||
cluster_info = {'devices': []}
|
with self.etcd.lock('syncthing_monitor'):
|
||||||
|
cluster_info = self.load_cluster_info()
|
||||||
etcd = etcd3.client(host=self.host, port=port)
|
|
||||||
|
|
||||||
with etcd.lock('syncthing_monitor'):
|
|
||||||
raw_value = etcd.get(CLUSTER_INFO_KEY)[0]
|
|
||||||
|
|
||||||
if raw_value is not None:
|
|
||||||
cluster_info = json.loads(raw_value)
|
|
||||||
|
|
||||||
if not any(device_id in element for element in cluster_info['devices']):
|
if not any(device_id in element for element in cluster_info['devices']):
|
||||||
cluster_info['devices'].append(device_id)
|
cluster_info['devices'].append(device_id)
|
||||||
|
|
||||||
print("Updating etcd value for '{0}': {1}".format(CLUSTER_INFO_KEY, json.dumps(cluster_info)), flush=True)
|
print("Updating etcd value for '{0}': {1}".format(CLUSTER_INFO_KEY, json.dumps(cluster_info)))
|
||||||
etcd.put(CLUSTER_INFO_KEY, json.dumps(cluster_info))
|
self.etcd.put(CLUSTER_INFO_KEY, json.dumps(cluster_info))
|
||||||
|
|
||||||
@retry
|
@retry
|
||||||
def get_device_list(self, port=2379):
|
def get_device_list(self):
|
||||||
cluster_info = {'devices': []}
|
device_list = self.load_cluster_info()['devices']
|
||||||
|
print("Obtained device_list devices from etcd: {0}".format(json.dumps(device_list)))
|
||||||
etcd = etcd3.client(host=self.host, port=port)
|
return device_list
|
||||||
|
|
||||||
raw_value = etcd.get(CLUSTER_INFO_KEY)[0]
|
|
||||||
|
|
||||||
if raw_value is not None:
|
|
||||||
cluster_info = json.loads(raw_value)
|
|
||||||
|
|
||||||
print("Obtained cluster_info devices from etcd: {0}".format(json.dumps(cluster_info['devices'])))
|
|
||||||
return cluster_info['devices']
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user