123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- from __future__ import absolute_import
- from datetime import datetime, timedelta
- import pytest
- import time
- import uuid
- from sentry.testutils import SnubaTestCase
- from sentry.utils import snuba
- class SnubaTest(SnubaTestCase):
- def _insert_event_for_time(self, ts, hash='a' * 32, group_id=None):
- self.snuba_insert({
- 'event_id': uuid.uuid4().hex,
- 'primary_hash': hash,
- 'group_id': group_id if group_id else int(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()),
- }
- })
- def test(self):
- "This is just a simple 'hello, world' example test."
- now = datetime.now()
- events = [{
- 'event_id': 'x' * 32,
- 'primary_hash': '1' * 32,
- 'group_id': 1,
- 'project_id': self.project.id,
- 'message': 'message',
- 'platform': 'python',
- 'datetime': now.strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
- 'data': {
- 'received': time.mktime(now.timetuple()),
- }
- }]
- self.snuba_insert(events)
- assert snuba.query(
- start=now - timedelta(days=1),
- end=now + timedelta(days=1),
- groupby=['project_id'],
- filter_keys={'project_id': [self.project.id]},
- ) == {self.project.id: 1}
- def test_fail(self):
- now = datetime.now()
- with pytest.raises(snuba.SnubaError):
- snuba.query(
- start=now - timedelta(days=1),
- end=now + timedelta(days=1),
- filter_keys={'project_id': [self.project.id]},
- groupby=[")("],
- )
- def test_organization_retention_respected(self):
- base_time = datetime.utcnow()
- self._insert_event_for_time(base_time - timedelta(minutes=1))
- self._insert_event_for_time(base_time - timedelta(days=2))
- def _get_event_count():
- # attempt to query back 90 days
- return snuba.query(
- start=base_time - timedelta(days=90),
- end=base_time + timedelta(days=1),
- groupby=['project_id'],
- filter_keys={
- 'project_id': [self.project.id],
- },
- )
- assert _get_event_count() == {self.project.id: 2}
- with self.options({'system.event-retention-days': 1}):
- assert _get_event_count() == {self.project.id: 1}
- def test_organization_retention_larger_than_end_date(self):
- base_time = datetime.utcnow()
- with self.options({'system.event-retention-days': 1}):
- assert snuba.query(
- start=base_time - timedelta(days=90),
- end=base_time - timedelta(days=60),
- groupby=['project_id'],
- filter_keys={
- 'project_id': [self.project.id],
- },
- ) == {}
- def test_use_group_id(self):
- base_time = datetime.utcnow()
- group = self.create_group()
- self._insert_event_for_time(base_time, group_id=group.id)
- with self.options({'snuba.use_group_id_column': True}):
- # verify filter_keys and aggregation
- assert snuba.query(
- start=base_time - timedelta(days=1),
- end=base_time + timedelta(days=1),
- groupby=['issue'],
- filter_keys={
- 'project_id': [self.project.id],
- 'issue': [group.id]
- },
- ) == {group.id: 1}
- # verify raw_query selecting issue row
- assert snuba.raw_query(
- start=base_time - timedelta(days=1),
- end=base_time + timedelta(days=1),
- selected_columns=['issue', 'timestamp'],
- filter_keys={
- 'project_id': [self.project.id],
- 'issue': [group.id]
- },
- )['data'] == [{
- 'issue': group.id,
- 'timestamp': base_time.strftime('%Y-%m-%dT%H:%M:%S+00:00'),
- }]
|