diff options
author | 2020-03-30 09:24:26 +0900 | |
---|---|---|
committer | 2020-03-30 09:24:26 +0900 | |
commit | 5b80bfd7bffd4c20d80b7c70a7130529e9a755dd (patch) | |
tree | b4bb18dcd1487dbf1ea8127e5671b7bb2eded033 /external/poky/meta/lib/oeqa/utils/httpserver.py | |
parent | 706ad73eb02caf8532deaf5d38995bd258725cb8 (diff) |
agl-basesystem
Diffstat (limited to 'external/poky/meta/lib/oeqa/utils/httpserver.py')
-rw-r--r-- | external/poky/meta/lib/oeqa/utils/httpserver.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/external/poky/meta/lib/oeqa/utils/httpserver.py b/external/poky/meta/lib/oeqa/utils/httpserver.py new file mode 100644 index 00000000..a48d4994 --- /dev/null +++ b/external/poky/meta/lib/oeqa/utils/httpserver.py @@ -0,0 +1,57 @@ +import http.server +import multiprocessing +import os +import traceback +import signal +from socketserver import ThreadingMixIn + +class HTTPServer(ThreadingMixIn, http.server.HTTPServer): + + def server_start(self, root_dir, logger): + os.chdir(root_dir) + self.serve_forever() + +class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler): + + def log_message(self, format_str, *args): + pass + +class HTTPService(object): + + def __init__(self, root_dir, host='', logger=None): + self.root_dir = root_dir + self.host = host + self.port = 0 + self.logger = logger + + def start(self): + if not os.path.exists(self.root_dir): + self.logger.info("Not starting HTTPService for directory %s which doesn't exist" % (self.root_dir)) + return + + self.server = HTTPServer((self.host, self.port), HTTPRequestHandler) + if self.port == 0: + self.port = self.server.server_port + self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir, self.logger]) + + # The signal handler from testimage.bbclass can cause deadlocks here + # if the HTTPServer is terminated before it can restore the standard + #signal behaviour + orig = signal.getsignal(signal.SIGTERM) + signal.signal(signal.SIGTERM, signal.SIG_DFL) + self.process.start() + signal.signal(signal.SIGTERM, orig) + + if self.logger: + self.logger.info("Started HTTPService on %s:%s" % (self.host, self.port)) + + + def stop(self): + if hasattr(self, "server"): + self.server.server_close() + if hasattr(self, "process"): + self.process.terminate() + self.process.join() + if self.logger: + self.logger.info("Stopped HTTPService on %s:%s" % (self.host, self.port)) + |