summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/utils
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oeqa/utils')
-rw-r--r--meta/lib/oeqa/utils/httpserver.py37
1 files changed, 29 insertions, 8 deletions
diff --git a/meta/lib/oeqa/utils/httpserver.py b/meta/lib/oeqa/utils/httpserver.py
index 7d12331453..a48d4994fd 100644
--- a/meta/lib/oeqa/utils/httpserver.py
+++ b/meta/lib/oeqa/utils/httpserver.py
@@ -1,13 +1,13 @@
1import http.server 1import http.server
2import multiprocessing 2import multiprocessing
3import os 3import os
4import traceback
5import signal
4from socketserver import ThreadingMixIn 6from socketserver import ThreadingMixIn
5 7
6class HTTPServer(ThreadingMixIn, http.server.HTTPServer): 8class HTTPServer(ThreadingMixIn, http.server.HTTPServer):
7 9
8 def server_start(self, root_dir): 10 def server_start(self, root_dir, logger):
9 import signal
10 signal.signal(signal.SIGTERM, signal.SIG_DFL)
11 os.chdir(root_dir) 11 os.chdir(root_dir)
12 self.serve_forever() 12 self.serve_forever()
13 13
@@ -18,19 +18,40 @@ class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
18 18
19class HTTPService(object): 19class HTTPService(object):
20 20
21 def __init__(self, root_dir, host=''): 21 def __init__(self, root_dir, host='', logger=None):
22 self.root_dir = root_dir 22 self.root_dir = root_dir
23 self.host = host 23 self.host = host
24 self.port = 0 24 self.port = 0
25 self.logger = logger
25 26
26 def start(self): 27 def start(self):
28 if not os.path.exists(self.root_dir):
29 self.logger.info("Not starting HTTPService for directory %s which doesn't exist" % (self.root_dir))
30 return
31
27 self.server = HTTPServer((self.host, self.port), HTTPRequestHandler) 32 self.server = HTTPServer((self.host, self.port), HTTPRequestHandler)
28 if self.port == 0: 33 if self.port == 0:
29 self.port = self.server.server_port 34 self.port = self.server.server_port
30 self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir]) 35 self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir, self.logger])
36
37 # The signal handler from testimage.bbclass can cause deadlocks here
38 # if the HTTPServer is terminated before it can restore the standard
39 #signal behaviour
40 orig = signal.getsignal(signal.SIGTERM)
41 signal.signal(signal.SIGTERM, signal.SIG_DFL)
31 self.process.start() 42 self.process.start()
43 signal.signal(signal.SIGTERM, orig)
44
45 if self.logger:
46 self.logger.info("Started HTTPService on %s:%s" % (self.host, self.port))
47
32 48
33 def stop(self): 49 def stop(self):
34 self.server.server_close() 50 if hasattr(self, "server"):
35 self.process.terminate() 51 self.server.server_close()
36 self.process.join() 52 if hasattr(self, "process"):
53 self.process.terminate()
54 self.process.join()
55 if self.logger:
56 self.logger.info("Stopped HTTPService on %s:%s" % (self.host, self.port))
57