Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/sentry/api/endpoints/group_details.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ def _get_context_plugins(self, request: Request, group):

@staticmethod
def __group_hourly_daily_stats(group: Group, environment_ids: Sequence[int]):
get_range = functools.partial(tsdb.get_range, environment_ids=environment_ids)
get_range = functools.partial(
tsdb.get_range,
environment_ids=environment_ids,
tenant_ids={"organization_id": group.project.organization_id},
)
model = get_issue_tsdb_group_model(group.issue_category)
now = timezone.now()
hourly_stats = tsdb.rollup(
Expand Down
5 changes: 4 additions & 1 deletion src/sentry/api/endpoints/group_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ def get(self, request: Request, group) -> Response:
raise ResourceDoesNotExist

data = tsdb.get_range(
model=tsdb.models.group, keys=[group.id], **self._parse_args(request, environment_id)
model=tsdb.models.group,
keys=[group.id],
**self._parse_args(request, environment_id),
tenant_ids={"organization_id": group.project.organization_id},
)[group.id]

return Response(data)
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ def get(self, request: Request, sentry_app) -> Response:
"""

views = tsdb.get_range(
model=tsdb.models.sentry_app_viewed, keys=[sentry_app.id], **self._parse_args(request)
model=tsdb.models.sentry_app_viewed,
keys=[sentry_app.id],
**self._parse_args(request),
tenant_ids={"organization_id": sentry_app.owner.id},
)[sentry_app.id]

component_interactions = tsdb.get_range(
Expand All @@ -39,6 +42,7 @@ def get(self, request: Request, sentry_app) -> Response:
for component in sentry_app.components.all()
],
**self._parse_args(request),
tenant_ids={"organization_id": sentry_app.owner.id},
)

return Response(
Expand Down
5 changes: 4 additions & 1 deletion src/sentry/api/endpoints/organization_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,10 @@ def get(self, request: Request, organization) -> Response:
if stat_model is None:
raise ValueError(f"Invalid group: {group}, stat: {stat}")
data = tsdb.get_range(
model=stat_model, keys=keys, **self._parse_args(request, **query_kwargs)
model=stat_model,
keys=keys,
**self._parse_args(request, **query_kwargs),
tenant_ids={"organization_id": organization.id},
)

if group == "organization":
Expand Down
5 changes: 4 additions & 1 deletion src/sentry/api/endpoints/project_group_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ def get(self, request: Request, project) -> Response:
return Response(status=204)

data = tsdb.get_range(
model=tsdb.models.group, keys=group_ids, **self._parse_args(request, environment_id)
model=tsdb.models.group,
keys=group_ids,
**self._parse_args(request, environment_id),
tenant_ids={"organization_id": project.organization_id},
)

return Response({str(k): v for k, v in data.items()})
7 changes: 6 additions & 1 deletion src/sentry/api/endpoints/project_servicehook_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ def get(self, request: Request, project, hook_id) -> Response:

stats = {}
for model, name in ((tsdb.models.servicehook_fired, "total"),):
result = tsdb.get_range(model=model, keys=[hook.id], **stat_args)[hook.id]
result = tsdb.get_range(
model=model,
keys=[hook.id],
**stat_args,
tenant_ids={"organization_id": project.organization_id},
)[hook.id]
for ts, count in result:
stats.setdefault(int(ts), {})[name] = count

Expand Down
5 changes: 4 additions & 1 deletion src/sentry/api/endpoints/project_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ def get(self, request: Request, project) -> Response:
raise ValueError("Invalid stat: %s" % stat)

data = tsdb.get_range(
model=stat_model, keys=[project.id], **self._parse_args(request, **query_kwargs)
model=stat_model,
keys=[project.id],
**self._parse_args(request, **query_kwargs),
tenant_ids={"organization_id": project.organization_id},
)[project.id]

return Response(data)
1 change: 1 addition & 0 deletions src/sentry/api/endpoints/team_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def get(self, request: Request, team) -> Response:
model=tsdb.models.project,
keys=[p.id for p in projects],
**self._parse_args(request, environment_id),
tenant_ids={"organization_id": team.organization_id},
).values()
)

Expand Down
3 changes: 3 additions & 0 deletions src/sentry/api/serializers/models/group_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,13 @@ def query_tsdb(self, groups: Sequence[Group], query_params, **kwargs):
except Environment.DoesNotExist:
stats = {g.id: tsdb.make_series(0, **query_params) for g in groups}
else:
org_id = groups[0].project.organization_id if groups else None
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assumes all groups in the list belong to a single org, let me know if this assumption is incorrect.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that assumption seems correct. is groups guaranteed to have at least one element though?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah right, if groups will evaluate to False if it is empty.

stats = tsdb.get_range(
model=tsdb.models.group,
keys=[g.id for g in groups],
environment_ids=environment and [environment.id],
**query_params,
tenant_ids={"organization_id": org_id} if org_id else None,
)

return stats
Expand Down Expand Up @@ -344,6 +346,7 @@ def query_tsdb(
generic_issue_ids.append(group.id)

results = {}

get_range = functools.partial(
snuba_tsdb.get_range,
environment_ids=environment_ids,
Expand Down
8 changes: 7 additions & 1 deletion src/sentry/digests/notifications.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,13 @@ def fetch_state(project: Project, records: Sequence[Record]) -> Mapping[str, Any
"rules": Rule.objects.in_bulk(
itertools.chain.from_iterable(record.value.rules for record in records)
),
"event_counts": tsdb.get_sums(tsdb.models.group, list(groups.keys()), start, end),
"event_counts": tsdb.get_sums(
tsdb.models.group,
list(groups.keys()),
start,
end,
tenant_ids={"organization_id": project.organization_id},
),
"user_counts": tsdb.get_distinct_counts_totals(
tsdb.models.users_affected_by_group, list(groups.keys()), start, end
),
Expand Down
1 change: 1 addition & 0 deletions src/sentry/models/groupsnooze.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ def test_frequency_rates(self):
keys=[self.group_id],
start=start,
end=end,
tenant_ids={"organization_id": self.group.project.organization_id},
)[self.group_id]

if rate >= self.count:
Expand Down
2 changes: 2 additions & 0 deletions src/sentry/rules/conditions/event_frequency.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ def query_hook(
environment_id=environment_id,
use_cache=True,
jitter_value=event.group_id,
tenant_ids={"organization_id": event.group.project.organization_id},
)
return sums[event.group_id]

Expand Down Expand Up @@ -364,6 +365,7 @@ def query_hook(
environment_id=environment_id,
use_cache=True,
jitter_value=event.group_id,
tenant_ids={"organization_id": event.group.project.organization_id},
)[event.group_id]
if issue_count > avg_sessions_in_interval:
# We want to better understand when and why this is happening, so we're logging it for now
Expand Down
12 changes: 11 additions & 1 deletion src/sentry/tsdb/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,15 @@ def delete(self, models, keys, start=None, end=None, timestamp=None, environment
raise NotImplementedError

def get_range(
self, model, keys, start, end, rollup=None, environment_ids=None, use_cache=False
self,
model,
keys,
start,
end,
rollup=None,
environment_ids=None,
use_cache=False,
tenant_ids=None,
):
"""
To get a range of data for group ID=[1, 2, 3]:
Expand All @@ -379,6 +387,7 @@ def get_sums(
environment_id=None,
use_cache=False,
jitter_value=None,
tenant_ids=None,
):
range_set = self.get_range(
model,
Expand All @@ -389,6 +398,7 @@ def get_sums(
environment_ids=[environment_id] if environment_id is not None else None,
use_cache=use_cache,
jitter_value=jitter_value,
tenant_ids=tenant_ids,
)
sum_set = {key: sum(p for _, p in points) for (key, points) in range_set.items()}
return sum_set
Expand Down
1 change: 1 addition & 0 deletions src/sentry/tsdb/dummy.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def get_range(
environment_ids=None,
use_cache=False,
jitter_value=None,
tenant_ids=None,
):
self.validate_arguments([model], environment_ids if environment_ids is not None else [None])
_, series = self.get_optimal_rollup_series(start, end, rollup)
Expand Down
1 change: 1 addition & 0 deletions src/sentry/tsdb/inmemory.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def get_range(
environment_ids=None,
use_cache=False,
jitter_value=None,
tenant_ids=None,
):
self.validate_arguments([model], environment_ids if environment_ids is not None else [None])

Expand Down
1 change: 1 addition & 0 deletions src/sentry/tsdb/redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ def get_range(
environment_ids=None,
use_cache=False,
jitter_value=None,
tenant_ids=None,
):
"""
To get a range of data for group ID=[1, 2, 3]:
Expand Down
1 change: 1 addition & 0 deletions src/sentry/utils/suspect_resolutions/metric_correlation.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def is_issue_error_rate_correlated(
rollup=600,
start=start_time,
end=end_time,
tenant_ids={"organization_id": resolved_issue.project.organization_id},
)

x = [events for _, events in data[resolved_issue.id]]
Expand Down