def push_sync_task(system_user):
    all_ready = anchore_engine.clients.services.common.check_services_ready(
        ['simplequeue'])

    if not all_ready:
        logger.info("simplequeue service not yet ready, will retry")
        raise Exception("Simplequeue service not yet ready")
    else:
        q_client = SimpleQueueClient(user=system_user[0],
                                     password=system_user[1])
        if not q_client.is_inqueue(name=feed_sync_queuename,
                                   inobj=feed_sync_msg):
            try:
                q_client.enqueue(name=feed_sync_queuename, inobj=feed_sync_msg)
            except:
                logger.error('Could not enqueue message for a feed sync')
                raise
示例#2
0
def handle_feed_sync_trigger(*args, **kwargs):
    """
    Checks to see if there is a task for a feed sync in the queue and if not, adds one.
    Interval for firing this should be longer than the expected feed sync duration.

    :param args:
    :param kwargs:
    :return:
    """
    system_user = _system_creds()

    logger.info('init args: {}'.format(kwargs))
    cycle_time = kwargs['mythread']['cycle_timer']

    while True:
        config = localconfig.get_config()
        feed_sync_enabled = config.get('feeds', {}).get('sync_enabled', True)
        if feed_sync_enabled:
            try:
                all_ready = anchore_engine.clients.services.common.check_services_ready(['simplequeue'])

                if not all_ready:
                    logger.info("simplequeue service not yet ready, will retry")
                else:
                    logger.info('Feed Sync Trigger activated')
                    q_client = SimpleQueueClient(user=system_user[0], password=system_user[1])
                    if not q_client.is_inqueue(name=feed_sync_queuename, inobj=feed_sync_msg):
                        try:
                            q_client.enqueue(name=feed_sync_queuename, inobj=feed_sync_msg)
                        except:
                            logger.exception('Could not enqueue message for a feed sync')
                    logger.info('Feed Sync Trigger done, waiting for next cycle.')
            except Exception as e:
                logger.exception('Error caught in feed sync trigger handler. Will continue. Exception: {}'.format(e))
        else:
            logger.debug("sync_enabled is set to false in config - skipping feed sync trigger")

        time.sleep(cycle_time)

    return True
示例#3
0
def queue_notification(userId, subscription_key, subscription_type, payload):

    localconfig = anchore_engine.configuration.localconfig.get_config()
    system_user_auth = localconfig['system_user_auth']
    q_client = SimpleQueueClient(user=system_user_auth[0],
                                 password=system_user_auth[1])
    rc = False
    try:
        nobj = {
            'userId': userId,
            'subscription_key': subscription_key,
            'notificationId': str(uuid.uuid4()),
        }
        if payload:
            nobj.update(payload)
        if not q_client.is_inqueue(subscription_type, nobj):
            rc = q_client.enqueue(subscription_type, nobj)
    except Exception as err:
        logger.warn("failed to create/enqueue notification")
        raise err

    return (rc)
示例#4
0
def handle_feed_sync_trigger(*args, **kwargs):
    """
    Checks to see if there is a task for a feed sync in the queue and if not, adds one.
    Interval for firing this should be longer than the expected feed sync duration.

    :param args:
    :param kwargs:
    :return:
    """
    system_user = _system_creds()

    logger.info('init args: {}'.format(kwargs))
    cycle_time = kwargs['mythread']['cycle_timer']

    retries = int(os.getenv('ANCHORE_FEED_SYNC_CHECK_RETRIES', 5))
    backoff_time = int(os.getenv('ANCHORE_FEED_SYNC_CHECK_FAILURE_BACKOFF', 5))

    while True:
        config = localconfig.get_config()
        feed_sync_enabled = config.get('feeds', {}).get('sync_enabled', True)
        if feed_sync_enabled:
            sleep_time = backoff_time
            for i in range(retries):
                try:
                    all_ready = anchore_engine.clients.services.common.check_services_ready(
                        ['simplequeue'])

                    if not all_ready:
                        logger.info(
                            "simplequeue service not yet ready, will retry")
                    else:
                        logger.info('Feed Sync Trigger activated')
                        q_client = SimpleQueueClient(user=system_user[0],
                                                     password=system_user[1])
                        if not q_client.is_inqueue(name=feed_sync_queuename,
                                                   inobj=feed_sync_msg):
                            try:
                                q_client.enqueue(name=feed_sync_queuename,
                                                 inobj=feed_sync_msg)
                            except:
                                logger.error(
                                    'Could not enqueue message for a feed sync'
                                )
                                raise

                        logger.info(
                            'Feed Sync Trigger done, waiting for next cycle.')
                        break
                except Exception as e:
                    logger.exception(
                        'Error caught in feed sync trigger handler. Will backoff {} seconds and retry. Attempt {}. Exception: {}'
                        .format(sleep_time, i, e))

                time.sleep(sleep_time)
                sleep_time += backoff_time
            else:
                logger.info(
                    'Exceeded max retries {} to check feed sync queue. Will wait until next duty cycle'
                    .format(retries))

        else:
            logger.debug(
                "sync_enabled is set to false in config - skipping feed sync trigger"
            )

        time.sleep(cycle_time)

    return True