def print_cluster_status(cls, options): """ Gets cluster stats and prints it nicely. Args: options: A Namespace that has fields for each parameter that can be passed in via the command-line interface. """ try: load_balancer_ip = LocalState.get_host_with_role( options.keyname, 'load_balancer') acc = AppControllerClient( load_balancer_ip, LocalState.get_secret_key(options.keyname)) all_private_ips = acc.get_all_private_ips() cluster_stats = acc.get_cluster_stats() except (faultType, AppControllerException, BadConfigurationException): AppScaleLogger.warn("AppScale deployment is probably down") raise # Convert cluster stats to useful structures node_stats = { ip: next((n for n in cluster_stats if n["private_ip"] == ip), None) for ip in all_private_ips } apps_dict = next((n["apps"] for n in cluster_stats if n["apps"]), {}) services = [ServiceInfo(key.split('_')[0], key.split('_')[1], app_info) for key, app_info in apps_dict.iteritems()] nodes = [NodeStats(ip, node) for ip, node in node_stats.iteritems() if node] invisible_nodes = [ip for ip, node in node_stats.iteritems() if not node] if options.verbose: AppScaleLogger.log("-"*76) cls._print_nodes_info(nodes, invisible_nodes) cls._print_roles_info(nodes) else: AppScaleLogger.log("-"*76) cls._print_cluster_summary(nodes, invisible_nodes, services) cls._print_services(services) cls._print_status_alerts(nodes) try: login_host = acc.get_property('login')['login'] except KeyError: raise AppControllerException('login property not found') dashboard = next( (service for service in services if service.http == RemoteHelper.APP_DASHBOARD_PORT), None) if dashboard and dashboard.appservers >= 1: AppScaleLogger.success( "\nView more about your AppScale deployment at http://{}:{}/status" .format(login_host, RemoteHelper.APP_DASHBOARD_PORT) ) else: AppScaleLogger.log( "\nAs soon as AppScale Dashboard is started you can visit it at " "http://{0}:{1}/status and see more about your deployment" .format(login_host, RemoteHelper.APP_DASHBOARD_PORT) )
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. """ load_balancer_ip = LocalState.get_host_with_role(keyname, 'load_balancer') acc = AppControllerClient(host=load_balancer_ip, secret=LocalState.get_secret_key(keyname)) cluster_stats = 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
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. """ load_balancer_ip = LocalState.get_host_with_role(keyname, 'load_balancer') acc = AppControllerClient( host=load_balancer_ip, secret=LocalState.get_secret_key(keyname) ) cluster_stats = 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