test_snuba.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import pytest
  2. from snuba_sdk import Limit, Offset
  3. from sentry.sentry_metrics.client import generic_metrics_backend
  4. from sentry.snuba.metrics.datasource import get_series
  5. from sentry.snuba.metrics.query import MetricField
  6. from sentry.testutils.cases import BaseMetricsLayerTestCase, TestCase
  7. from sentry.testutils.metrics_backend import GenericMetricsTestMixIn
  8. pytestmark = pytest.mark.sentry_metrics
  9. class MetricsInterfaceTestCase(BaseMetricsLayerTestCase, TestCase, GenericMetricsTestMixIn):
  10. def setUp(self):
  11. super().setUp()
  12. class SnubaMetricsInterfaceTest(MetricsInterfaceTestCase):
  13. """
  14. A sample test case that shows the process of writing
  15. the metric via the Snuba HTTP endpoint, and then
  16. querying for it using APIs in the Metrics Layer.
  17. This test is also very similar to those in the Metrics Layer.
  18. """
  19. @property
  20. def now(self):
  21. return BaseMetricsLayerTestCase.MOCK_DATETIME
  22. def test_count_query(self):
  23. generic_metrics_backend.distribution(
  24. self.use_case_id,
  25. self.organization.id,
  26. self.project.id,
  27. self.metric_name,
  28. [100, 200, 300],
  29. {},
  30. self.unit,
  31. )
  32. metrics_query = self.build_metrics_query(
  33. before_now="1h",
  34. granularity="1h",
  35. select=[
  36. MetricField(
  37. op="count",
  38. metric_mri=self.get_mri(self.metric_name, "d", self.use_case_id, self.unit),
  39. ),
  40. ],
  41. groupby=[],
  42. orderby=[],
  43. limit=Limit(limit=1),
  44. offset=Offset(offset=0),
  45. include_series=False,
  46. )
  47. data = get_series(
  48. [self.project],
  49. metrics_query=metrics_query,
  50. include_meta=True,
  51. use_case_id=self.use_case_id,
  52. )
  53. groups = data["groups"]
  54. assert len(groups) == 1
  55. expected_count = 3
  56. expected_alias = "count(measurements.speed)"
  57. assert groups[0]["totals"] == {
  58. expected_alias: expected_count,
  59. }
  60. assert data["meta"] == sorted(
  61. [
  62. {"name": expected_alias, "type": "UInt64"},
  63. ],
  64. key=lambda elem: elem["name"],
  65. )