-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
81 lines (62 loc) · 2.24 KB
/
server.py
File metadata and controls
81 lines (62 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
from threading import Thread
from importlib import import_module
from pymongo import MongoClient
import pika
import worker
class Worker(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
worker.work()
class WebServer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
httpd = make_server('', 8000, server_callback)
print("Serving on port 8000...")
httpd.serve_forever()
class MessageGetter(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
pika_channel.queue_declare(queue="refresh")
pika_channel.basic_consume(dominique, queue="refresh", no_ack=True)
pika_channel.start_consuming()
pika_connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
pika_channel = pika_connection.channel()
db_collection = None
default = import_module("veetreens.default.veetreen")
veetreens = dict()
veetreens["default"] = default.app
def dominique(ch=None, method=None, properties=None, body=None):
print("[INFO] Got refresh message !")
for v in db_collection.find():
act_veetreen = import_module("veetreens."+v["alias"]+".veetreen")
if(v["domain"] not in veetreens.keys()):
veetreens[v["domain"]] = act_veetreen.app
print("[INFO] Veetreen at URL "+v["domain"]+" up !")
def server_callback(environ, start_response):
for key,value in environ.items():
if key == "HTTP_HOST":
print("[INFO] URL Requested:", value)
if value in veetreens.keys():
return veetreens[value](environ, start_response)
else:
return veetreens["default"](environ, start_response)
if __name__ == "__main__":
# Connexion à la DB
db_client = MongoClient('localhost', 27017)
db = db_client.veetreen
db_collection = db.veetreens
dominique()
worker_thread = Worker()
messagegetter_thread = MessageGetter()
webserver_thread = WebServer()
worker_thread.start()
webserver_thread.start()
messagegetter_thread.start()
worker_thread.join()
webserver_thread.join()
messagegetter_thread.join()