def test_get_group_members(self): proc_info = system_info.get_process_info() member_id = get_member_id() # 1. Group doesn't exist resp = self.app.get('/v1/service_registry/groups/doesnt-exist/members', expect_errors=True) self.assertEqual(resp.status_int, 404) self.assertEqual(resp.json['faultstring'], 'Group with ID "doesnt-exist" not found.') # 2. Group exists and has a single member resp = self.app.get('/v1/service_registry/groups/mock_service/members') self.assertEqual(resp.status_int, 200) self.assertEqual(resp.json, { 'members': [ { 'group_id': 'mock_service', 'member_id': member_id.decode('utf-8'), 'capabilities': { 'key1': 'value1', 'name': 'mock_service', 'hostname': proc_info['hostname'], 'pid': proc_info['pid'] } } ] })
def register_service_in_service_registry(service, capabilities=None, start_heart=True): """ Register provided service in the service registry and start the heartbeat process. :param service: Service name which will also be used for a group name (e.g. "api"). :type service: ``str`` :param capabilities: Optional metadata associated with the service. :type capabilities: ``dict`` """ # NOTE: It's important that we pass start_heart=True to start the hearbeat process coordinator = coordination.get_coordinator(start_heart=start_heart) member_id = coordination.get_member_id() # 1. Create a group with the name of the service if not isinstance(service, six.binary_type): group_id = service.encode('utf-8') else: group_id = service try: coordinator.create_group(group_id).get() except GroupAlreadyExist: pass # Include common capabilities such as hostname and process ID proc_info = system_info.get_process_info() capabilities['hostname'] = proc_info['hostname'] capabilities['pid'] = proc_info['pid'] # 1. Join the group as a member LOG.debug('Joining service registry group "%s" as member_id "%s" with capabilities "%s"' % (group_id, member_id, capabilities)) return coordinator.join_group(group_id, capabilities=capabilities).get()
def test_get_group_members(self): proc_info = system_info.get_process_info() member_id = get_member_id() # 1. Group doesn't exist resp = self.app.get('/v1/service_registry/groups/doesnt-exist/members', expect_errors=True) self.assertEqual(resp.status_int, 404) self.assertEqual(resp.json['faultstring'], 'Group with ID "doesnt-exist" not found.') # 2. Group exists and has a single member resp = self.app.get('/v1/service_registry/groups/mock_service/members') self.assertEqual(resp.status_int, 200) self.assertEqual( resp.json, { 'members': [{ 'group_id': 'mock_service', 'member_id': member_id.decode('utf-8'), 'capabilities': { 'key1': 'value1', 'name': 'mock_service', 'hostname': proc_info['hostname'], 'pid': proc_info['pid'] } }] })
def register_service_in_service_registry(service, capabilities=None, start_heart=True): """ Register provided service in the service registry and start the heartbeat process. :param service: Service name which will also be used for a group name (e.g. "api"). :type service: ``str`` :param capabilities: Optional metadata associated with the service. :type capabilities: ``dict`` """ # NOTE: It's important that we pass start_heart=True to start the hearbeat process coordinator = coordination.get_coordinator(start_heart=start_heart) member_id = coordination.get_member_id() # 1. Create a group with the name of the service if not isinstance(service, six.binary_type): group_id = service.encode('utf-8') else: group_id = service try: coordinator.create_group(group_id).get() except GroupAlreadyExist: pass # Include common capabilities such as hostname and process ID proc_info = system_info.get_process_info() capabilities['hostname'] = proc_info['hostname'] capabilities['pid'] = proc_info['pid'] # 1. Join the group as a member LOG.debug('Joining service registry group "%s" as member_id "%s" with capabilities "%s"' % (group_id, member_id, capabilities)) return coordinator.join_group(group_id, capabilities=capabilities).get()
def test_get_group_members(self): proc_info = system_info.get_process_info() member_id = get_member_id() # 1. Group doesn't exist resp = self.app.get("/v1/service_registry/groups/doesnt-exist/members", expect_errors=True) self.assertEqual(resp.status_int, 404) self.assertEqual(resp.json["faultstring"], 'Group with ID "doesnt-exist" not found.') # 2. Group exists and has a single member resp = self.app.get("/v1/service_registry/groups/mock_service/members") self.assertEqual(resp.status_int, 200) self.assertEqual( resp.json, { "members": [{ "group_id": "mock_service", "member_id": member_id.decode("utf-8"), "capabilities": { "key1": "value1", "name": "mock_service", "hostname": proc_info["hostname"], "pid": proc_info["pid"], }, }] }, )
def deregister_service(service, start_heart=True): if not isinstance(service, six.binary_type): group_id = service.encode("utf-8") else: group_id = service coordinator = coordination.get_coordinator(start_heart=start_heart) member_id = coordination.get_member_id() LOG.debug( 'Leaving service registry group "%s" as member_id "%s"' % (group_id, member_id) ) try: coordinator.leave_group(group_id).get() except (GroupNotCreated, MemberNotJoined): pass