Exemple #1
0
    def _credential_init(self):
        logger.info('Bootstrapping credentials')

        # credential bootstrap
        self.global_configuration['system_user_auth'] = (None, None)

        if self.require_system_user:
            gotauth = False
            max_retries = 60
            for count in range(1, max_retries):
                if gotauth:
                    continue
                try:
                    with session_scope() as dbsession:
                        self.global_configuration['system_user_auth'] = get_system_user_auth(session=dbsession)
                    if self.global_configuration['system_user_auth'] != (None, None):
                        gotauth = True
                    else:
                        logger.error('cannot get system user auth credentials yet, retrying (' + str(count) + ' / ' + str(max_retries) + ')')
                        time.sleep(5)
                except Exception as err:
                    logger.error(
                        'cannot get system-user auth credentials - service may not have system level access')
                    self.global_configuration['system_user_auth'] = (None, None)

            if not gotauth:
                raise Exception('service requires system user auth to start')

        logger.info('Credential initialization complete')
Exemple #2
0
    def run_feeds_update(cls, json_obj=None, force_flush=False):
        """
        Creates a task and runs it, optionally with a thread if locking is enabled.

        :return:
        """
        error = None
        feeds = None

        try:
            system_user = get_system_user_auth()
            feeds = get_selected_feeds_to_sync(localconfig.get_config())
            if json_obj:
                task = cls.from_json(json_obj)
                if not task:
                    return None
                task.feeds = feeds
            else:
                task = FeedsUpdateTask(feeds_to_sync=feeds, flush=force_flush)

            # Create feed task begin event
            try:
                catalog.add_event(system_user, FeedSyncStart(groups=feeds if feeds else 'all'))
            except:
                log.exception('Ignoring event generation error before feed sync')

            result = []
            if cls.locking_enabled:
                # system_user = get_system_user_auth()
                run_target_with_lease(user_auth=system_user, lease_id='feed_sync', ttl=90, target=lambda: result.append(task.execute()))
                # A bit of work-around for the lambda def to get result from thread execution
                if result:
                    result = result[0]
            else:
                result = task.execute()

            return result
        except LeaseAcquisitionFailedError as ex:
            error = ex
            log.exception('Could not acquire lock on feed sync, likely another sync already in progress')
            raise Exception('Cannot execute feed sync, lock is held by another feed sync in progress')
        except Exception as e:
            error = e
            log.exception('Error executing feeds update')
            raise e
        finally:
            # log feed sync event
            try:
                if error:
                    catalog.add_event(system_user, FeedSyncFail(groups=feeds if feeds else 'all', error=error))
                else:
                    catalog.add_event(system_user, FeedSyncComplete(groups=feeds if feeds else 'all'))
            except:
                log.exception('Ignoring event generation error after feed sync')
Exemple #3
0
    def run_feeds_update(cls, json_obj=None, force_flush=False):
        """
        Creates a task and runs it, optionally with a thread if locking is enabled.

        :return:
        """

        try:
            feeds = get_selected_feeds_to_sync(localconfig.get_config())
            if json_obj:
                task = cls.from_json(json_obj)
                if not task:
                    return None
                task.feeds = feeds
            else:
                task = FeedsUpdateTask(feeds_to_sync=feeds, flush=force_flush)

            result = []
            if cls.locking_enabled:
                system_user = get_system_user_auth()
                run_target_with_lease(
                    user_auth=system_user,
                    lease_id='feed_sync',
                    ttl=90,
                    target=lambda: result.append(task.execute()))
                # A bit of work-around for the lambda def to get result from thread execution
                if result:
                    result = result[0]
            else:
                result = task.execute()

            return result
        except LeaseAcquisitionFailedError as ex:
            log.exception(
                'Could not acquire lock on feed sync, likely another sync already in progress'
            )
            raise Exception(
                'Cannot execute feed sync, lock is held by another feed sync in progress'
            )
        except Exception as e:
            log.exception('Error executing feeds update')
            raise e