示例#1
0
def is_up_to_date():
    """
    Primitive update check. Checks local hash against GitHub hash for branch.
    Returns True if the player is up to date.
    """

    latest_sha, retrieved_update = fetch_remote_hash()
    git_branch = get_git_branch()
    git_hash = get_git_hash()
    git_short_hash = get_git_short_hash()
    get_device_id = r.get('device_id')

    if not latest_sha:
        logging.error('Unable to get latest version from GitHub')
        return True

    if not get_device_id:
        device_id = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for _ in range(15))
        r.set('device_id', device_id)
    else:
        device_id = get_device_id

    if retrieved_update:
        if not settings['analytics_opt_out'] and not is_ci():
            mp = Mixpanel('d18d9143e39ffdb2a4ee9dcc5ed16c56')
            try:
                mp.track(
                    device_id, 'Version', {
                        'Branch':
                        str(git_branch),
                        'Hash':
                        str(git_short_hash),
                        'NOOBS':
                        os.path.isfile('/boot/os_config.json'),
                        'Balena':
                        is_balena_app(),
                        'Docker':
                        is_docker(),
                        'Pi_Version':
                        lookup_raspberry_pi_revision(
                            parse_cpu_info()['revision'])['model']
                    })
            except MixpanelException:
                pass
            except AttributeError:
                pass

    return latest_sha == git_hash
示例#2
0
def system_info():
    viewlog = None
    try:
        viewlog = [
            line.decode('utf-8') for line in check_output([
                'sudo', 'systemctl', 'status', 'screenly-viewer.service', '-n',
                '20'
            ]).split('\n')
        ]
    except:
        pass

    loadavg = diagnostics.get_load_avg()['15 min']

    display_info = diagnostics.get_monitor_status()

    display_power = diagnostics.get_display_power()

    # Calculate disk space
    slash = statvfs("/")
    free_space = size(slash.f_bavail * slash.f_frsize)

    # Get uptime
    uptime_in_seconds = diagnostics.get_uptime()
    system_uptime = timedelta(seconds=uptime_in_seconds)

    # Player name for title
    player_name = settings['player_name']

    raspberry_model = '%s Revision: %s Ram: %s %s' % (
        diagnostics.get_raspberry_model(),
        diagnostics.get_raspberry_revision(), diagnostics.get_raspberry_ram(),
        diagnostics.get_raspberry_manufacturer())

    branch = 'development' if diagnostics.get_git_branch(
    ) == 'master' else diagnostics.get_git_branch()
    screenly_version = '%s@%s' % (branch, diagnostics.get_git_short_hash())

    return template('system-info.html',
                    player_name=player_name,
                    viewlog=viewlog,
                    loadavg=loadavg,
                    free_space=free_space,
                    uptime=system_uptime,
                    display_info=display_info,
                    display_power=display_power,
                    raspberry_model=raspberry_model,
                    screenly_version=screenly_version,
                    mac_address=get_node_mac_address())
示例#3
0
def system_info():
    viewlog = None
    try:
        viewlog = [line.decode('utf-8') for line in
                   check_output(['sudo', 'systemctl', 'status', 'screenly-viewer.service', '-n', '20']).split('\n')]
    except:
        pass

    loadavg = diagnostics.get_load_avg()['15 min']

    display_info = diagnostics.get_monitor_status()

    display_power = diagnostics.get_display_power()

    # Calculate disk space
    slash = statvfs("/")
    free_space = size(slash.f_bavail * slash.f_frsize)

    # Get uptime
    uptime_in_seconds = diagnostics.get_uptime()
    system_uptime = timedelta(seconds=uptime_in_seconds)

    # Player name for title
    player_name = settings['player_name']

    raspberry_model = '%s Revision: %s Ram: %s %s' % (diagnostics.get_raspberry_model(),
                                                      diagnostics.get_raspberry_revision(),
                                                      diagnostics.get_raspberry_ram(),
                                                      diagnostics.get_raspberry_manufacturer())

    branch = 'development' if diagnostics.get_git_branch() == 'master' else diagnostics.get_git_branch()
    screenly_version = '%s@%s' % (branch, diagnostics.get_git_short_hash())

    return template(
        'system_info.html',
        player_name=player_name,
        viewlog=viewlog,
        loadavg=loadavg,
        free_space=free_space,
        uptime=system_uptime,
        display_info=display_info,
        display_power=display_power,
        raspberry_model=raspberry_model,
        screenly_version=screenly_version,
        mac_address=get_node_mac_address()
    )
示例#4
0
def check_update():
    """
    Check if there is a later version of Screenly OSE
    available. Only do this update once per day.
    Return True if up to date was written to disk,
    False if no update needed and None if unable to check.
    """

    sha_file = path.join(settings.get_configdir(), 'latest_screenly_sha')
    device_id_file = path.join(settings.get_configdir(), 'device_id')

    if path.isfile(sha_file):
        sha_file_mtime = path.getmtime(sha_file)
        last_update = datetime.fromtimestamp(sha_file_mtime)
    else:
        last_update = None

    if not path.isfile(device_id_file):
        device_id = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(15))
        with open(device_id_file, 'w') as f:
            f.write(device_id)
    else:
        with open(device_id_file, 'r') as f:
            device_id = f.read()

    logging.debug('Last update: %s' % str(last_update))

    git_branch = get_git_branch()
    git_hash = get_git_short_hash()

    if last_update is None or last_update < (datetime.now() - timedelta(days=1)):

        if not settings['analytics_opt_out'] and not is_ci():
            mp = Mixpanel('d18d9143e39ffdb2a4ee9dcc5ed16c56')
            try:
                mp.track(device_id, 'Version', {
                    'Branch': str(git_branch),
                    'Hash': str(git_hash),
                    'NOOBS': path.isfile('/boot/os_config.json'),
                    'Balena': is_balena_app()
                })
            except MixpanelException:
                pass
            except AttributeError:
                pass

        if remote_branch_available(git_branch):
            latest_sha = fetch_remote_hash(git_branch)

            if latest_sha:
                with open(sha_file, 'w') as f:
                    f.write(latest_sha)
                return True
            else:
                logging.debug('Unable to fetch latest hash.')
                return
        else:
            touch(sha_file)
            logging.debug('Unable to check if branch exist. Checking again tomorrow.')
            return
    else:
        return False