def METHOD_NAME(self, req):
    failed_policies = []
    warn_policies = []
    patches = []
    for p in self.server.policy_collection.policies:
        # fail_message and warning_message are set on exception
        warning_message = None
        deny_message = None
        resources = None
        try:
            resources = p.push(req)
            action = p.data["mode"].get("on-match", "deny")
            result = evaluate_result(action, resources)
            if result in (
                "allow",
                "warn",
            ):
                verb = "allowing"
            else:
                verb = "denying"
            log.info(f"{verb} admission because on-match:{action}, matched:{len(resources)}")
        except (
            PolicyNotRunnableException,
            EventNotMatchedException,
        ):
            result = "allow"
            resources = []
        except Exception as e:
            # if a policy fails we simply warn
            result = self.server.on_exception
            if result == "warn":
                warning_message = f"Error in executing policy: {str(e)}"
            if result == "deny":
                deny_message = f"Error in executing policy: {str(e)}"
        if result == "deny":
            failed_policies.append(
                {
                    "name": p.name,
                    "description": deny_message or p.data.get("description", ""),
                }
            )
        if result == "warn":
            warn_policies.append(
                {
                    "name": p.name,
                    "description": warning_message or p.data.get("description", ""),
                }
            )
        if resources:
            patches.extend(resources[0].get("c7n:patches", []))
    return failed_policies, warn_policies, patches