# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mail@martinarrieta.me-20140504232205-libnlq59wom5lpgw # target_branch: file:///Users/martin/Documents/Develop/fabric/mysql-\ # fabric/,branch=testJson/ # testament_sha1: 2a27950d2a3c55bdb90341f32874163d43da9357 # timestamp: 2014-05-14 10:46:43 -0300 # base_revision_id: mail@martinarrieta.me-20140502130804-\ # 05dhiqbdp7dqs341 # # Begin patch === modified file 'lib/mysql/fabric/command.py' --- lib/mysql/fabric/command.py 2014-03-07 06:36:46 +0000 +++ lib/mysql/fabric/command.py 2014-05-03 15:16:11 +0000 @@ -42,6 +42,8 @@ import functools import traceback +import json + import mysql.fabric.errors as _errors import mysql.fabric.executor as _executor @@ -452,13 +454,13 @@ :param params: The parameters to the function :return: {success:True/False, message:, - return:}. + return:}. """ try: status = func(*params) except Exception: return [False, traceback.format_exc(), True] - return [True, "", status] + return [True, "", json.dumps(status)] class ProcedureCommand(Command): === modified file 'lib/mysql/fabric/services/health.py' --- lib/mysql/fabric/services/health.py 2014-05-02 13:08:04 +0000 +++ lib/mysql/fabric/services/health.py 2014-05-04 23:22:05 +0000 @@ -28,6 +28,8 @@ Command, ) +import json + _LOGGER = logging.getLogger(__name__) class CheckHealth(Command): @@ -51,6 +53,40 @@ """ return Command.generate_output_pattern(_health, group_id) + @staticmethod + def command_status(status, details=False): + """Present the result reported by a command in a friendly-user way. + + :param status: The command status. + :param details: Whether details on failures should be printed or + not. + """ + + returned = "" + + if not isinstance(status, list): + returned = status + elif not isinstance(status[0], bool): + returned = status + else: + returned = "Group health:\n" + + if status[0]: + health = json.loads(status[2]) + for i in health.items(): + returned += "\n".join([ + " serverid = %s" % (i[0], ), + " is_alive = %s" % (i[1]['is_alive'] ), + " status = %s" % (i[1]['status'] ), + " address = %s" % (i[1]['address'] ), + " threads = %s" % (i[1]['threads'] ), + "" + ]) + else: + returned = status[1].split("\n")[-2] + + return returned + def _health(group_id): """Check which servers in a group are up and down. """ @@ -66,7 +102,8 @@ thread_issues = {} status = server.status address = server.address - try: + + try: server.connect() alive = True if not is_master: @@ -85,7 +122,7 @@ availability[str(server.uuid)] = { "is_alive" : alive, "status" : status, - "threads" : thread_issues + "threads" : thread_issues, "address" : address } # Begin bundle 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