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
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
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
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
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