#!/usr/bin/env python import orjson from sentry.runner import configure configure() from datetime import datetime, timedelta import click import requests from django.conf import settings from sentry.constants import DataCategory from sentry.utils.outcomes import Outcome # import random def store_outcomes(outcome, num_times=1): outcomes = [] for _ in range(num_times): outcome_copy = outcome.copy() outcome_copy["timestamp"] = outcome_copy["timestamp"].strftime("%Y-%m-%dT%H:%M:%S.%fZ") outcomes.append(outcome_copy) req = requests.post( settings.SENTRY_SNUBA + "/tests/entities/outcomes/insert", data=orjson.dumps(outcomes) ) req.raise_for_status() def generate_outcomes(): for i in range(0, 180): for outcome in [ Outcome.RATE_LIMITED, Outcome.INVALID, Outcome.ACCEPTED, Outcome.FILTERED, ]: # print(datetime.now() - timedelta(hours=1840)) click.echo(i) for category in [ DataCategory.ERROR, DataCategory.DEFAULT, DataCategory.TRANSACTION, DataCategory.ATTACHMENT, ]: attachments_multiplier = 1000 if category == DataCategory.ATTACHMENT else 1 store_outcomes( { "org_id": 1, "timestamp": datetime.now() - timedelta(hours=i), "project_id": 1, "outcome": outcome, "reason": "none", "category": category, "quantity": 100 * attachments_multiplier * 500, }, 1, ) def drop_outcomes(): assert requests.post(settings.SENTRY_SNUBA + "/tests/entities/outcomes/drop").status_code == 200 if __name__ == "__main__": generate_outcomes()