Exemple #1
0
    def start(self):
        """Programmatic start of the main service."""

        assert os.path.exists(self._env_work_dir)

        # reload configuration
        load_config(get_config_file())
        logger.configure(config.get("logging"))
        timeline_event.configure_timeline(config.get("timeline"))

        # watch configuration changes
        self.start_watch_config()

        log.info("Starting Ambianic server...")

        # Register the signal handlers
        servers = {}
        # Start the job threads
        try:
            for s_name, s_class in ROOT_SERVERS.items():
                srv = s_class(config=config)
                srv.start()
                servers[s_name] = srv

            self._latest_heartbeat = time.monotonic()

            self._servers = servers
            # Keep the main thread running, otherwise signals are ignored.
            while True:
                time.sleep(0.5)
                self._healthcheck(servers)
                self._heartbeat()
        except ServiceExit:

            log.info("Service exit requested.")

            # stop servers and cleanup references
            self._stop_servers(servers)
            self._servers = {}
            self._service_exit_requested = False

            # stop watching config  files
            self.stop_watch_config()

        if self._service_restart_requested:
            self._service_restart_requested = False
            log.info("Restarting Ambianic server.")
            return self.start()

        log.info("Exiting Ambianic server.")
        return True
Exemple #2
0
async def startup_event():
    # set an initial data dir location
    if config:
        cfg_data_dir = config.get("data_dir", DEFAULT_DATA_DIR)
        set_data_dir(data_dir=cfg_data_dir)
    if not app.data_dir:
        set_data_dir(data_dir=DEFAULT_DATA_DIR)
Exemple #3
0
def get_status():
    """Returns overall status of the Ambianic Edge device along with
    other device details such as release version."""
    name = config.get("display_name", "My Ambianic Edge device")
    response_object = StatusResponse(status="OK",
                                     version=__version__,
                                     display_name=name)
    return response_object
Exemple #4
0
def test_no_pipelines(my_dir):
    load_config(os.path.join(my_dir, "test-config-no-pipelines.yaml"), clean=True)
    assert config.get("pipelines") is None
    hb_flag = threading.Event()
    srv, t = None, None
    try:
        srv, t = _start_mock_server(work_dir=my_dir, heartbeat_flag=hb_flag)
        assert srv
        assert t
        hb_flag.wait(timeout=3)
        assert hb_flag.is_set()
        pps = srv._servers["pipelines"]
        assert isinstance(pps, ambianic.pipeline.interpreter.PipelineServer)
        assert not pps.pipeline_server_job.job._pipelines
    finally:
        _stop_mock_server(server=srv, thread=t)
Exemple #5
0
 def __init__(self, config):
     """Create Flask based web service."""
     self.config = config
     data_dir = None
     if config:
         data_dir = config.get('data_dir', None)
     if not data_dir:
         data_dir = DEFAULT_DATA_DIR
     self.srv = None
     app = create_app(data_dir=data_dir)
     ip_address = '0.0.0.0'
     port = 8778
     log.info('starting flask web server on %s:%d', ip_address, port)
     self.srv = make_server(ip_address, port, app)
     ctx = app.app_context()
     ctx.push()
     with app.app_context():
         flask.current_app.data_dir = data_dir
     self.flask_stopped = True
     log.debug('Flask process created')
Exemple #6
0
def get_device_display_name():
    """
    Get the user friendly display name for this Ambianic Edge device.
    """
    display_name = config.get("display_name", None)
    return display_name
Exemple #7
0
def test_no_pipelines():
    load_config(os.path.join(_dir, 'test-config-no-pipelines.yaml'), True)
    assert config.get("pipelines", None) is None
def test_get_device_display_name(client):
    current_device_display_name = config.get("display_name", None)
    rv = client.get("/api/device/display_name")
    data = rv.json()
    log.debug(f"get -> /api/device/display_name: JSON response: {data}")
    assert data == current_device_display_name