X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?p=living-lab-site.git;a=blobdiff_plain;f=cis%2Fcis_lb%2Fload_balancer%2Fbase.py;fp=cis%2Fcis_lb%2Fload_balancer%2Fbase.py;h=e81baee6bb08d4b8c20f9ac670b564d54b7e3534;hp=f4e9261f1baddddf307e4ef1cc26bfa128d9a3e6;hb=93443dbebf465e060f37cc37c357b845d8153f7b;hpb=141bdb84bf143c29a6c50eef3aee18541d2fc0e4 diff --git a/cis/cis_lb/load_balancer/base.py b/cis/cis_lb/load_balancer/base.py index f4e9261..e81baee 100644 --- a/cis/cis_lb/load_balancer/base.py +++ b/cis/cis_lb/load_balancer/base.py @@ -1,9 +1,11 @@ import threading import urllib +import json import config import logger + class LoadBalancer(threading.Thread): def __init__(self, id, queue): @@ -21,6 +23,7 @@ class LoadBalancer(threading.Thread): while True: (request, data) = self.queue.get() urls = config.CIS_URLS[:] + code = json.loads(data)['code'] while len(urls) != 0: cis = self.choose(urls) @@ -29,15 +32,36 @@ class LoadBalancer(threading.Thread): try: urllib.urlopen(cis + request, data) except IOError: - logger.log_msg('Failed to forward request to %s' % cis, \ + logger.log_msg('#%s: Failed to forward request to %s' \ + % (code, cis), \ logger.LOG_LEVEL_ERROR) continue - logger.log_msg('Request forwarded to %s' % cis, \ + logger.log_msg('#%s: Request forwarded to %s' \ + % (code, cis), \ logger.LOG_LEVEL_INFO) break + if len(urls) == 0: + logger.log_msg('#%s: Failed to forward request to any CIS' \ + % code, \ + logger.LOG_LEVEL_FATAL) + self.notify_error(code) + self.queue.task_done() + + def notify_error(self, code): + logger.log_msg('#%s: notifying web server about the error...'\ + % code) + + if config.WS_ERROR[len(config.WS_ERROR) - 1] == '/': + url = config.WS_ERROR + code + else: + url = config.WS_ERROR + '/' + code + url = url + '/' + 'unreachable' + + f = urllib.urlopen(url) + f.read() def choose(self, urls): """