Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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
Ejemplo n.º 3
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()
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
 def __init__(self, *args, **kwargs):
     #: Instanz des Loggers.
     self.logger = shared.getLogger("xmlrpc-server")
     super().__init__(*args, **kwargs)