def ephemerals_info(self, hosts):
        """Returns ClientInfo per path.

        :param hosts: comma separated lists of members of the ZK ensemble.
        :returns: A dictionary of (path, ClientInfo).

        """
        info_by_path, info_by_id = {}, {}

        for server_endpoint, dump in self.dump_by_server(hosts).items():
            server_ip, server_port = server_endpoint
            sid = None
            for line in dump.split("\n"):
                mat = self.SESSION_REGEX.match(line)
                if mat:
                    sid = mat.group(1)
                    continue

                mat = self.PATH_REGEX.match(line)
                if mat:
                    info = info_by_id.get(sid, None)
                    if info is None:
                        info = info_by_id[sid] = ClientInfo(sid)
                    info_by_path[mat.group(1)] = info
                    continue

                mat = self.IP_PORT_REGEX.match(line)
                if mat:
                    ip, port, sid = mat.groups()
                    if sid not in info_by_id:
                        continue
                    info_by_id[sid](ip, int(port), server_ip, server_port)

        return info_by_path
Returns ClientInfo per path.

        :param hosts: comma separated lists of members of the ZK ensemble.
        :returns: A dictionary of (path, ClientInfo).