def json_asok(self, command, service_type, service_id, timeout=None):
if timeout is None:
timeout = 15*60
+ command.insert(0, '--format=json')
proc = self.mon_manager.admin_socket(service_type, service_id, command, timeout=timeout)
- response_data = proc.stdout.getvalue()
- log.info("_json_asok output: {0}".format(response_data))
- if response_data.strip():
- return json.loads(response_data)
+ response_data = proc.stdout.getvalue().strip()
+ if len(response_data) > 0:
+ j = json.loads(response_data)
+ pretty = json.dumps(j, sort_keys=True, indent=2)
+ log.debug(f"_json_asok output\n{pretty}")
+ return j
else:
+ log.debug("_json_asok output empty")
return None
return result
- def get_rank(self, rank=0, status=None):
+ def get_rank(self, rank=None, status=None):
if status is None:
status = self.getinfo()
+ if rank is None:
+ rank = 0
return status.get_rank(self.id, rank)
def rank_restart(self, rank=0, status=None):
info = self.get_rank(rank=rank, status=status)
return json.loads(self.mon_manager.raw_cluster_cmd("tell", 'mds.{0}'.format(info['name']), *command))
+ def ranks_tell(self, command, status=None):
+ if status is None:
+ status = self.status()
+ out = []
+ for r in status.get_ranks(self.id):
+ result = self.rank_tell(command, rank=r['rank'], status=status)
+ out.append((r['rank'], result))
+ return sorted(out)
+
+ def ranks_perf(self, f, status=None):
+ perf = self.ranks_tell(["perf", "dump"], status=status)
+ out = []
+ for rank, perf in perf:
+ out.append((rank, f(perf)))
+ return out
+
def read_cache(self, path, depth=None):
cmd = ["dump", "tree", path]
if depth is not None: