SwarmPlayer is now detected; CIS-LB random load balancer created
[living-lab-site.git] / cis / cis_lb / cis_lb.py
1 #!/usr/bin/env python
2
3 import sys
4 import urllib
5 import web
6 import time
7 import threading
8 from Queue import Queue
9
10 from load_balancer.random_lb import RandomLoadBalancer
11 # Located in the parent directory; execute from that location or put it in PYTHONPATH
12 import logger
13 import config
14
15
16 class LBWorker(threading.Thread):
17     """
18     Load Balancing Worker: chooses a CIS where the request should be forwarded
19     or broadcasts the requests to all CIS machines if required.
20     """
21     
22     def __init__(self, id):
23         """
24         Initialize Load Balancing Worker.
25         """
26
27         threading.Thread.__init__(self, name = 'LBWorker%02d' % id)
28     
29     def run(self):
30         
31         while True:
32             job = Server.queue.get()
33             
34             print '%s is working at %s...' % (self.name, repr(job))
35             time.sleep(10)
36             
37             Server.queue.task_done()
38
39
40 class Server:
41     
42     def POST(self, request):
43         
44         Server.queue.put( (request, web.data()) )
45         
46         #return web.data()
47
48 if __name__ == '__main__':
49     
50     Server.queue = Queue()
51     
52     # Create job threads.
53     lb_workers = []
54     for i in range(0, config.JOB_THREADS_COUNT):
55         lb_worker = RandomLoadBalancer(i, Server.queue)
56         lb_worker.daemon = True
57         lb_worker.start()
58         lb_workers.append(lb_worker)
59     
60     # Web service.
61     urls = ('/(.*)', 'Server')
62     app = web.application(urls, globals())
63     app.run()