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