65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""passbook sentry integration"""
 | 
						|
from aioredis.errors import ReplyError, ConnectionClosedError
 | 
						|
from billiard.exceptions import WorkerLostError
 | 
						|
from botocore.client import ClientError
 | 
						|
from celery.exceptions import CeleryError
 | 
						|
from channels_redis.core import ChannelFull
 | 
						|
from django.core.exceptions import DisallowedHost, ValidationError
 | 
						|
from django.db import InternalError, OperationalError, ProgrammingError
 | 
						|
from django_redis.exceptions import ConnectionInterrupted
 | 
						|
from ldap3.core.exceptions import LDAPException
 | 
						|
from redis.exceptions import ConnectionError as RedisConnectionError
 | 
						|
from redis.exceptions import RedisError, ResponseError
 | 
						|
from rest_framework.exceptions import APIException
 | 
						|
from structlog import get_logger
 | 
						|
from websockets.exceptions import WebSocketException
 | 
						|
 | 
						|
LOGGER = get_logger()
 | 
						|
 | 
						|
 | 
						|
class SentryIgnoredException(Exception):
 | 
						|
    """Base Class for all errors that are suppressed, and not sent to sentry."""
 | 
						|
 | 
						|
 | 
						|
def before_send(event, hint):
 | 
						|
    """Check if error is database error, and ignore if so"""
 | 
						|
    ignored_classes = (
 | 
						|
        # Inbuilt types
 | 
						|
        KeyboardInterrupt,
 | 
						|
        ConnectionResetError,
 | 
						|
        OSError,
 | 
						|
        # Django DB Errors
 | 
						|
        OperationalError,
 | 
						|
        InternalError,
 | 
						|
        ProgrammingError,
 | 
						|
        DisallowedHost,
 | 
						|
        ValidationError,
 | 
						|
        # Redis errors
 | 
						|
        RedisConnectionError,
 | 
						|
        ConnectionInterrupted,
 | 
						|
        RedisError,
 | 
						|
        ResponseError,
 | 
						|
        ReplyError,
 | 
						|
        ConnectionClosedError,
 | 
						|
        # websocket errors
 | 
						|
        ChannelFull,
 | 
						|
        WebSocketException,
 | 
						|
        # rest_framework error
 | 
						|
        APIException,
 | 
						|
        # celery errors
 | 
						|
        WorkerLostError,
 | 
						|
        CeleryError,
 | 
						|
        # S3 errors
 | 
						|
        ClientError,
 | 
						|
        # custom baseclass
 | 
						|
        SentryIgnoredException,
 | 
						|
        # ldap errors
 | 
						|
        LDAPException,
 | 
						|
    )
 | 
						|
    if "exc_info" in hint:
 | 
						|
        _, exc_value, _ = hint["exc_info"]
 | 
						|
        if isinstance(exc_value, ignored_classes):
 | 
						|
            LOGGER.info("Supressing error %r", exc_value)
 | 
						|
            return None
 | 
						|
    return event
 |