コード例 #1
0
ファイル: test_reports.py プロジェクト: ForkRepo/sentry
    def test_integration(self, has_feature):
        Project.objects.all().delete()

        now = datetime(2016, 9, 12, tzinfo=pytz.utc)

        has_feature.side_effect = lambda name, *a, **k: {
            'organizations:reports:deliver': True,
            'organizations:reports:prepare': True,
        }.get(name, False)

        project = self.create_project(
            organization=self.organization,
            team=self.team,
        )

        tsdb.incr(
            tsdb.models.project,
            project.id,
            now - timedelta(days=1),
        )

        member_set = set(project.team.member_set.all())

        with self.tasks():
            prepare_reports(timestamp=to_timestamp(now))
            assert len(mail.outbox) == len(member_set) == 1

            message = mail.outbox[0]
            assert self.organization.name in message.subject
コード例 #2
0
    def test_simple(self):
        self.login_as(user=self.user)

        project = self.create_project()
        group1 = self.create_group(project=project)
        group2 = self.create_group(project=project)

        url = u'/api/0/projects/{}/{}/issues/stats/'.format(
            project.organization.slug,
            project.slug,
        )
        response = self.client.get('%s?id=%s&id=%s' % (url, group1.id, group2.id), format='json')

        tsdb.incr(tsdb.models.group, group1.id, count=3)

        response = self.client.get('%s?id=%s&id=%s' % (url, group1.id, group2.id), format='json')

        assert response.status_code == 200, response.content
        assert len(response.data) == 2
        assert six.text_type(group1.id) in response.data
        assert six.text_type(group2.id) in response.data

        group_data = response.data[six.text_type(group1.id)]
        assert group_data[-1][1] == 3, response.data
        for point in group_data[:-1]:
            assert point[1] == 0
        assert len(group_data) == 24
コード例 #3
0
ファイル: test_reports.py プロジェクト: pythorn/sentry
    def test_integration(self):
        Project.objects.all().delete()

        now = datetime(2016, 9, 12, tzinfo=pytz.utc)

        project = self.create_project(
            organization=self.organization,
            team=self.team,
            date_added=now - timedelta(days=90),
        )

        tsdb.incr(
            tsdb.models.project,
            project.id,
            now - timedelta(days=1),
        )

        member_set = set(project.team.member_set.all())

        with self.tasks():
            prepare_reports(timestamp=to_timestamp(now))
            assert len(mail.outbox) == len(member_set) == 1

            message = mail.outbox[0]
            assert self.organization.name in message.subject
コード例 #4
0
ファイル: metrics.py プロジェクト: hyserver/sentry
def _incr_internal(key, amount):
    from sentry.app import tsdb

    sample_rate = settings.SENTRY_METRICS_SAMPLE_RATE
    if _should_sample():
        amount = _sampled_value(amount)
        tsdb.incr(tsdb.models.internal, key, count=amount)
コード例 #5
0
    def test_simple(self):
        self.login_as(user=self.user)

        project = self.create_project()
        group1 = self.create_group(project=project)
        group2 = self.create_group(project=project)

        url = reverse('sentry-api-0-project-group-stats', kwargs={
            'organization_slug': project.organization.slug,
            'project_slug': project.slug,
        })
        response = self.client.get('%s?id=%s&id=%s' % (url, group1.id, group2.id),
                                   format='json')

        tsdb.incr(tsdb.models.group, group1.id, count=3)

        response = self.client.get('%s?id=%s&id=%s' % (url, group1.id, group2.id),
                                   format='json')

        assert response.status_code == 200, response.content
        assert len(response.data) == 2
        assert str(group1.id) in response.data
        assert str(group2.id) in response.data

        group_data = response.data[str(group1.id)]
        assert group_data[-1][1] == 3, response.data
        for point in group_data[:-1]:
            assert point[1] == 0
        assert len(group_data) == 24
コード例 #6
0
ファイル: test_reports.py プロジェクト: alshopov/sentry
    def test_integration(self):
        Project.objects.all().delete()

        now = datetime(2016, 9, 12, tzinfo=pytz.utc)

        project = self.create_project(
            organization=self.organization,
            team=self.team,
            date_added=now - timedelta(days=90),
        )

        tsdb.incr(
            tsdb.models.project,
            project.id,
            now - timedelta(days=1),
        )

        member_set = set(project.team.member_set.all())

        with self.tasks(), \
                mock.patch.object(tsdb, 'get_earliest_timestamp') as get_earliest_timestamp:
            # Ensure ``get_earliest_timestamp`` is relative to the fixed
            # "current" timestamp -- this prevents filtering out data points
            # that would be considered expired relative to the *actual* current
            # timestamp.
            get_earliest_timestamp.return_value = to_timestamp(now - timedelta(days=60))

            prepare_reports(timestamp=to_timestamp(now))
            assert len(mail.outbox) == len(member_set) == 1

            message = mail.outbox[0]
            assert self.organization.name in message.subject
コード例 #7
0
ファイル: test_group_stats.py プロジェクト: DZTPY/sentry
    def test_simple(self):
        self.login_as(user=self.user)

        group1 = self.create_group()
        group2 = self.create_group()

        url = reverse('sentry-api-0-group-stats', kwargs={
            'group_id': group1.id,
        })
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        for point in response.data:
            assert point[1] == 0
        assert len(response.data) == 24

        tsdb.incr(tsdb.models.group, group1.id, count=3)
        tsdb.incr(tsdb.models.group, group2.id, count=5)

        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #8
0
ファイル: metrics.py プロジェクト: noah-lee/sentry
def _incr_internal(key, instance=None, tags=None, amount=1):
    from sentry.app import tsdb

    if _should_sample():
        amount = _sampled_value(amount)
        if instance:
            full_key = '{}.{}'.format(key, instance)
        else:
            full_key = key
        tsdb.incr(tsdb.models.internal, full_key, count=amount)
コード例 #9
0
ファイル: metrics.py プロジェクト: carriercomm/sentry-1
def _incr_internal(key, instance=None, tags=None, amount=1):
    from sentry.app import tsdb

    sample_rate = settings.SENTRY_METRICS_SAMPLE_RATE
    if _should_sample():
        amount = _sampled_value(amount)
        if instance:
            full_key = '{}.{}'.format(key, instance)
        else:
            full_key = key
        tsdb.incr(tsdb.models.internal, full_key, count=amount)
コード例 #10
0
ファイル: test_event_frequency.py プロジェクト: dcvz/sentry
    def test_more_than_zero(self):
        event = self.get_event()
        rule = self.get_rule({
            'interval': Interval.ONE_MINUTE,
            'value': '0',
        })

        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=1)
        self.assertPasses(rule, event)
コード例 #11
0
ファイル: metrics.py プロジェクト: DZTPY/sentry
def incr(key, amount=1):
    from sentry.app import tsdb

    sample_rate = settings.SENTRY_METRICS_SAMPLE_RATE

    statsd.incr(_get_key(key), amount,
                rate=sample_rate)

    if sample_rate >= 1 or random() >= sample_rate:
        if sample_rate < 1:
            amount = int(amount * (1.0 / sample_rate))
        tsdb.incr(tsdb.models.internal, key, count=amount)
コード例 #12
0
ファイル: test_event_frequency.py プロジェクト: dcvz/sentry
    def test_doesnt_send_consecutive(self):
        event = self.get_event()
        value = 10
        rule = self.get_rule({
            'interval': Interval.ONE_HOUR,
            'value': six.text_type(value),
        })

        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=value + 1)
        self.assertPasses(rule, event)

        self.assertDoesNotPass(rule, event, rule_last_active=timezone.now())
コード例 #13
0
    def test_simple(self):
        self.login_as(user=self.user)

        org = self.create_organization(owner=self.user, name='baz')

        tsdb.incr(tsdb.models.organization_total_received, org.id, count=3)

        url = reverse('sentry-api-0-organization-stats', args=[org.slug])
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #14
0
ファイル: metrics.py プロジェクト: 280185386/sentry
def _incr_internal(key, instance=None, tags=None, amount=1):
    from sentry.app import tsdb

    if _should_sample():
        amount = _sampled_value(amount)
        if instance:
            full_key = '{}.{}'.format(key, instance)
        else:
            full_key = key

        try:
            tsdb.incr(tsdb.models.internal, full_key, count=amount)
        except Exception:
            logger = logging.getLogger('sentry.errors')
            logger.exception('Unable to incr internal metric')
コード例 #15
0
ファイル: unmerge.py プロジェクト: Kayle009/sentry
def repair_tsdb_data(caches, project, events):
    counters, sets, frequencies = collect_tsdb_data(caches, project, events)

    for timestamp, data in counters.items():
        for model, keys in data.items():
            for (key, environment_id), value in keys.items():
                tsdb.incr(model, key, timestamp, value, environment_id=environment_id)

    for timestamp, data in sets.items():
        for model, keys in data.items():
            for (key, environment_id), values in keys.items():
                # TODO: This should use `record_multi` rather than `record`.
                tsdb.record(model, key, values, timestamp, environment_id=environment_id)

    for timestamp, data in frequencies.items():
        tsdb.record_frequency_multi(data.items(), timestamp)
コード例 #16
0
    def test_doesnt_send_consecutive(self):
        event = self.get_event()
        rule = self.get_rule({
            'interval': Interval.ONE_HOUR,
            'value': '10',
        })

        tsdb.incr(tsdb.models.group, event.group_id, count=11)

        rule = self.get_rule({
            'interval': Interval.ONE_HOUR,
            'value': '10',
        })
        self.assertPasses(rule, event)

        self.assertDoesNotPass(rule, event, rule_last_active=timezone.now())
コード例 #17
0
    def test_one_hour(self):
        event = self.get_event()
        rule = self.get_rule({
            'interval': Interval.ONE_HOUR,
            'value': '10',
        })
        self.assertDoesNotPass(rule, event)

        tsdb.incr(tsdb.models.group, event.group_id, count=11)

        rule.clear_cache(event)

        rule = self.get_rule({
            'interval': Interval.ONE_HOUR,
            'value': '10',
        })
        self.assertPasses(rule, event)
コード例 #18
0
ファイル: test_group_stats.py プロジェクト: zdecibel/sentry
    def test_simple(self):
        self.login_as(user=self.user)

        group1 = self.create_group()
        group2 = self.create_group()

        tsdb.incr(tsdb.models.group, group1.id, count=3)
        tsdb.incr(tsdb.models.group, group2.id, count=5)

        url = reverse('sentry-api-0-group-stats', kwargs={
            'group_id': group1.id,
        })
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #19
0
    def test_simple(self):
        self.login_as(user=self.user)

        project1 = self.create_project(owner=self.user, name='foo')
        project2 = self.create_project(owner=self.user, name='bar')

        tsdb.incr(tsdb.models.project, project1.id, count=3)
        tsdb.incr(tsdb.models.project, project2.id, count=5)

        url = reverse('sentry-api-0-project-stats', kwargs={
            'project_id': project1.id,
        })
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #20
0
    def test_simple(self):
        self.login_as(user=self.user)

        project1 = self.create_project(name="foo")
        project2 = self.create_project(name="bar")

        tsdb.incr(tsdb.models.project_total_received, project1.id, count=3)
        tsdb.incr(tsdb.models.project_total_received, project2.id, count=5)

        url = reverse(
            "sentry-api-0-project-stats",
            kwargs={"organization_slug": project1.organization.slug, "project_slug": project1.slug},
        )
        response = self.client.get(url, format="json")

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #21
0
    def test_simple(self):
        self.login_as(user=self.user)

        project1 = self.create_project(name='foo')
        project2 = self.create_project(name='bar')

        tsdb.incr(tsdb.models.project, project1.id, count=3)
        tsdb.incr(tsdb.models.project, project2.id, count=5)

        url = reverse('sentry-api-0-project-stats', kwargs={
            'organization_slug': project1.organization.slug,
            'project_slug': project1.slug,
        })
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #22
0
    def test_simple(self):
        self.login_as(user=self.user)

        team = self.create_team(owner=self.user, name='foo')
        project_1 = self.create_project(team=team, name='a')
        project_2 = self.create_project(team=team, name='b')
        team_2 = self.create_team(owner=self.user, name='bar')
        project_3 = self.create_project(team=team_2, name='c')

        tsdb.incr(tsdb.models.project, project_1.id, count=3)
        tsdb.incr(tsdb.models.project, project_2.id, count=5)
        tsdb.incr(tsdb.models.project, project_3.id, count=10)

        url = reverse('sentry-api-0-team-stats',
                      kwargs={
                          'organization_slug': team.organization.slug,
                          'team_slug': team.slug,
                      })
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 8, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #23
0
ファイル: unmerge.py プロジェクト: zeuskingzb/sentry
def repair_tsdb_data(caches, project, events):
    counters, sets, frequencies = collect_tsdb_data(caches, project, events)

    for timestamp, data in counters.items():
        for model, keys in data.items():
            for (key, environment_id), value in keys.items():
                tsdb.incr(model,
                          key,
                          timestamp,
                          value,
                          environment_id=environment_id)

    for timestamp, data in sets.items():
        for model, keys in data.items():
            for (key, environment_id), values in keys.items():
                # TODO: This should use `record_multi` rather than `record`.
                tsdb.record(model,
                            key,
                            values,
                            timestamp,
                            environment_id=environment_id)

    for timestamp, data in frequencies.items():
        tsdb.record_frequency_multi(data.items(), timestamp)
コード例 #24
0
ファイル: test_group_stats.py プロジェクト: ycaihua/sentry-1
    def test_simple(self):
        self.login_as(user=self.user)

        group1 = self.create_group()
        group2 = self.create_group()

        url = '/api/0/issues/{}/stats/'.format(group1.id)
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        for point in response.data:
            assert point[1] == 0
        assert len(response.data) == 24

        tsdb.incr(tsdb.models.group, group1.id, count=3)
        tsdb.incr(tsdb.models.group, group2.id, count=5)

        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 3, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #25
0
    def test_simple(self):
        self.login_as(user=self.user)

        project = self.create_project()
        group1 = self.create_group(project=project)
        group2 = self.create_group(project=project)

        url = f"/api/0/projects/{project.organization.slug}/{project.slug}/issues/stats/"
        response = self.client.get(f"{url}?id={group1.id}&id={group2.id}", format="json")

        tsdb.incr(tsdb.models.group, group1.id, count=3)

        response = self.client.get(f"{url}?id={group1.id}&id={group2.id}", format="json")

        assert response.status_code == 200, response.content
        assert len(response.data) == 2
        assert str(group1.id) in response.data
        assert str(group2.id) in response.data

        group_data = response.data[str(group1.id)]
        assert group_data[-1][1] == 3, response.data
        for point in group_data[:-1]:
            assert point[1] == 0
        assert len(group_data) == 24
コード例 #26
0
    def test_simple(self):
        self.login_as(user=self.user)

        team = self.create_team(owner=self.user, name='foo')
        project_1 = self.create_project(team=team, name='a')
        project_2 = self.create_project(team=team, name='b')
        team_2 = self.create_team(owner=self.user, name='bar')
        project_3 = self.create_project(team=team_2, name='b')

        tsdb.incr(tsdb.models.project, project_1.id, count=3)
        tsdb.incr(tsdb.models.project, project_2.id, count=5)
        tsdb.incr(tsdb.models.project, project_3.id, count=10)

        url = reverse('sentry-api-0-team-stats', kwargs={
            'team_id': team.id,
        })
        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data[-1][1] == 8, response.data
        for point in response.data[:-1]:
            assert point[1] == 0
        assert len(response.data) == 24
コード例 #27
0
ファイル: test_event_frequency.py プロジェクト: ob3/sentry
    def test_one_day(self):
        event = self.get_event()
        value = 10
        rule = self.get_rule({
            'interval': Interval.ONE_DAY,
            'value': str(value),
        })

        tsdb.incr(
            tsdb.models.group,
            event.group_id,
            count=value + 1,
            timestamp=timezone.now() - timedelta(hours=36),
        )
        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=value)
        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=1)
        self.assertPasses(rule, event)
コード例 #28
0
    def test_one_hour(self):
        event = self.get_event()
        value = 10
        rule = self.get_rule({
            'interval': Interval.ONE_HOUR,
            'value': str(value),
        })

        tsdb.incr(
            tsdb.models.group,
            event.group_id,
            count=value + 1,
            timestamp=timezone.now() - timedelta(minutes=90),
        )
        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=value)
        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=1)
        self.assertPasses(rule, event)
コード例 #29
0
ファイル: test_event_frequency.py プロジェクト: dcvz/sentry
    def test_one_day(self):
        event = self.get_event()
        value = 10
        rule = self.get_rule({
            'interval': Interval.ONE_DAY,
            'value': six.text_type(value),
        })

        tsdb.incr(
            tsdb.models.group,
            event.group_id,
            count=value + 1,
            timestamp=timezone.now() - timedelta(hours=36),
        )
        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=value)
        self.assertDoesNotPass(rule, event)

        rule.clear_cache(event)
        tsdb.incr(tsdb.models.group, event.group_id, count=1)
        self.assertPasses(rule, event)
コード例 #30
0
ファイル: tests.py プロジェクト: BlueMoebius/sentry
    def create_counts(self, project, when, amount, offset=0):
        date = when - timedelta(seconds=offset)

        tsdb.incr(tsdb.models.project, project.id, date, amount)
コード例 #31
0
 def increment(self, event, count, timestamp=None):
     tsdb.incr(tsdb.models.group, event.group_id, count=count, timestamp=timestamp)
コード例 #32
0
ファイル: tests.py プロジェクト: yan5lang/sentry
    def create_counts(self, project, when, amount, offset=0):
        date = when - timedelta(seconds=offset)

        tsdb.incr(tsdb.models.project, project.id, date, amount)