forked from p34709852/monkey
Island: Add GeventHubErrorHandler to log gevent exceptions
This commit is contained in:
parent
f86ff4fbd7
commit
ebbdbc8dcb
|
@ -0,0 +1,26 @@
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
import gevent.hub
|
||||||
|
|
||||||
|
|
||||||
|
class GeventHubErrorHandler:
|
||||||
|
"""
|
||||||
|
Wraps gevent.hub.Hub's handle_error() method so that the exception can be
|
||||||
|
logged but the traceback can be stored in a separate file. This preserves
|
||||||
|
the default gevent functionality and adds a useful, concise log message to
|
||||||
|
the Monkey Island logs.
|
||||||
|
|
||||||
|
For more information, see
|
||||||
|
https://github.com/guardicore/monkey/issues/859,
|
||||||
|
https://www.gevent.org/api/gevent.hub.html#gevent.hub.Hub.handle_error
|
||||||
|
https://github.com/gevent/gevent/issues/1482
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, hub: gevent.hub.Hub, logger):
|
||||||
|
self._original_handle_error = hub.handle_error
|
||||||
|
self._logger = logger
|
||||||
|
|
||||||
|
def __call__(self, context, type_, value, tb):
|
||||||
|
exception_msg = traceback.format_exception_only(type_, value)
|
||||||
|
self._logger.warning(f"gevent caught an exception: {exception_msg}")
|
||||||
|
self._original_handle_error(context, type_, value, tb)
|
Loading…
Reference in New Issue