add method available_services to ServiceRegistry, returns all services considered up for the supplied role

This commit is contained in:
Noah Levitt 2015-11-06 23:42:06 +00:00
parent 345348fa46
commit 287258e104
2 changed files with 21 additions and 0 deletions

View File

@ -161,3 +161,11 @@ class ServiceRegistry(object):
except r.ReqlNonExistenceError:
return None
def available_services(self, role):
try:
result = self.r.table('services').filter({"role":role}).filter(
lambda svc: r.now().sub(svc["last_heartbeat"]) < 3 * svc["heartbeat_interval"] #.default(20.0)
).order_by("load").run()
return result
except r.ReqlNonExistenceError:
return []

View File

@ -151,3 +151,16 @@ def test_service_registry(r):
assert svcreg.available_service("no-such-role") == None
assert svcreg.available_service("yes-such-role") == None
svc0 = {
"role": "yes-such-role",
"load": 100.0,
"heartbeat_interval": 0.2,
}
svc1 = {
"role": "yes-such-role",
"load": 200.0,
"heartbeat_interval": 0.2,
}
svc0 = svcreg.heartbeat(svc0)
svc1 = svcreg.heartbeat(svc1)
assert len(svcreg.available_services("yes-such-role")) == 2