示例#1
0
文件: enforcer.py 项目: E-LLP/st2
    def enforce(self):
        rule_spec = {'ref': self.rule.ref, 'id': str(self.rule.id), 'uid': self.rule.uid}
        enforcement_db = RuleEnforcementDB(trigger_instance_id=str(self.trigger_instance.id),
                                           rule=rule_spec)
        extra = {
            'trigger_instance_db': self.trigger_instance,
            'rule_db': self.rule
        }
        execution_db = None
        try:
            execution_db = self._do_enforce()
            # pylint: disable=no-member
            enforcement_db.execution_id = str(execution_db.id)
            extra['execution_db'] = execution_db
        except Exception as e:
            # Record the failure reason in the RuleEnforcement.
            enforcement_db.failure_reason = e.message
            LOG.exception('Failed kicking off execution for rule %s.', self.rule, extra=extra)
        finally:
            self._update_enforcement(enforcement_db)

        # pylint: disable=no-member
        if not execution_db or execution_db.status not in EXEC_KICKED_OFF_STATES:
            LOG.audit('Rule enforcement failed. Execution of Action %s failed. '
                      'TriggerInstance: %s and Rule: %s',
                      self.rule.action.ref, self.trigger_instance, self.rule,
                      extra=extra)
        else:
            LOG.audit('Rule enforced. Execution %s, TriggerInstance %s and Rule %s.',
                      execution_db, self.trigger_instance, self.rule, extra=extra)

        return execution_db
示例#2
0
    def enforce(self):
        rule_spec = {'ref': self.rule.ref, 'id': str(self.rule.id), 'uid': self.rule.uid}
        enforcement_db = RuleEnforcementDB(trigger_instance_id=str(self.trigger_instance.id),
                                           rule=rule_spec)
        extra = {
            'trigger_instance_db': self.trigger_instance,
            'rule_db': self.rule
        }
        execution_db = None
        try:
            execution_db = self._do_enforce()
            # pylint: disable=no-member
            enforcement_db.execution_id = str(execution_db.id)
            enforcement_db.status = RULE_ENFORCEMENT_STATUS_SUCCEEDED
            extra['execution_db'] = execution_db
        except Exception as e:
            # Record the failure reason in the RuleEnforcement.
            enforcement_db.status = RULE_ENFORCEMENT_STATUS_FAILED
            enforcement_db.failure_reason = six.text_type(e)
            LOG.exception('Failed kicking off execution for rule %s.', self.rule, extra=extra)
        finally:
            self._update_enforcement(enforcement_db)

        # pylint: disable=no-member
        if not execution_db or execution_db.status not in EXEC_KICKED_OFF_STATES:
            LOG.audit('Rule enforcement failed. Execution of Action %s failed. '
                      'TriggerInstance: %s and Rule: %s',
                      self.rule.action.ref, self.trigger_instance, self.rule,
                      extra=extra)
        else:
            LOG.audit('Rule enforced. Execution %s, TriggerInstance %s and Rule %s.',
                      execution_db, self.trigger_instance, self.rule, extra=extra)

        return execution_db
示例#3
0
    def enforce(self):
        # TODO: Refactor this to avoid additional lookup in cast_params
        # TODO: rename self.rule.action -> self.rule.action_exec_spec
        action_ref = self.rule.action['ref']
        action_db = action_db_util.get_action_by_ref(action_ref)
        if not action_db:
            raise ValueError('Action "%s" doesn\'t exist' % (action_ref))

        data = self.data_transformer(self.rule.action.parameters)
        LOG.info('Invoking action %s for trigger_instance %s with data %s.',
                 self.rule.action.ref, self.trigger_instance.id,
                 json.dumps(data))

        # update trace before invoking the action.
        trace_context = self._update_trace()
        LOG.debug('Updated trace %s with rule %s.', trace_context, self.rule.id)

        context = {
            'trigger_instance': reference.get_ref_from_model(self.trigger_instance),
            'rule': reference.get_ref_from_model(self.rule),
            'user': get_system_username(),
            TRACE_CONTEXT: trace_context
        }

        extra = {'trigger_instance_db': self.trigger_instance, 'rule_db': self.rule}
        rule_spec = {'ref': self.rule.ref, 'id': str(self.rule.id), 'uid': self.rule.uid}
        enforcement_db = RuleEnforcementDB(trigger_instance_id=str(self.trigger_instance.id),
                                           rule=rule_spec)
        try:
            execution_db = RuleEnforcer._invoke_action(self.rule.action, data, context)
            # pylint: disable=no-member
            enforcement_db.execution_id = str(execution_db.id)
            # pylint: enable=no-member
        except:
            LOG.exception('Failed kicking off execution for rule %s.', self.rule, extra=extra)
            return None
        finally:
            self._update_enforcement(enforcement_db)

        extra['execution_db'] = execution_db
        # pylint: disable=no-member
        if execution_db.status not in EXEC_KICKED_OFF_STATES:
            # pylint: enable=no-member
            LOG.audit('Rule enforcement failed. Execution of Action %s failed. '
                      'TriggerInstance: %s and Rule: %s',
                      self.rule.action.name, self.trigger_instance, self.rule,
                      extra=extra)
            return execution_db

        LOG.audit('Rule enforced. Execution %s, TriggerInstance %s and Rule %s.',
                  execution_db, self.trigger_instance, self.rule, extra=extra)

        return execution_db
示例#4
0
    def enforce(self):
        params = self.get_resolved_parameters()
        LOG.info('Invoking action %s for trigger_instance %s with params %s.',
                 self.rule.action.ref, self.trigger_instance.id,
                 json.dumps(params))

        # update trace before invoking the action.
        trace_context = self._update_trace()
        LOG.debug('Updated trace %s with rule %s.', trace_context,
                  self.rule.id)

        context = {
            'trigger_instance':
            reference.get_ref_from_model(self.trigger_instance),
            'rule': reference.get_ref_from_model(self.rule),
            'user': get_system_username(),
            TRACE_CONTEXT: trace_context
        }

        extra = {
            'trigger_instance_db': self.trigger_instance,
            'rule_db': self.rule
        }
        rule_spec = {
            'ref': self.rule.ref,
            'id': str(self.rule.id),
            'uid': self.rule.uid
        }
        enforcement_db = RuleEnforcementDB(trigger_instance_id=str(
            self.trigger_instance.id),
                                           rule=rule_spec)
        try:
            execution_db = RuleEnforcer._invoke_action(self.rule.action,
                                                       params, context)
            # pylint: disable=no-member
            enforcement_db.execution_id = str(execution_db.id)
            # pylint: enable=no-member
        except:
            LOG.exception('Failed kicking off execution for rule %s.',
                          self.rule,
                          extra=extra)
            return None
        finally:
            self._update_enforcement(enforcement_db)

        extra['execution_db'] = execution_db
        # pylint: disable=no-member
        if execution_db.status not in EXEC_KICKED_OFF_STATES:
            # pylint: enable=no-member
            LOG.audit(
                'Rule enforcement failed. Execution of Action %s failed. '
                'TriggerInstance: %s and Rule: %s',
                self.rule.action.name,
                self.trigger_instance,
                self.rule,
                extra=extra)
            return execution_db

        LOG.audit(
            'Rule enforced. Execution %s, TriggerInstance %s and Rule %s.',
            execution_db,
            self.trigger_instance,
            self.rule,
            extra=extra)

        return execution_db
示例#5
0
文件: enforcer.py 项目: tomzhang/st2
    def enforce(self):
        # TODO: Refactor this to avoid additional lookup in cast_params
        # TODO: rename self.rule.action -> self.rule.action_exec_spec
        action_ref = self.rule.action['ref']
        action_db = action_db_util.get_action_by_ref(action_ref)
        if not action_db:
            raise ValueError('Action "%s" doesn\'t exist' % (action_ref))

        data = self.data_transformer(self.rule.action.parameters)
        LOG.info('Invoking action %s for trigger_instance %s with data %s.',
                 self.rule.action.ref, self.trigger_instance.id,
                 json.dumps(data))

        # update trace before invoking the action.
        trace_context = self._update_trace()
        LOG.debug('Updated trace %s with rule %s.', trace_context,
                  self.rule.id)

        context = {
            'trigger_instance':
            reference.get_ref_from_model(self.trigger_instance),
            'rule': reference.get_ref_from_model(self.rule),
            'user': get_system_username(),
            TRACE_CONTEXT: trace_context
        }

        extra = {
            'trigger_instance_db': self.trigger_instance,
            'rule_db': self.rule
        }
        rule_spec = {
            'ref': self.rule.ref,
            'id': str(self.rule.id),
            'uid': self.rule.uid
        }
        enforcement_db = RuleEnforcementDB(trigger_instance_id=str(
            self.trigger_instance.id),
                                           rule=rule_spec)
        try:
            execution_db = RuleEnforcer._invoke_action(self.rule.action, data,
                                                       context)
            # pylint: disable=no-member
            enforcement_db.execution_id = str(execution_db.id)
            # pylint: enable=no-member
        except:
            LOG.exception('Failed kicking off execution for rule %s.',
                          self.rule,
                          extra=extra)
            return None
        finally:
            self._update_enforcement(enforcement_db)

        extra['execution_db'] = execution_db
        # pylint: disable=no-member
        if execution_db.status not in EXEC_KICKED_OFF_STATES:
            # pylint: enable=no-member
            LOG.audit(
                'Rule enforcement failed. Execution of Action %s failed. '
                'TriggerInstance: %s and Rule: %s',
                self.rule.action.name,
                self.trigger_instance,
                self.rule,
                extra=extra)
            return execution_db

        LOG.audit(
            'Rule enforced. Execution %s, TriggerInstance %s and Rule %s.',
            execution_db,
            self.trigger_instance,
            self.rule,
            extra=extra)

        return execution_db