def Main(): """ Initialisiert das Logging und den Controller und startet diesen. Ausführung bis CTRL-C oder `kill -INT <PID>`. """ logger = shared.getLogger("controller") address = ("", CONTROLLER_PORT) logger.info("Starting XML-RPC-Server as %r, pid = %s", address, os.getpid()) try: try: controller = Controller() except Exception: logger.exception("Error during initialization, stopped.") return try: ds = DataServer(address, allow_none=True) ds.register_instance(controller) logger.debug("Start serving.") ds.serve_forever() except KeyboardInterrupt: logger.info("Shutdown due to keyboardinterrupt.") except Exception: logger.exception("Unhandled error, stopped.") finally: controller.CleanUp() finally: logger.info("Finished.") shared.logging.shutdown()
def main(): logger = shared.getLogger("display") try: ctrl = ScreenController(logger) except Exception: logger.exception("Error while initializing screen controller.") return -1 try: ctrl() except Exception: logger.exception("Error while running screen controller.") return -2 return 0
def Main(): """ Startet den Streamingserver öffentlich erreichbar mit dem Port :data:`config.CAM_PORT`. Die Methode beendet sich erst durch Beenden des Servers resp. ein ``SIGINT``. """ logger = getLogger(name="server") logger.info( "Starting using port %d. Max streams = %d, timeout per stream = %.2f secs.", CAM_PORT, MAX_STREAM_COUNT, MAX_STREAM_TIME) try: StreamingServer(('', CAM_PORT), StreamingHandler).serve_forever() except KeyboardInterrupt: logger.info("Stopped due to keyboard interrupt.") except Exception: logger.exception("Unhandled error, abort.") finally: camera.CleanUp()
def do_GET(self): """ Wird gerufen, um ein GET-Request zu behandeln. In Abhängigkeit des Request-Pfades werden hier entsprechende Aktionen getriggert: - ``/`` (kein Pfad): Weiterleitung nach ``/index.html`` (301) - ``/index.html``: Ausgabe von :data:`PAGE` (Standard-HTML-Seite mit einem Bild das ``/stream.mjpg`` lädt) - ``/stream.mjpg``: Ausgabe des Kamerastreams. Siehe den Abschnitt *Restriktionen* weiter oben. - ``/steady.jpg``: Einzelnes Standbild. Hier greifen die Restriktionen nicht. In allen anderen Fällen wird ein 404-Response ausgegeben. """ name = '%s:%s' % self.client_address logger = getLogger(name) logger.debug("Handling request: %r", self.path) if self.path == '/': # -----[Zugriff auf Basis-URL, hier leiten wir nach /index.html um]----- self.send_response(301) self.send_header('Location', '/index.html') self.end_headers() elif self.path == '/index.html': # -----[Zugriff auf index.html, Ausgabe von PAGE]----- content = PAGE.encode('utf-8') self.send_response(200) self.send_header('Content-Type', 'text/html; charset=utf-8') self.send_header('Content-Length', len(content)) self.end_headers() self.wfile.write(content) elif self.path == '/steady.jpg': self.SteadyRequest(logger) elif self.path == '/stream.mjpg': self.StreamRequest(logger) else: self.send_error(404, message="Invalid path %r" % (self.path, )) self.end_headers()
import time import pathlib import threading import unittest import warnings # -------------------------------------------------------------------------------------------------- warnings.filterwarnings('ignore', r'.*using a (GPIO|SMBUS) mockup.*') # -------------------------------------------------------------------------------------------------- if str(pathlib.Path(__file__).parent.parent) not in sys.path: sys.path.insert(0, str(pathlib.Path(__file__).parent.parent)) # -------------------------------------------------------------------------------------------------- from config import * # pylint: disable=W0614,W0401 import shared from gpio import GPIO # -------------------------------------------------------------------------------------------------- logger = shared.getLogger("test") # -------------------------------------------------------------------------------------------------- class TestCase(unittest.TestCase): def setUp(self): logger.info("*** %r is starting.", self._testMethodName) def tearDown(self): logger.info("*** %r has finished.", self._testMethodName) def assertTrue(self, expr, msg=None): if msg: logger.info(msg) return super().assertTrue(expr, msg=msg)
def __init__(self, *args, **kwargs): #: Instanz des Loggers. self.logger = shared.getLogger("xmlrpc-server") super().__init__(*args, **kwargs)