123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- from datetime import timedelta
- import pytest
- from django.urls import reverse
- from sentry.testutils.cases import MetricsEnhancedPerformanceTestCase
- from sentry.testutils.helpers.datetime import before_now
- from sentry.testutils.silo import region_silo_test
- pytestmark = pytest.mark.sentry_metrics
- @region_silo_test
- class OrganizationMeasurementsMetaEndpoint(MetricsEnhancedPerformanceTestCase):
- endpoint = "sentry-api-0-organization-measurements-meta"
- METRIC_STRINGS = [
- "d:transactions/measurements.something_custom@millisecond",
- ]
- def setUp(self):
- super().setUp()
- self.login_as(user=self.user)
- self.day_ago = before_now(days=1).replace(hour=10, minute=0, second=0, microsecond=0)
- self.DEFAULT_METRIC_TIMESTAMP = self.day_ago
- self.url = reverse(
- self.endpoint, kwargs={"organization_slug": self.project.organization.slug}
- )
- self.features = {"organizations:performance-use-metrics": True}
- def do_request(self, data, url=None, features=None):
- if features is None:
- features = {"organizations:discover-basic": True}
- features.update(self.features)
- with self.feature(features):
- return self.client.get(self.url if url is None else url, data=data, format="json")
- def test_simple(self):
- self.store_transaction_metric(
- 1,
- metric="measurements.something_custom",
- internal_metric="d:transactions/measurements.something_custom@millisecond",
- entity="metrics_distributions",
- timestamp=self.day_ago + timedelta(hours=1, minutes=0),
- )
- response = self.do_request(
- {
- "project": self.project.id,
- "statsPeriod": "14d",
- }
- )
- assert response.status_code == 200, response.content
- assert response.data == {
- "measurements.something_custom": {
- "functions": [
- "apdex",
- "avg",
- "p50",
- "p75",
- "p90",
- "p95",
- "p99",
- "p100",
- "max",
- "min",
- "sum",
- "percentile",
- "http_error_count",
- "http_error_rate",
- ],
- "unit": "millisecond",
- }
- }
- def test_measurements_with_numbers_in_name(self):
- self.store_transaction_metric(
- 1,
- metric="measurements.something_custom",
- internal_metric="d:transactions/measurements.1234567890.abcdef@millisecond",
- entity="metrics_distributions",
- timestamp=self.day_ago + timedelta(hours=1, minutes=0),
- )
- response = self.do_request(
- {
- "project": self.project.id,
- "statsPeriod": "14d",
- }
- )
- assert response.status_code == 200, response.content
- assert response.data == {
- "measurements.1234567890.abcdef": {
- "functions": [
- "apdex",
- "avg",
- "p50",
- "p75",
- "p90",
- "p95",
- "p99",
- "p100",
- "max",
- "min",
- "sum",
- "percentile",
- "http_error_count",
- "http_error_rate",
- ],
- "unit": "millisecond",
- }
- }
- def test_measurements_with_lots_of_periods(self):
- self.store_transaction_metric(
- 1,
- metric="measurements.something_custom",
- internal_metric="d:transactions/measurements.a.b.c.d.e.f.g@millisecond",
- entity="metrics_distributions",
- timestamp=self.day_ago + timedelta(hours=1, minutes=0),
- )
- response = self.do_request(
- {
- "project": self.project.id,
- "statsPeriod": "14d",
- }
- )
- assert response.status_code == 200, response.content
- assert response.data == {
- "measurements.a.b.c.d.e.f.g": {
- "functions": [
- "apdex",
- "avg",
- "p50",
- "p75",
- "p90",
- "p95",
- "p99",
- "p100",
- "max",
- "min",
- "sum",
- "percentile",
- "http_error_count",
- "http_error_rate",
- ],
- "unit": "millisecond",
- }
- }
- def test_metric_outside_query_daterange(self):
- self.store_transaction_metric(
- 1,
- metric="measurements.something_custom",
- internal_metric="d:transactions/measurements.something_custom@millisecond",
- entity="metrics_distributions",
- timestamp=self.day_ago - timedelta(days=15, minutes=0),
- )
- response = self.do_request(
- {
- "project": self.project.id,
- "statsPeriod": "14d",
- }
- )
- assert response.status_code == 200, response.content
- assert response.data == {}
|