def get_replication_for_services(synapse_host, synapse_port, synapse_haproxy_url_format, services): """Returns the replication level for the provided services This check is intended to be used with an haproxy load balancer, and relies on the implementation details of that choice. :param synapse_host: The hose that this check should contact for replication information. :param synapse_port: The port number that this check should contact for replication information. :param synapse_haproxy_url_format: The format of the synapse haproxy URL. :param services: A list of strings that are the service names that should be checked for replication. :returns available_instance_counts: A dictionary mapping the service names to an integer number of available replicas :returns None: If it cannot connect to the specified synapse host and port """ backends = get_multiple_backends( services=services, synapse_host=synapse_host, synapse_port=synapse_port, synapse_haproxy_url_format=synapse_haproxy_url_format, ) counter = collections.Counter([b['pxname'] for b in backends if backend_is_up(b)]) return dict((sn, counter[sn]) for sn in services)
def get_replication_for_services(synapse_host, synapse_port, synapse_haproxy_url_format, services): """Returns the replication level for the provided services This check is intended to be used with an haproxy load balancer, and relies on the implementation details of that choice. :param synapse_host: The hose that this check should contact for replication information. :param synapse_port: The port number that this check should contact for replication information. :param synapse_haproxy_url_format: The format of the synapse haproxy URL. :param services: A list of strings that are the service names that should be checked for replication. :returns available_instance_counts: A dictionary mapping the service names to an integer number of available replicas :returns None: If it cannot connect to the specified synapse host and port """ backends = get_multiple_backends( services=services, synapse_host=synapse_host, synapse_port=synapse_port, synapse_haproxy_url_format=synapse_haproxy_url_format, ) counter = collections.Counter([b['pxname'] for b in backends if backend_is_up(b)]) return dict((sn, counter[sn]) for sn in services)
def get_registered_marathon_tasks( synapse_host, synapse_port, service, marathon_tasks, ): """Returns the marathon tasks that are registered in haproxy under a given service (nerve_ns). :param synapse_host: The host that this check should contact for replication information. :param synapse_port: The port that this check should contact for replication information. :param service: A list of strings that are the service names that should be checked for replication. :param marathon_tasks: A list of MarathonTask objects, whose tasks we will check for in the HAProxy status. """ backends = get_multiple_backends([service], synapse_host=synapse_host, synapse_port=synapse_port) healthy_tasks = [] for backend, task in match_backends_and_tasks(backends, marathon_tasks): if backend is not None and task is not None and backend['status'].startswith('UP'): healthy_tasks.append(task) return healthy_tasks