Example #1
0
def main():
    # init conf and logging
    conf = cfg.CONF
    conf.register_cli_opts(config.OPTS)
    conf.register_opts(config.OPTS)
    logging.register_options(conf)
    logging.set_defaults()

    conf(project='driverlog')

    logging.setup(conf, 'driverlog')
    LOG.info('Logging enabled')
    conf.log_opt_values(LOG, logging.DEBUG)

    MEMCACHED_URI_PREFIX = r'^memcached:\/\/'
    stripped = re.sub(MEMCACHED_URI_PREFIX, '', cfg.CONF.runtime_storage_uri)
    if not stripped:
        exit(1)

    memcached_uri = stripped.split(',')
    memcached_inst = memcache.Client(memcached_uri)

    default_data = utils.read_json_from_uri(cfg.CONF.default_data_uri)
    if not default_data:
        LOG.critical('Unable to load default data')
        return not 0

    process(memcached_inst, default_data, cfg.CONF.force_update)
Example #2
0
def main():
    # init conf and logging
    conf = cfg.CONF
    conf.register_cli_opts(config.OPTS)
    conf.register_opts(config.OPTS)
    conf()

    logging.setup('driverlog')
    LOG.info('Logging enabled')

    MEMCACHED_URI_PREFIX = r'^memcached:\/\/'
    stripped = re.sub(MEMCACHED_URI_PREFIX, '', cfg.CONF.runtime_storage_uri)
    if not stripped:
        exit(1)

    memcached_uri = stripped.split(',')
    memcached = memcache.Client(memcached_uri)

    default_data = utils.read_json_from_uri(cfg.CONF.default_data_uri)
    if not default_data:
        LOG.critical('Unable to load default data')
        return not 0

    ci_ids_map = {}
    for driver in default_data['drivers']:
        vendor = driver['vendor']
        driver_name = driver['name']
        for os_version in driver['os_versions']:
            if os_version['verification'] == 'external_ci_verification':
                ci_id = os_version['ci_id']
                ci_ids_map[ci_id] = (vendor, driver_name)

    persisted_data = {}
    if not cfg.CONF.force_update:
        persisted_data = memcached.get('driverlog:update') or {}

    for record in update_generator(memcached,
                                   default_data,
                                   ci_ids_map,
                                   force_update=cfg.CONF.force_update):
        LOG.info('Got new record from Gerrit: %s', record)

        key = record.keys()[0]
        if key not in persisted_data:
            persisted_data.update(record)
        else:
            persisted_os_versions = persisted_data[key]['os_versions_map']
            for os_version, info in record[key]['os_versions_map'].iteritems():
                if os_version not in persisted_os_versions:
                    persisted_os_versions[os_version] = info
                else:
                    persisted_os_versions[os_version].update(info)

    memcached.set('driverlog:update', persisted_data)
Example #3
0
def main():
    # init conf and logging
    conf = cfg.CONF
    conf.register_cli_opts(config.OPTS)
    conf.register_opts(config.OPTS)
    conf()

    logging.setup('driverlog')
    LOG.info('Logging enabled')

    MEMCACHED_URI_PREFIX = r'^memcached:\/\/'
    stripped = re.sub(MEMCACHED_URI_PREFIX, '', cfg.CONF.runtime_storage_uri)
    if not stripped:
        exit(1)

    memcached_uri = stripped.split(',')
    memcached = memcache.Client(memcached_uri)

    default_data = utils.read_json_from_uri(cfg.CONF.default_data_uri)
    if not default_data:
        LOG.critical('Unable to load default data')
        return not 0

    ci_ids_map = {}
    for driver in default_data['drivers']:
        vendor = driver['vendor']
        driver_name = driver['name']
        for os_version in driver['os_versions']:
            if os_version['verification'] == 'external_ci_verification':
                ci_id = os_version['ci_id']
                ci_ids_map[ci_id] = (vendor, driver_name)

    persisted_data = {}
    if not cfg.CONF.force_update:
        persisted_data = memcached.get('driverlog:update') or {}

    for record in update_generator(memcached, default_data, ci_ids_map,
                                   force_update=cfg.CONF.force_update):
        LOG.info('Got new record from Gerrit: %s', record)

        key = record.keys()[0]
        if key not in persisted_data:
            persisted_data.update(record)
        else:
            persisted_os_versions = persisted_data[key]['os_versions_map']
            for os_version, info in record[key]['os_versions_map'].iteritems():
                if os_version not in persisted_os_versions:
                    persisted_os_versions[os_version] = info
                else:
                    persisted_os_versions[os_version].update(info)

    memcached.set('driverlog:update', persisted_data)
Example #4
0
def main():
    # init conf and logging
    conf = cfg.CONF
    conf.register_cli_opts(config.OPTS)
    conf.register_opts(config.OPTS)
    conf()

    logging.setup('driverlog')
    LOG.info('Logging enabled')

    MEMCACHED_URI_PREFIX = r'^memcached:\/\/'
    stripped = re.sub(MEMCACHED_URI_PREFIX, '', cfg.CONF.runtime_storage_uri)
    if not stripped:
        exit(1)

    memcached_uri = stripped.split(',')
    memcache_inst = memcache.Client(memcached_uri)

    default_data = utils.read_json_from_uri(cfg.CONF.default_data_uri)
    if not default_data:
        LOG.critical('Unable to load default data')
        return not 0

    ci_ids_map = collections.defaultdict(set)
    for driver in default_data['drivers']:
        vendor = driver['vendor']
        driver_name = driver['name']
        if 'ci_id' in driver:
            ci_id = driver['ci_id']
            ci_ids_map[ci_id].add((vendor, driver_name))

        driver['os_versions_map'] = {}
        if 'releases' in driver:
            for release in driver['releases']:
                driver['os_versions_map'][release] = {
                    'success': True,
                    'comment': 'self-tested verification'
                }

    update = {}
    if not cfg.CONF.force_update:
        update = memcache_inst.get('driverlog:update') or {}

    has_update = False

    for record in update_generator(memcache_inst,
                                   default_data,
                                   ci_ids_map,
                                   force_update=cfg.CONF.force_update):
        LOG.info('Got new record from Gerrit: %s', record)
        has_update = True

        key = record.keys()[0]
        if key not in update:
            update.update(record)
        else:
            os_version = record[key]['os_versions_map'].keys()[0]
            info = record[key]['os_versions_map'].values()[0]
            if os_version in update[key]['os_versions_map']:
                update[key]['os_versions_map'][os_version].update(info)
            else:
                update[key]['os_versions_map'][os_version] = info

    memcache_inst.set('driverlog:default_data', default_data)
    memcache_inst.set('driverlog:update', update)

    old_dd_hash = memcache_inst.get('driverlog:default_data_hash')
    new_dd_hash = _get_hash(default_data)
    memcache_inst.set('driverlog:default_data_hash', new_dd_hash)

    if has_update or old_dd_hash != new_dd_hash:
        memcache_inst.set('driverlog:update_hash', time.time())
Example #5
0
def get_vault():
    vault = getattr(flask.current_app, 'driverlog_vault', None)
    if not vault:
        try:
            vault = {}
            vault['memory_storage'] = memory_storage.get_memory_storage(
                memory_storage.MEMORY_STORAGE_CACHED)

            if 'CONF' not in flask.current_app.config:
                LOG.critical('Configure environment variable DRIVERLOG_CONF '
                             'with path to config file')
                flask.abort(500)

            conf = flask.current_app.config['CONF']
            dd_uri = conf.default_data_uri
            vault['default_data'] = utils.read_json_from_uri(dd_uri)

            if not vault['default_data']:
                LOG.critical('Default data config file "%s" is not found',
                             dd_uri)
                flask.abort(500)

            levels_map = _build_levels_map()
            vault['levels_map'] = levels_map

            projects_map = _build_projects_map(vault['default_data'])
            vault['projects_map'] = projects_map

            drivers_map = _build_drivers_map(vault['default_data'], levels_map,
                                             projects_map)
            vault['drivers_map'] = drivers_map

            MEMCACHED_URI_PREFIX = r'^memcached:\/\/'
            stripped = re.sub(MEMCACHED_URI_PREFIX, '',
                              conf.runtime_storage_uri)

            memcached_uri = stripped.split(',')
            memcached = memcache.Client(memcached_uri)
            vault['memcached'] = memcached

            flask.current_app.driverlog_vault = vault
        except Exception as e:
            LOG.critical('Failed to initialize application: %s', e)
            LOG.exception(e)
            flask.abort(500)

    if not getattr(flask.request, 'driverlog_updated', None):
        flask.request.driverlog_updated = True

        memcached = vault['memcached']
        update = memcached.get('driverlog:update')
        if update:
            levels_map = vault['levels_map']

            for proj_vendor_driver, os_versions_map in update.iteritems():
                ovm = os_versions_map['os_versions_map']

                if proj_vendor_driver not in vault['drivers_map']:
                    vault['drivers_map'][proj_vendor_driver] = os_versions_map
                else:
                    for os_version, info in ovm.iteritems():
                        level = levels_map[info['verification']]
                        info['verification_name'] = level['level_name']
                        info['level'] = level['level']

                    vault['drivers_map'][proj_vendor_driver][
                        'os_versions_map'].update(ovm)

    return vault
Example #6
0
def main():
    # init conf and logging
    conf = cfg.CONF
    conf.register_cli_opts(config.OPTS)
    conf.register_opts(config.OPTS)
    conf()

    logging.setup('driverlog')
    LOG.info('Logging enabled')

    MEMCACHED_URI_PREFIX = r'^memcached:\/\/'
    stripped = re.sub(MEMCACHED_URI_PREFIX, '', cfg.CONF.runtime_storage_uri)
    if not stripped:
        exit(1)

    memcached_uri = stripped.split(',')
    memcache_inst = memcache.Client(memcached_uri)

    default_data = utils.read_json_from_uri(cfg.CONF.default_data_uri)
    if not default_data:
        LOG.critical('Unable to load default data')
        return not 0

    ci_ids_map = collections.defaultdict(set)
    for driver in default_data['drivers']:
        vendor = driver['vendor']
        driver_name = driver['name']
        if 'ci_id' in driver:
            ci_id = driver['ci_id']
            ci_ids_map[ci_id].add((vendor, driver_name))

        driver['os_versions_map'] = {}
        if 'releases' in driver:
            for release in driver['releases']:
                driver['os_versions_map'][release] = {
                    'success': True,
                    'comment': 'self-tested verification'
                }

    update = {}
    if not cfg.CONF.force_update:
        update = memcache_inst.get('driverlog:update') or {}

    has_update = False

    for record in update_generator(memcache_inst, default_data, ci_ids_map,
                                   force_update=cfg.CONF.force_update):
        LOG.info('Got new record from Gerrit: %s', record)
        has_update = True

        key = record.keys()[0]
        if key not in update:
            update.update(record)
        else:
            os_version = record[key]['os_versions_map'].keys()[0]
            info = record[key]['os_versions_map'].values()[0]
            if os_version in update[key]['os_versions_map']:
                update[key]['os_versions_map'][os_version].update(info)
            else:
                update[key]['os_versions_map'][os_version] = info

    memcache_inst.set('driverlog:default_data', default_data)
    memcache_inst.set('driverlog:update', update)

    old_dd_hash = memcache_inst.get('driverlog:default_data_hash')
    new_dd_hash = _get_hash(default_data)
    memcache_inst.set('driverlog:default_data_hash', new_dd_hash)

    if has_update or old_dd_hash != new_dd_hash:
        memcache_inst.set('driverlog:update_hash', time.time())