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 = get_event_type(data) 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 inner(data): mgr = EventManager( data={ "expectct": data, "logentry": {"message": "XXX EXPECTCT MESSAGE NOT THROUGH RELAY XXX"}, } ) mgr.normalize() data = mgr.get_data() data.update(materialize_metadata(data)) evt = eventstore.create_event(data=data) interface = evt.interfaces.get("expectct") insta_snapshot( { "errors": evt.data.get("errors"), "to_json": interface and interface.to_json(), "metadata": evt.get_event_metadata(), "title": evt.title, } )
def test_event_hash_variant(insta_snapshot, testcase): with open(os.path.join(_fixture_path, testcase + ".json")) as f: input = json.load(f) config = FingerprintingRules.from_json({ "rules": input.pop("_fingerprinting_rules"), "version": 1 }) mgr = EventManager(data=input) mgr.normalize() data = mgr.get_data() data.setdefault("fingerprint", ["{{ default }}"]) apply_server_fingerprinting(data, config) evt = eventstore.create_event(data=data) def dump_variant(v): rv = v.as_dict() for key in "hash", "description", "config": rv.pop(key, None) if "component" in rv: for key in "id", "name", "values": rv["component"].pop(key, None) return rv insta_snapshot({ "config": config.to_json(), "fingerprint": data["fingerprint"], "variants": {k: dump_variant(v) for (k, v) in evt.get_grouping_variants().items()}, })
def digest(request): random = get_random(request) # TODO: Refactor all of these into something more manageable. org = Organization(id=1, slug="example", name="Example Organization") project = Project(id=1, slug="example", name="Example Project", organization=org) rules = { i: Rule(id=i, project=project, label="Rule #%s" % (i,)) for i in range(1, random.randint(2, 4)) } state = { "project": project, "groups": {}, "rules": rules, "event_counts": {}, "user_counts": {}, } records = [] group_generator = make_group_generator(random, project) for i in range(random.randint(1, 30)): group = next(group_generator) state["groups"][group.id] = group offset = timedelta(seconds=0) for i in range(random.randint(1, 10)): offset += timedelta(seconds=random.random() * 120) 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() data["timestamp"] = random.randint( to_timestamp(group.first_seen), to_timestamp(group.last_seen) ) event = eventstore.create_event( event_id=uuid.uuid4().hex, group_id=group.id, project_id=project.id, data=data.data ) records.append( Record( event.event_id, Notification( event, random.sample(state["rules"], random.randint(1, len(state["rules"]))) ), to_timestamp(event.datetime), ) ) state["event_counts"][group.id] = random.randint(10, 1e4) state["user_counts"][group.id] = random.randint(10, 1e4) digest = build_digest(project, records, state) start, end, counts = get_digest_metadata(digest) context = { "project": project, "counts": counts, "digest": digest, "start": start, "end": end, "referrer": "digest_email", } add_unsubscribe_link(context) return MailPreview( html_template="sentry/emails/digests/body.html", text_template="sentry/emails/digests/body.txt", context=context, ).render(request)