Exemple #1
0
    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"),
            },
        )
Exemple #2
0
    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,
            }
        )
Exemple #3
0
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()},
    })
Exemple #4
0
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)