def test_multiline_error(self, _send_mail): event_manager = EventManager({"message": "hello world\nfoo bar", "level": "error"}) event_manager.normalize() event_data = event_manager.get_data() event_type = event_manager.get_event_type() event_data["type"] = event_type.key event_data["metadata"] = event_type.get_metadata(event_data) group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, message=event_manager.get_search_message(), logger="root", short_id=2, data={"type": event_type.key, "metadata": event_type.get_metadata(event_data)}, ) event = Event( group=group, message=group.message, project=self.project, datetime=group.last_seen, data=event_data, ) notification = Notification(event=event) with self.options({"system.url-prefix": "http://example.com"}): self.plugin.notify(notification) assert _send_mail.call_count is 1 args, kwargs = _send_mail.call_args assert kwargs.get("subject") == u"BAR-2 - hello world"
def get(self, request): org = Organization(id=1, slug="organization", name="My Company") project = Project(id=1, organization=org, slug="project", name="My Project") group = next(make_group_generator(get_random(request), project)) data = dict(load_data("python")) data["message"] = group.message data.pop("logentry", None) event_manager = EventManager(data) event_manager.normalize() data = event_manager.get_data() event_type = event_manager.get_event_type() event = eventstore.create_event( event_id="a" * 32, group_id=group.id, project_id=project.id, data=data.data ) group.message = event.search_message group.data = {"type": event_type.key, "metadata": event_type.get_metadata(data)} activity = Activity(group=group, project=event.project, **self.get_activity(request, event)) return render_to_response( "sentry/debug/mail/preview.html", context={ "preview": ActivityMailPreview(request, activity), "format": request.GET.get("format"), }, )
def get(self, request): org = Organization( id=1, slug='organization', name='My Company', ) project = Project( id=1, organization=org, slug='project', name='My Project', ) group = next(make_group_generator( get_random(request), project, ), ) data = dict(load_data('python')) data['message'] = group.message data.pop('logentry', None) event_manager = EventManager(data) event_manager.normalize() data = event_manager.get_data() event_type = event_manager.get_event_type() group.message = event_manager.get_search_message() group.data = { 'type': event_type.key, 'metadata': event_type.get_metadata(data), } event = Event(id=1, project=project, message=event_manager.get_search_message(), group=group, datetime=datetime(2016, 6, 13, 3, 8, 24, tzinfo=timezone.utc), data=event_manager.get_data()) activity = Activity(group=event.group, project=event.project, **self.get_activity(request, event)) return render_to_response( 'sentry/debug/mail/preview.html', { 'preview': ActivityMailPreview(request, activity), 'format': request.GET.get('format'), })
def get(self, request): org = Organization( id=1, slug='organization', name='My Company', ) project = Project( id=1, organization=org, slug='project', name='My Project', ) group = next( make_group_generator( get_random(request), project, ), ) data = dict(load_data('python')) data['message'] = group.message data.pop('logentry', None) event_manager = EventManager(data) event_manager.normalize() data = event_manager.get_data() event_type = event_manager.get_event_type() group.message = event_manager.get_search_message() group.data = { 'type': event_type.key, 'metadata': event_type.get_metadata(data), } event = Event( id=1, project=project, message=event_manager.get_search_message(), group=group, datetime=datetime(2016, 6, 13, 3, 8, 24, tzinfo=timezone.utc), data=event_manager.get_data() ) activity = Activity( group=event.group, project=event.project, **self.get_activity(request, event) ) return render_to_response( 'sentry/debug/mail/preview.html', { 'preview': ActivityMailPreview(request, activity), 'format': request.GET.get('format'), } )
def make_event_data(self, filename, url="http://example.com"): mgr = EventManager( { "tags": [("level", "error")], "stacktrace": {"frames": [{"lineno": 1, "filename": filename}]}, "request": {"url": url}, } ) mgr.normalize() data = mgr.get_data() event_type = mgr.get_event_type() data["type"] = event_type.key data["metadata"] = event_type.get_metadata(data) return data
def test_notify_users_does_email(self, _send_mail): event_manager = EventManager({ 'message': 'hello world', 'level': 'error', }) event_manager.normalize() event_data = event_manager.get_data() event_type = event_manager.get_event_type() event_data['type'] = event_type.key event_data['metadata'] = event_type.get_metadata(event_data) group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, message=event_manager.get_search_message(), logger='root', short_id=2, data={ 'type': event_type.key, 'metadata': event_type.get_metadata(event_data), } ) event = Event( group=group, message=group.message, project=self.project, datetime=group.last_seen, data=event_data ) notification = Notification(event=event) with self.options({'system.url-prefix': 'http://example.com'}): self.plugin.notify(notification) assert _send_mail.call_count is 1 args, kwargs = _send_mail.call_args self.assertEquals(kwargs.get('project'), self.project) self.assertEquals(kwargs.get('reference'), group) assert kwargs.get('subject') == u'BAR-2 - hello world'
def test_notify_users_does_email(self, _send_mail): event_manager = EventManager({ 'message': 'hello world', 'level': 'error', }) event_manager.normalize() event_data = event_manager.get_data() event_type = event_manager.get_event_type() group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, message=event_manager.get_search_message(), logger='root', short_id=2, data={ 'type': event_type.key, 'metadata': event_type.get_metadata(), } ) event = Event( group=group, message=group.message, project=self.project, datetime=group.last_seen, data=event_data ) notification = Notification(event=event) with self.options({'system.url-prefix': 'http://example.com'}): self.plugin.notify(notification) assert _send_mail.call_count is 1 args, kwargs = _send_mail.call_args self.assertEquals(kwargs.get('project'), self.project) self.assertEquals(kwargs.get('reference'), group) assert kwargs.get('subject') == u'BAR-2 - hello world'
def test_multiline_error(self, _send_mail): event_manager = EventManager({ "message": "hello world\nfoo bar", "level": "error" }) event_manager.normalize() event_data = event_manager.get_data() event_type = event_manager.get_event_type() event_data["type"] = event_type.key event_data["metadata"] = event_type.get_metadata(event_data) event = event_manager.save(self.project.id) notification = Notification(event=event) with self.options({"system.url-prefix": "http://example.com"}): self.plugin.notify(notification) assert _send_mail.call_count == 1 args, kwargs = _send_mail.call_args assert kwargs.get("subject") == u"BAR-1 - hello world"
def make_event_data(self, filename, url='http://example.com'): mgr = EventManager({ 'tags': [('level', 'error')], 'stacktrace': { 'frames': [ { 'lineno': 1, 'filename': filename, }, ], }, 'request': { 'url': url }, }) mgr.normalize() data = mgr.get_data() event_type = mgr.get_event_type() data['type'] = event_type.key data['metadata'] = event_type.get_metadata(data) return data
def get(self, request): org = Organization(id=1, slug="organization", name="My Company") project = Project(id=1, organization=org, slug="project", name="My Project") group = next(make_group_generator(get_random(request), project)) data = dict(load_data("python")) data["message"] = group.message data.pop("logentry", None) event_manager = EventManager(data) event_manager.normalize() data = event_manager.get_data() event_type = event_manager.get_event_type() group.message = event_manager.get_search_message() group.data = {"type": event_type.key, "metadata": event_type.get_metadata(data)} event = Event( id=1, project=project, message=event_manager.get_search_message(), group=group, datetime=datetime(2016, 6, 13, 3, 8, 24, tzinfo=timezone.utc), data=event_manager.get_data(), ) activity = Activity( group=event.group, project=event.project, **self.get_activity(request, event) ) return render_to_response( "sentry/debug/mail/preview.html", { "preview": ActivityMailPreview(request, activity), "format": request.GET.get("format"), }, )
def test_notify_users_does_email(self, _send_mail): event_manager = EventManager({ "message": "hello world", "level": "error" }) event_manager.normalize() event_data = event_manager.get_data() event_type = event_manager.get_event_type() event_data["type"] = event_type.key event_data["metadata"] = event_type.get_metadata(event_data) event = event_manager.save(self.project.id) group = event.group notification = Notification(event=event) with self.options({"system.url-prefix": "http://example.com"}): self.plugin.notify(notification) assert _send_mail.call_count == 1 args, kwargs = _send_mail.call_args self.assertEquals(kwargs.get("project"), self.project) self.assertEquals(kwargs.get("reference"), group) assert kwargs.get("subject") == u"BAR-1 - hello world"
def alert(request): platform = request.GET.get("platform", "python") org = Organization(id=1, slug="example", name="Example") project = Project(id=1, slug="example", name="Example", organization=org) random = get_random(request) group = next(make_group_generator(random, project)) data = dict(load_data(platform)) data["message"] = group.message data["event_id"] = "44f1419e73884cd2b45c79918f4b6dc4" data.pop("logentry", None) data["environment"] = "prod" data["tags"] = [ ("logger", "javascript"), ("environment", "prod"), ("level", "error"), ("device", "Other"), ] event_manager = EventManager(data) event_manager.normalize() data = event_manager.get_data() event = event_manager.save(project.id) # Prevent Percy screenshot from constantly changing if options.get("store.use-django-event"): event.datetime = datetime(2017, 9, 6, 0, 0) else: event.data["timestamp"] = 1504656000.0 # datetime(2017, 9, 6, 0, 0) event_type = event_manager.get_event_type() group.message = event.search_message group.data = {"type": event_type.key, "metadata": event_type.get_metadata(data)} rule = Rule(label="An example rule") # XXX: this interface_list code needs to be the same as in # src/sentry/plugins/sentry_mail/models.py interface_list = [] for interface in six.itervalues(event.interfaces): body = interface.to_email_html(event) if not body: continue text_body = interface.to_string(event) interface_list.append((interface.get_title(), mark_safe(body), text_body)) return MailPreview( html_template="sentry/emails/error.html", text_template="sentry/emails/error.txt", context={ "rule": rule, "group": group, "event": event, "link": "http://example.com/link", "interfaces": interface_list, "tags": event.tags, "project_label": project.slug, "commits": [ { # TODO(dcramer): change to use serializer "repository": { "status": "active", "name": "Example Repo", "url": "https://github.com/example/example", "dateCreated": "2018-02-28T23:39:22.402Z", "provider": {"id": "github", "name": "GitHub"}, "id": "1", }, "score": 2, "subject": "feat: Do something to raven/base.py", "message": "feat: Do something to raven/base.py\naptent vivamus vehicula tempus volutpat hac tortor", "id": "1b17483ffc4a10609e7921ee21a8567bfe0ed006", "shortId": "1b17483", "author": { "username": "******", "isManaged": False, "lastActive": "2018-03-01T18:25:28.149Z", "id": "1", "isActive": True, "has2fa": False, "name": "*****@*****.**", "avatarUrl": "https://secure.gravatar.com/avatar/51567a4f786cd8a2c41c513b592de9f9?s=32&d=mm", "dateJoined": "2018-02-27T22:04:32.847Z", "emails": [{"is_verified": False, "id": "1", "email": "*****@*****.**"}], "avatar": {"avatarUuid": None, "avatarType": "letter_avatar"}, "lastLogin": "******", "email": "*****@*****.**", }, } ], }, ).render(request)
def alert(request): platform = request.GET.get('platform', 'python') org = Organization( id=1, slug='example', name='Example', ) project = Project( id=1, slug='example', name='Example', organization=org, ) random = get_random(request) group = next(make_group_generator(random, project), ) data = dict(load_data(platform)) data['message'] = group.message data['event_id'] = '44f1419e73884cd2b45c79918f4b6dc4' data.pop('logentry', None) data['environment'] = 'prod' data['tags'] = [('logger', 'javascript'), ('environment', 'prod'), ('level', 'error'), ('device', 'Other')] event_manager = EventManager(data) event_manager.normalize() event = event_manager.save(project.id) event_type = event_manager.get_event_type() group.message = event_manager.get_search_message() group.data = { 'type': event_type.key, 'metadata': event_type.get_metadata(), } rule = Rule(label="An example rule") interface_list = [] for interface in six.itervalues(event.interfaces): body = interface.to_email_html(event) if not body: continue interface_list.append((interface.get_title(), mark_safe(body))) return MailPreview( html_template='sentry/emails/error.html', text_template='sentry/emails/error.txt', context={ 'rule': rule, 'group': group, 'event': event, 'link': 'http://example.com/link', 'interfaces': interface_list, 'tags': event.get_tags(), 'project_label': project.slug, 'commits': [{ # TODO(dcramer): change to use serializer "repository": { "status": "active", "name": "Example Repo", "url": "https://github.com/example/example", "dateCreated": "2018-02-28T23:39:22.402Z", "provider": { "id": "github", "name": "GitHub" }, "id": "1" }, "score": 2, "subject": "feat: Do something to raven/base.py", "message": "feat: Do something to raven/base.py\naptent vivamus vehicula tempus volutpat hac tortor", "id": "1b17483ffc4a10609e7921ee21a8567bfe0ed006", "shortId": "1b17483", "author": { "username": "******", "isManaged": False, "lastActive": "2018-03-01T18:25:28.149Z", "id": "1", "isActive": True, "has2fa": False, "name": "*****@*****.**", "avatarUrl": "https://secure.gravatar.com/avatar/51567a4f786cd8a2c41c513b592de9f9?s=32&d=mm", "dateJoined": "2018-02-27T22:04:32.847Z", "emails": [{ "is_verified": False, "id": "1", "email": "*****@*****.**" }], "avatar": { "avatarUuid": None, "avatarType": "letter_avatar" }, "lastLogin": "******", "email": "*****@*****.**" } }], }, ).render(request)
def alert(request): platform = request.GET.get('platform', 'python') org = Organization( id=1, slug='example', name='Example', ) project = Project( id=1, slug='example', name='Example', organization=org, ) random = get_random(request) group = next( make_group_generator(random, project), ) data = dict(load_data(platform)) data['message'] = group.message data.pop('logentry', None) data['environment'] = 'prod' data['tags'] = [ ('logger', 'javascript'), ('environment', 'prod'), ('level', 'error'), ('device', 'Other') ] event_manager = EventManager(data) event_manager.normalize() event_type = event_manager.get_event_type() group.message = event_manager.get_search_message() group.data = { 'type': event_type.key, 'metadata': event_type.get_metadata(), } event = Event( id=1, event_id='44f1419e73884cd2b45c79918f4b6dc4', project=project, group=group, message=event_manager.get_search_message(), data=event_manager.get_data(), datetime=to_datetime( random.randint( to_timestamp(group.first_seen), to_timestamp(group.last_seen), ), ), ) rule = Rule(label="An example rule") interface_list = [] for interface in six.itervalues(event.interfaces): body = interface.to_email_html(event) if not body: continue interface_list.append((interface.get_title(), mark_safe(body))) return MailPreview( html_template='sentry/emails/error.html', text_template='sentry/emails/error.txt', context={ 'rule': rule, 'group': group, 'event': event, 'link': 'http://example.com/link', 'interfaces': interface_list, 'tags': event.get_tags(), 'project_label': project.slug, 'commits': [{ # TODO(dcramer): change to use serializer "repository": {"status": "active", "name": "Example Repo", "url": "https://github.com/example/example", "dateCreated": "2018-02-28T23:39:22.402Z", "provider": {"id": "github", "name": "GitHub"}, "id": "1"}, "score": 2, "subject": "feat: Do something to raven/base.py", "message": "feat: Do something to raven/base.py\naptent vivamus vehicula tempus volutpat hac tortor", "id": "1b17483ffc4a10609e7921ee21a8567bfe0ed006", "shortId": "1b17483", "author": {"username": "******", "isManaged": False, "lastActive": "2018-03-01T18:25:28.149Z", "id": "1", "isActive": True, "has2fa": False, "name": "*****@*****.**", "avatarUrl": "https://secure.gravatar.com/avatar/51567a4f786cd8a2c41c513b592de9f9?s=32&d=mm", "dateJoined": "2018-02-27T22:04:32.847Z", "emails": [{"is_verified": False, "id": "1", "email": "*****@*****.**"}], "avatar": {"avatarUuid": None, "avatarType": "letter_avatar"}, "lastLogin": "******", "email": "*****@*****.**"} }], }, ).render(request)