def reboot_all_devices():
    local_data_gateway.get_data_for('{}/reboot'.format(
        config_service.load_cfg()["urls"]['denva']))
    local_data_gateway.get_data_for('{}/reboot'.format(
        config_service.load_cfg()["urls"]['enviro']))
    local_data_gateway.get_data_for('{}/reboot'.format(
        config_service.load_cfg()["urls"]['delight']))
    return {'result': 'All devices starting to reboot'}
def stop_all_devices():
    local_data_gateway.get_data_for('{}/halt'.format(
        config_service.load_cfg()["urls"]['denva']))
    local_data_gateway.get_data_for('{}/halt'.format(
        config_service.load_cfg()["urls"]['enviro']))
    local_data_gateway.get_data_for('{}/halt'.format(
        config_service.load_cfg()["urls"]['delight']))
    return {'result': 'All devices stopped'}
Example #3
0
def load_cfg() -> dict:
    if config_service.load_cfg()['mode'] == 'dev':
        path = r'd:\denva\email.json'
    elif config_service.load_cfg()['mode'] == 'server':
        path = r'd:\denva\email.json'
    else:
        path = '/home/pi/email.json'  # actual cfg is different place
    with open(path, READ) as email_config:
        return json.load(email_config)
def get_current_system_information_for_all_services():
    return {
        'server':
        system_data_service.get_system_information(),
        'denva':
        local_data_gateway.get_data_for('{}/system'.format(
            config_service.load_cfg()["urls"]['denva'])),
        'enviro':
        local_data_gateway.get_data_for('{}/system'.format(
            config_service.load_cfg()["urls"]['enviro'])),
        'delight':
        local_data_gateway.get_data_for('{}/system'.format(
            config_service.load_cfg()["urls"]['delight']))
    }
Example #5
0
def get_url_for(name: str):
    cfg = config_service.load_cfg()
    if name == 'enviro':
        return '{}/enviro'.format(cfg['urls']['server'])
    elif name == 'denva':
        return '{}/denva'.format(cfg['urls']['server'])
    else:
        logging.error('unknown name: {}'.format(name))
Example #6
0
def set_denva_status(cfg):
    # 1. DENVA
    state = status.Status()
    logger.info('Getting status for denva..')
    server_data = local_data_gateway.get_data_for('{}/system'.format(
        config_service.load_cfg()["urls"]['denva']))
    if 'error' in server_data:
        logger.warning('Unable to get Denva status due to {}'.format(
            server_data['error']))
        state.set_error()
    else:
        system_health_check_service.update_hc_for('denva', 'ui')
        if float(dom_utils.get_float_number_from_text(
                server_data['CPU Temp'])) > cfg['sensor']['cpu_temp_error']:
            logger.warning('status: RED due to very high cpu temp on Denva )')
            state.set_error()
        elif float(
                dom_utils.get_float_number_from_text(
                    server_data['CPU Temp'])) > cfg['sensor']['cpu_temp_warn']:
            logger.warning('status: ORANGE due to high cpu temp on Denva )')
            state.set_warn()

        if dom_utils.get_int_number_from_text(
                server_data['Memory Available']) < 384:
            logger.warning(
                'status: RED due to very low memory available on Denva')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                server_data['Memory Available']) < 512:
            logger.warning(
                'status: ORANGE due to low memory available on Denva')
            state.set_warn()

        if dom_utils.get_int_number_from_text(server_data['Free Space']) < 256:
            logger.warning('status: RED due to very low free space on Denva')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                server_data['Free Space']) < 1024:
            logger.warning('status: ORANGE due to low free space on Denva')
            state.set_warn()

        if dom_utils.get_int_number_from_text(
                server_data['Data Free Space']) < 256:
            logger.warning(
                'status: RED due to very low data free space on Denva')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                server_data['Data Free Space']) < 1024:
            logger.warning(
                'status: ORANGE due to low data free space on Denva')
            state.set_warn()
    color_red, color_green, color_blue = delight_utils.get_state_colour(state)
    update_blink(state.state)
    unicornhathd.set_pixel(ui_utils.to_x(1), 1, purple_r, purple_g, purple_b)
    set_status_for_device(1, 13, color_red, color_green, color_blue)
    logger.info('Denva: {}'.format(state.get_status_as_light_colour()))
    return blink
Example #7
0
def get_random_frame_picture_path():
    path = config_service.load_cfg()['paths']['frame'][
        config_service.get_mode()]
    files_list = []
    with os.scandir(path) as files:
        for file in files:
            files_list.append(path + "\\" + file.name)

    return files_list[random.randint(0, len(files_list) - 1)]
def get_links_for(suffix: str, sensor_only: bool = False) -> dict:
    urls = config_service.load_cfg()['urls']
    result = {
        'denva': '{}/{}'.format(urls['denva'], suffix),
        'enviro': '{}/{}'.format(urls['enviro'], suffix)
    }
    if not sensor_only:
        result['server'] = '{}/{}'.format(urls['server'], suffix)

    return result
Example #9
0
def get_colour_for_cpu():
    cpu_temp = float(re.sub('[^0-9.]', '', commands.get_cpu_temp()))
    config = config_service.load_cfg()
    if cpu_temp > config['sensor']['cpu_temp_fatal']:
        return ['Fatal', 255, 16, 1]
    elif cpu_temp > config['sensor']['cpu_temp_error']:
        return ['Fatal', 246, 108, 8]
    elif cpu_temp > config['sensor']['cpu_temp_warn']:
        return ['Warn', 255, 215, 0]
    else:
        return ['Good', 106, 168, 79]
def get_current_log_counts() -> dict:
    return {
        'app': {
            'denva':
            get_data_for('{}/log/count/app'.format(
                config_service.load_cfg()["urls"]['denva'])),
            'enviro':
            get_data_for('{}/log/count/app'.format(
                config_service.load_cfg()["urls"]['enviro'])),
            'delight':
            get_data_for('{}/log/count/app'.format(
                config_service.load_cfg()["urls"]['delight']))
        },
        'ui': {
            'denva':
            get_data_for('{}/log/count/ui'.format(
                config_service.load_cfg()["urls"]['denva'])),
            'enviro':
            get_data_for('{}/log/count/ui'.format(
                config_service.load_cfg()["urls"]['enviro'])),
            'delight':
            get_data_for('{}/log/count/ui'.format(
                config_service.load_cfg()["urls"]['delight']))
        }
    }
def get_current_logs_for_all_services() -> dict:
    return {
        'app': {
            'denva':
            get_data_for('{}/log/app/recent'.format(
                config_service.load_cfg()["urls"]['denva'])),
            'enviro':
            get_data_for('{}/log/app/recent'.format(
                config_service.load_cfg()["urls"]['enviro'])),
            'delight':
            get_data_for('{}/log/app/recent'.format(
                config_service.load_cfg()["urls"]['delight']))
        },
        'hc': {
            'denva':
            get_data_for('{}/log/hc/recent'.format(
                config_service.load_cfg()["urls"]['denva'])),
            'enviro':
            get_data_for('{}/log/hc/recent'.format(
                config_service.load_cfg()["urls"]['enviro']))
        }
    }
Example #12
0
def set_delight_status(cfg):
    # 4. DELIGHT
    state = status.Status()
    try:
        delight_data = delight_service.get_system_info()

        cpu_temp = str(delight_data['CPU Temp'])
        if float(dom_utils.get_float_number_from_text(
                cpu_temp)) > cfg['sensor']['cpu_temp_error']:
            logger.warning('status: RED due to very high cpu temp on Delight')
            state.set_error()
        elif float(dom_utils.get_float_number_from_text(
                cpu_temp)) > cfg['sensor']['cpu_temp_warn']:
            logger.warning('status: ORANGE due to high cpu temp on Delight')
            state.set_warn()
        if dom_utils.get_int_number_from_text(
                delight_data['Memory Available']) < 128:
            logger.warning(
                'status: RED due to very low memory available on Delight')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                delight_data['Memory Available']) < 256:
            logger.warning(
                'status: ORANGE due to low memory available on Delight')
            state.set_warn()
        if dom_utils.get_int_number_from_text(
                delight_data['Free Space']) < 128:
            logger.warning('status: RED due to very low free space on Delight')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                delight_data['Free Space']) < 512:
            logger.warning('status: ORANGE due to low free space on Delight')
            state.set_warn()
    except Exception as set_state_exception:
        logger.error(
            'Something went badly wrong\n{}'.format(set_state_exception),
            exc_info=True)
        state.set_error()
    delight_ui_response = local_data_gateway.get_data_for('{}/hc'.format(
        config_service.load_cfg()["urls"]['delight']))
    if not 'error' in delight_ui_response:
        system_health_check_service.update_hc_for('delight', 'ui')
    color_blue, color_green, color_red = delight_utils.get_state_colour(state)
    update_blink(state.state)
    unicornhathd.set_pixel(ui_utils.to_x(13), 1, purple_r, purple_g, purple_b)
    unicornhathd.set_pixel(ui_utils.to_x(15), 1, purple_r, purple_g, purple_b)
    unicornhathd.set_pixel(ui_utils.to_x(13), 2, purple_r, purple_g, purple_b)
    unicornhathd.set_pixel(ui_utils.to_x(15), 2, purple_r, purple_g, purple_b)
    set_status_for_device(13, 13, color_red, color_green, color_blue)
    logger.info('Delight: {}'.format(state.get_status_as_light_colour()))
Example #13
0
def main():
    global report_generation_cooldown
    counter = 0
    while True:
        counter += 1
        time.sleep(5)
        if config_service.load_cfg(
        )['mode'] == 'server' and config_service.is_cctv_camera_on():
            last_picture = webcam_service.capture_picture()
            if last_picture != "":
                pictures.append(last_picture)
                if len(pictures) > 5:
                    pictures.pop(0)
        if counter % 2 == 0:
            local_data_gateway.post_healthcheck_beat('server', 'app')
        information.should_refresh()
        should_send_email()
        report_generation_cooldown = report_service.create_and_store_it_if_needed(
            report_generation_cooldown)
Example #14
0
    def test_get_environment_log_path_for(self):
        # given
        scale_params_list = [
            ('denva', 'app',
             '/home/pi/denva-master/src/configs/log_app_config.json'),
            ('denva', 'ui',
             '/home/pi/denva-master/src/configs/log_ui_config.json'),
            ('dev', 'app',
             'D:\GitHub\denva\src\configs\dev_log_app_config.json'),
            ('dev', 'ui',
             'D:\GitHub\denva\src\configs\dev_log_ui_config.json'),
            ('server', 'app',
             'd:\denva\src\configs\server_log_app_config.json'),
            ('server', 'ui', 'd:\denva\src\configs\server_log_ui_config.json'),
            ('dev', 'ddd',
             'D:\GitHub\denva\src\configs\dev_log_app_config.json'),
            ('ddd', 'ddd',
             'D:\GitHub\denva\src\configs\dev_log_app_config.json'),
            ('overseer_mode', 'overseer_mode',
             'd:\\denva\\src\\configs\\overseer_mode.json'),
            ('overseer', 'overseer', 'd:\\denva\\src\\configs\\overseer.json'),
            ('cctv', 'cctv',
             '/home/pi/denva-master/src/configs/log_cctv_config.json'),
            ('hc', 'hc', '/home/pi/denva-master/src/configs/log_config.json'),
        ]

        for mode, an_input, expected_result in scale_params_list:
            with self.subTest(
                    msg=
                    "Checking to get_environment_log_path_for() for mode {} & app type {} "
                    .format(mode, an_input)):
                # given
                config_service.load_cfg()['mode'] = mode
                # when
                result = config_service.get_environment_log_path_for(an_input)

                # then
                self.assertEqual(expected_result, result)
Example #15
0
def set_mothership_status():
    # 3. MOTHERSHIP SERVER
    state = status.Status()
    server_data = local_data_gateway.get_data_for('{}/system'.format(
        config_service.load_cfg()["urls"]['server']))
    if 'error' in server_data:
        logger.warning('Unable to get Server status due to {}'.format(
            server_data['error']))
        state.set_error()
    else:
        system_health_check_service.update_hc_for('server', 'ui')
        if dom_utils.get_int_number_from_text(
                server_data['Memory Available']) < 384:
            logger.warning(
                'status: RED due to very low memory available on Server')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                server_data['Memory Available']) < 512:
            logger.warning(
                'status: ORANGE due to low memory available on Server')
            state.set_warn()

        if dom_utils.get_int_number_from_text(server_data['Disk Free']) < 256:
            logger.warning(
                'status: RED due to very low disk free space on Server')
            state.set_error()
        elif dom_utils.get_int_number_from_text(
                server_data['Disk Free']) < 1024:
            logger.warning('status: RED due to low disk free space on Server')
            state.set_warn()
    color_red, color_green, color_blue = delight_utils.get_state_colour(state)
    update_blink(state.state)
    unicornhathd.set_pixel(ui_utils.to_x(9), 1, purple_r, purple_g, purple_b)
    unicornhathd.set_pixel(ui_utils.to_x(11), 1, purple_r, purple_g, purple_b)
    unicornhathd.set_pixel(ui_utils.to_x(9), 2, purple_r, purple_g, purple_b)
    set_status_for_device(9, 13, color_red, color_green, color_blue)
    logger.info('Server: {}'.format(state.get_status_as_light_colour()))
def _get_hc_result(service: str):
    hc_result = get_data_for('{}/hc'.format(
        config_service.load_cfg()["urls"][service]))
    if 'error' in hc_result:
        return 'DOWN'
    return 'UP'
Example #17
0
def device_status():
    global cycle
    cycle += 1
    logger.info('Checking devices status... (Cycle: {})'.format(cycle))

    # 1. denva, 2. denviro, 3. server, 4. delight 5. radar
    unicornhathd.rotation(270)

    delight_display.reset_screen()
    cfg = config_service.load_cfg()

    set_denva_status(cfg)
    set_denviro_status(cfg)
    set_mothership_status()
    set_delight_status(cfg)

    system_health_status = system_health_check_service.get_system_healthcheck()

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['denva']['app'])
    set_status_for_device(1, 7, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['denva']['ui'])
    set_status_for_device(1, 10, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['denviro']['app'])
    set_status_for_device(5, 7, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['denviro']['ui'])
    set_status_for_device(5, 10, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['server']['app'])
    set_status_for_device(9, 7, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['server']['ui'])
    set_status_for_device(9, 10, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['delight']['app'])
    set_status_for_device(13, 7, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['delight']['ui'])
    set_status_for_device(13, 10, color_red, color_green, color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['other']['cctv'])
    unicornhathd.set_pixel(ui_utils.to_x(1), 4, color_red, color_green,
                           color_blue)
    unicornhathd.set_pixel(ui_utils.to_x(2), 4, color_red, color_green,
                           color_blue)
    unicornhathd.set_pixel(ui_utils.to_x(3), 4, color_red, color_green,
                           color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['other']['digest'])
    unicornhathd.set_pixel(ui_utils.to_x(13), 6, color_red, color_green,
                           color_blue)
    unicornhathd.set_pixel(ui_utils.to_x(14), 6, color_red, color_green,
                           color_blue)
    unicornhathd.set_pixel(ui_utils.to_x(15), 6, color_red, color_green,
                           color_blue)

    color_red, color_green, color_blue = delight_utils.get_state_colour_for_hc(
        system_health_status['other']['radar'])
    unicornhathd.set_pixel(ui_utils.to_x(1), 6, color_red, color_green,
                           color_blue)
    unicornhathd.set_pixel(ui_utils.to_x(2), 6, color_red, color_green,
                           color_blue)
    unicornhathd.set_pixel(ui_utils.to_x(3), 6, color_red, color_green,
                           color_blue)

    if is_night_mode():
        unicornhathd.brightness(0.1)
        unicornhathd.show()
        time.sleep(15)
    else:
        if blink:
            ui_utils.perform_blink_animation(unicornhathd)
        else:
            unicornhathd.brightness(
                config_service.get_default_brightness_for_delight_display())
            unicornhathd.show()
            time.sleep(30)

    unicornhathd.rotation(180)
def get_yesterday_report_for_aircraft():
    return get_data_for('{}/flights/yesterday'.format(
        config_service.load_cfg()["urls"]['delight']))
def get_current_reading_for_enviro() -> dict:
    return get_data_for('{}/now'.format(
        config_service.load_cfg()["urls"]['enviro']))
def get_yesterday_report_for_enviro() -> dict:
    return get_data_for(
        '{}/report/yesterday'.format(
            config_service.load_cfg()["urls"]['enviro']), REPORT_TIMEOUT)
* IT BLOG:	https://dominiksymonowicz.blogspot.co.uk
* Github:	https://github.com/pastorcmentarny
* Google Play:	https://play.google.com/store/apps/developer?id=Dominik+Symonowicz
* LinkedIn: https://www.linkedin.com/in/dominik-symonowicz
"""
import logging
import re

import config_service
from common import commands, dom_utils, get_description_for, data_files, loggy
from denva import denva_sensors_service
from denviro import denviro_sensors_service

warnings_logger = logging.getLogger('warnings')

shaking_level = config_service.load_cfg()['sensors']['motion']['sensitivity']

config = config_service.load_cfg()


def get_warnings_for(year: str, month: str, day: str) -> list:
    date = dom_utils.get_filename_for_warnings(year, month, day)
    return data_files.load_warnings('/home/pi/logs/' + date)


def get_warnings_for_today() -> list:
    return data_files.load_warnings('/home/pi/logs/warnings.log')


def get_current_warnings() -> dict:
    data = denva_sensors_service.get_last_measurement()
Example #22
0
def get_warnings(data) -> dict:
    warnings = {}
    if type(data['temp']) is not float:
        data['temp'] = float(data['temp'])
    if data['temp'] < 16:
        warnings[
            'temp'] = 'Temperature is too low [tle]. Current temperature is: {}'.format(
                str(data['temp']))
    elif data['temp'] < 18:
        warnings[
            'temp'] = 'Temperature is low [tlw]. Current temperature is: {}'.format(
                str(data['temp']))
    elif data['temp'] > 25:
        warnings[
            'temp'] = 'Temperature is high [thw]. Current temperature is: {}'.format(
                str(data['temp']))
    elif data['temp'] > 30:
        warnings[
            'temp'] = 'Temperature is too high  [the]. Current temperature is: {}'.format(
                str(data['temp']))

    data['humidity'] = float(data['humidity'])

    if data['humidity'] < 30:
        warnings[
            'humidity'] = 'Humidity is too low [hle]. Current humidity is: {}'.format(
                str(data['humidity']))
    elif data['humidity'] < 40:
        warnings[
            'humidity'] = 'Humidity is low [hlw]. Current humidity is: {}'.format(
                str(data['humidity']))
    elif data['humidity'] > 60:
        warnings[
            'humidity'] = 'Humidity is high [hhw]. Current humidity is: {}'.format(
                str(data['humidity']))
    elif data['humidity'] > 70:
        warnings[
            'humidity'] = 'Humidity is too high [hhe]. Current humidity is: {}'.format(
                str(data['humidity']))

    data['uva_index'] = float(data['uva_index'])

    if data['uva_index'] > 6:
        warnings[
            'uva_index'] = 'UV A is too high [uvae]. Current UV A is: {}'.format(
                str(data['uva_index']))

    data['uvb_index'] = float(data['uvb_index'])

    if data['uvb_index'] > 6:
        warnings[
            'uvb_index'] = 'UV B is too high [uvbe]. Current UV B is: {}'.format(
                str(data['uvb_index']))

    data['cpu_temp'] = float(re.sub('[^0-9.]', '', data['cpu_temp']))

    sensor_config_data = config.load_cfg()

    if data['cpu_temp'] > sensor_config_data['sensor']['cpu_temp_fatal']:
        warnings[
            'cpu_temp'] = 'CPU temperature is too high [cthf]. Current temperature is: {}'.format(
                str(data['cpu_temp']))
    elif data['cpu_temp'] > sensor_config_data['sensor']['cpu_temp_error']:
        warnings[
            'cpu_temp'] = 'CPU temperature is very high [cthe]. Current temperature is: {}'.format(
                str(data['cpu_temp']))
    elif data['cpu_temp'] > sensor_config_data['sensor']['cpu_temp_warn']:
        warnings[
            'cpu_temp'] = 'CPU temperature is high [cthw]. Current temperature is: {}'.format(
                str(data['cpu_temp']))

    data['motion'] = float(data['motion'])

    if data['motion'] > 1000:
        warnings['motion'] = 'Dom is shaking his legs [slw]. Value: {}'.format(
            str(data['motion']))

    if int(commands.get_space_available()) < 500:
        warnings['free_space'] = 'Low Free Space: {}'.format(
            commands.get_space_available() + 'MB')

    if int(data['eco2']) > 1000:
        warnings['eco2'] = 'High CO2 level: {}'.format(data['eco2'])

    if int(data['tvoc']) > 5000:
        warnings['tvoc'] = 'Air Quality BAD: {}'.format(data['tvoc'])
    elif int(data['tvoc']) > 1500:
        warnings['tvoc'] = 'Air Quality POOR: {}'.format(data['tvoc'])
    loggy.log_error_count(warnings)
    return warnings
def get_current_reading_for_aircraft():
    return get_data_for('{}/flights/today'.format(
        config_service.load_cfg()["urls"]['delight']))