Skip to content

Commit

Permalink
Merge pull request #123 from remstone7/add_local_variables
Browse files Browse the repository at this point in the history
Add local variables to notifications
  • Loading branch information
subzero10 authored Nov 11, 2022
2 parents dfd4ede + 44f9aba commit c375182
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 6 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,8 @@ The following options are available to you:
| force_report_data | `bool` | `False` | `True` | `HONEYBADGER_FORCE_REPORT_DATA` |
| excluded_exceptions | `list` | `[]` | `['Http404', 'MyCustomIgnoredError']` | `HONEYBADGER_EXCLUDED_EXCEPTIONS`
| force_sync | `bool` | `False` | `True` | `HONEYBADGER_FORCE_SYNC` |
| report_local_variables | `bool` | `False` | `True` | `HONEYBADGER_REPORT_LOCAL_VARIABLES` |


## Public Methods

Expand Down
4 changes: 3 additions & 1 deletion honeybadger/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ class Configuration(object):
('params_filters', list),
('force_report_data', bool),
('force_sync', bool),
('excluded_exceptions', list)
('excluded_exceptions', list),
('report_local_variables', bool)
)

def __init__(self, *args, **kwargs):
Expand All @@ -28,6 +29,7 @@ def __init__(self, *args, **kwargs):
self.force_report_data = False
self.force_sync = self.is_aws_lambda_environment
self.excluded_exceptions = []
self.report_local_variables = False

self.set_12factor_config()
self.set_config_from_dict(kwargs)
Expand Down
18 changes: 16 additions & 2 deletions honeybadger/payload.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
import traceback
import os
import logging
import inspect
from six.moves import range
from six.moves import zip
from io import open
from datetime import datetime

from .version import __version__
from .plugins import default_plugin_manager

from .utils import filter_dict
logger = logging.getLogger('honeybadger.payload')


Expand Down Expand Up @@ -104,6 +105,16 @@ def stats_payload():
return payload

def create_payload(exception, exc_traceback=None, config=None, context=None, fingerprint=None):
# if using local_variables get them
local_variables = None
if config and config.report_local_variables:
try:
local_variables = filter_dict(
inspect.trace()[-1][0].f_locals, config.params_filters
)
except Exception as e:
pass

if exc_traceback is None:
exc_traceback = sys.exc_info()[2]

Expand All @@ -119,7 +130,10 @@ def create_payload(exception, exc_traceback=None, config=None, context=None, fin
},
'error': error_payload(exception, exc_traceback, config, fingerprint),
'server': server_payload(config),
'request': {'context': context}
'request': {
'context': context,
'local_variables': local_variables
}
}

return default_plugin_manager.generate_payload(payload, config, context)
Expand Down
24 changes: 21 additions & 3 deletions honeybadger/tests/test_payload.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import os
import sys

from honeybadger.payload import error_payload
from honeybadger.payload import server_payload
from honeybadger.payload import (
create_payload,
error_payload,
server_payload
)
from honeybadger.config import Configuration

from mock import patch
from nose.tools import eq_, ok_
from nose.tools import eq_, ok_, assert_raises

# TODO: figure out how to run Django tests?

Expand Down Expand Up @@ -123,3 +126,18 @@ def test_psutil_is_optional():
with patch.dict(sys.modules, {'psutil':None}):
payload = server_payload(config)
eq_(payload['stats'], {})

def test_create_payload_without_local_variables():
config = Configuration()
exception = Exception('Test')
payload = create_payload(exception, config=config)
eq_(payload['request'].get('local_variables'), None)


def test_create_payload_with_local_variables():
config = Configuration(report_local_variables=True)
with assert_raises(Exception):
test_local_variable = {"test": "var"}
exception = Exception('Test')
payload = create_payload(exception, config=config)
eq_(payload['request']['local_variables'], test_local_variable)

0 comments on commit c375182

Please sign in to comment.