refactored EtcdClient

This commit is contained in:
B.J. Dweck 2021-01-29 12:56:51 +02:00
parent b7a91bbaf1
commit 508c4f384c

View File

@ -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']