def _get_stats(keyname, stats_kind, include_lists): """ Returns statistics from Hermes. Args: keyname: A string representing an identifier from AppScaleFile. stats_kind: A string representing a kind of statistics. include_lists: A dict representing desired fields. Returns: A dict of statistics. A dict of failures. """ login_host = LocalState.get_login_host(keyname=keyname) secret = LocalState.get_secret_key(keyname=keyname) administration_port = "17441" stats_path = "/stats/cluster/{stats_kind}".format(stats_kind=stats_kind) headers = {'Appscale-Secret': secret} data = {'include_lists': include_lists} url = "https://{ip}:{port}{path}".format( ip=login_host, port=administration_port, path=stats_path ) try: requests.packages.urllib3.disable_warnings(InsecureRequestWarning) resp = requests.get( url=url, headers=headers, json=data, verify=False ) resp.raise_for_status() except requests.HTTPError as err: AppScaleLogger.warn( "Failed to get {stats_kind} stats ({err})" .format(stats_kind=stats_kind, err=err) ) return {}, {} json_body = resp.json() return json_body["stats"], json_body["failures"]
def get_roles(keyname): """ Obtains roles for each ip from AppControllerClient. Args: keyname: A string representing an identifier from AppScaleFile. Returns: A dict in which each key is an ip and value is a role list. """ login_host = LocalState.get_login_host(keyname=keyname) login_acc = AppControllerClient( host=login_host, secret=LocalState.get_secret_key(keyname) ) cluster_stats = login_acc.get_cluster_stats() roles_data = { node["private_ip"]: (node["roles"] if len(node["roles"]) > 0 else ["?"]) for node in cluster_stats } return roles_data