12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import time
- import uuid
- from datetime import datetime, timedelta
- from typing import Optional
- from unittest import mock
- from django.utils import timezone
- from snuba_sdk import Request
- from snuba_sdk.column import Column
- from snuba_sdk.conditions import Condition, Op
- from snuba_sdk.entity import Entity
- from snuba_sdk.expressions import Limit
- from snuba_sdk.function import Function
- from snuba_sdk.query import Query
- from sentry.testutils import SnubaTestCase, TestCase
- from sentry.utils import snuba
- class SnQLTest(TestCase, SnubaTestCase):
- def _insert_event_for_time(
- self, ts: datetime, group_hash: str = "a" * 32, group_id: Optional[int] = None
- ) -> str:
- event_id = uuid.uuid4().hex
- self.snuba_insert(
- (
- 2,
- "insert",
- {
- "event_id": event_id,
- "primary_hash": group_hash,
- "group_id": group_id if group_id else int(group_hash[:16], 16),
- "project_id": self.project.id,
- "message": "message",
- "platform": "python",
- "datetime": ts.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
- "data": {"received": time.mktime(ts.timetuple())},
- },
- )
- )
- return event_id
- @mock.patch("sentry.utils.metrics.incr")
- def test_basic(self, mock_metrics_incr) -> None:
- now = datetime.now()
- self._insert_event_for_time(now)
- query = (
- Query(match=Entity("events"))
- .set_select([Function("count", [], "count")])
- .set_groupby([Column("project_id")])
- .set_where(
- [
- Condition(Column("project_id"), Op.EQ, self.project.id),
- Condition(Column("timestamp"), Op.GTE, now - timedelta(days=1)),
- Condition(Column("timestamp"), Op.LT, now + timedelta(days=1)),
- ]
- )
- )
- request = Request(dataset="events", app_id="tests", query=query)
- result = snuba.raw_snql_query(request, referrer="referrer_not_in_enum")
- assert len(result["data"]) == 1
- assert result["data"][0] == {"count": 1, "project_id": self.project.id}
- mock_metrics_incr.assert_any_call(
- "snql.sdk.api.new_referrers", tags={"referrer": "referrer_not_in_enum"}
- )
- def test_cache(self):
- """Minimal test to verify if use_cache works"""
- results = snuba.raw_snql_query(
- Request(
- dataset="events",
- app_id="tests",
- query=Query(
- Entity("events"),
- select=[Column("event_id")],
- where=[
- Condition(Column("project_id"), Op.EQ, self.project.id),
- Condition(Column("timestamp"), Op.GTE, timezone.now() - timedelta(days=1)),
- Condition(Column("timestamp"), Op.LT, timezone.now()),
- ],
- limit=Limit(1),
- ),
- ),
- use_cache=True,
- )
- assert results["data"] == []
|