Skip to content

Commit

Permalink
Merge pull request #43 from open-craft/navin/custom-exception
Browse files Browse the repository at this point in the history
feat: use custom exceptions for recording errors
  • Loading branch information
bmtcril authored Oct 3, 2023
2 parents 3b63296 + 2a3f119 commit 7427940
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 5 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ Unreleased

*

[0.3.2] - 2023-09-01
************************************************

Added
=====
* Adds custom exceptions for producing and consuming errors.

[0.3.1] - 2023-05-24
************************************************

Expand Down
2 changes: 1 addition & 1 deletion edx_event_bus_redis/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
from edx_event_bus_redis.internal.consumer import RedisEventConsumer
from edx_event_bus_redis.internal.producer import create_producer

__version__ = '0.3.1'
__version__ = '0.3.2'

default_app_config = 'edx_event_bus_redis.apps.EdxEventBusRedisConfig' # pylint: disable=invalid-name
10 changes: 8 additions & 2 deletions edx_event_bus_redis/internal/consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ def __init__(self, message: str, causes: list):
self.causes = causes # just used for testing


class EventConsumptionException(Exception):
"""
Indicates that we had an issue in event production. Useful for filtering on later.
"""


def _reconnect_to_db_if_needed():
"""
Reconnects the db connection if needed.
Expand Down Expand Up @@ -371,8 +377,8 @@ def record_event_consuming_error(self, run_context, error, maybe_message):
try:
# This is gross, but our record_exception wrapper doesn't take args at the moment,
# and will only read the exception from stack context.
raise Exception(error) # pylint: disable=broad-exception-raised
except BaseException:
raise EventConsumptionException(error)
except EventConsumptionException:
self._add_message_monitoring(run_context=run_context, message=maybe_message, error=error)
record_exception()
logger.exception(
Expand Down
8 changes: 6 additions & 2 deletions edx_event_bus_redis/internal/producer.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
STREAM_MAX_LEN = int(getattr(settings, 'EVENT_BUS_REDIS_STREAM_MAX_LEN', 10_000))


class EventProductionException(Exception):
""" An exception we can check for when errors occur in event production code. """


def record_producing_error(error, context):
"""
Record an error in producing an event to both the monitoring system and the regular logs
Expand All @@ -41,8 +45,8 @@ def record_producing_error(error, context):
try:
# record_exception() is a wrapper around a New Relic method that can only be called within an except block,
# so first re-raise the error
raise Exception(error) # pylint: disable=broad-exception-raised
except BaseException:
raise EventProductionException(error)
except EventProductionException:
record_exception()
logger.exception(f"Error delivering message to Redis event bus. {error=!s} {context!r}")

Expand Down

0 comments on commit 7427940

Please sign in to comment.