Skip to content

Commit

Permalink
ref: fix more types for TSDB (#72903)
Browse files Browse the repository at this point in the history
<!-- Describe your PR here. -->
  • Loading branch information
asottile-sentry authored Jun 17, 2024
1 parent a9c1599 commit c0848c3
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 43 deletions.
9 changes: 5 additions & 4 deletions src/sentry/tsdb/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ONE_DAY = ONE_HOUR * 24

TSDBKey = TypeVar("TSDBKey", str, int)
TSDBItem = TypeVar("TSDBItem", str, int)


class IncrMultiOptions(TypedDict):
Expand Down Expand Up @@ -661,13 +662,13 @@ def get_most_frequent_series(
def get_frequency_series(
self,
model: TSDBModel,
items: Mapping[str, Sequence[str]],
items: Mapping[TSDBKey, Sequence[TSDBItem]],
start: datetime,
end: datetime | None = None,
rollup: int | None = None,
environment_id: int | None = None,
tenant_ids: dict[str, str | int] | None = None,
) -> dict[str, list[tuple[float, dict[str, float]]]]:
) -> dict[TSDBKey, list[tuple[float, dict[TSDBItem, float]]]]:
"""
Retrieve the frequency of known items in a table over time.
Expand Down Expand Up @@ -708,10 +709,10 @@ def merge_frequencies(
self,
model: TSDBModel,
destination: str,
sources: list[str],
sources: Sequence[TSDBKey],
timestamp: datetime | None = None,
environment_ids: Iterable[int] | None = None,
):
) -> None:
"""
Transfer all frequency tables from the source keys to the destination
key.
Expand Down
28 changes: 18 additions & 10 deletions src/sentry/tsdb/dummy.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from collections.abc import Mapping, Sequence
from collections.abc import Iterable, Mapping, Sequence
from datetime import datetime

from sentry.tsdb.base import BaseTSDB, TSDBKey, TSDBModel
from sentry.tsdb.base import BaseTSDB, TSDBItem, TSDBKey, TSDBModel


class DummyTSDB(BaseTSDB):
Expand Down Expand Up @@ -120,13 +120,14 @@ def get_most_frequent_series(

def get_frequency_series(
self,
model,
items: Mapping[str, Sequence[str]],
start,
end=None,
rollup=None,
environment_id=None,
):
model: TSDBModel,
items: Mapping[TSDBKey, Sequence[TSDBItem]],
start: datetime,
end: datetime | None = None,
rollup: int | None = None,
environment_id: int | None = None,
tenant_ids: dict[str, str | int] | None = None,
) -> dict[TSDBKey, list[tuple[float, dict[TSDBItem, float]]]]:
self.validate_arguments([model], [environment_id])
rollup, series = self.get_optimal_rollup_series(start, end, rollup)

Expand All @@ -153,7 +154,14 @@ def get_frequency_totals(
results[key] = {member: 0.0 for member in members}
return results

def merge_frequencies(self, model, destination, sources, timestamp=None, environment_ids=None):
def merge_frequencies(
self,
model: TSDBModel,
destination: str,
sources: Sequence[TSDBKey],
timestamp: datetime | None = None,
environment_ids: Iterable[int] | None = None,
) -> None:
environment_ids = list(
(set(environment_ids) if environment_ids is not None else set()).union([None])
)
Expand Down
28 changes: 18 additions & 10 deletions src/sentry/tsdb/inmemory.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from collections import Counter, defaultdict
from collections.abc import Mapping, Sequence
from collections.abc import Iterable, Mapping, Sequence
from datetime import datetime

from django.utils import timezone

from sentry.tsdb.base import BaseTSDB, TSDBKey, TSDBModel
from sentry.tsdb.base import BaseTSDB, TSDBItem, TSDBKey, TSDBModel
from sentry.utils.dates import to_datetime


Expand Down Expand Up @@ -286,13 +286,14 @@ def get_most_frequent_series(

def get_frequency_series(
self,
model,
items: Mapping[str, Sequence[str]],
start,
end=None,
rollup=None,
environment_id=None,
):
model: TSDBModel,
items: Mapping[TSDBKey, Sequence[TSDBItem]],
start: datetime,
end: datetime | None = None,
rollup: int | None = None,
environment_id: int | None = None,
tenant_ids: dict[str, str | int] | None = None,
) -> dict[TSDBKey, list[tuple[float, dict[TSDBItem, float]]]]:
self.validate_arguments([model], [environment_id])

rollup, series = self.get_optimal_rollup_series(start, end, rollup)
Expand Down Expand Up @@ -330,7 +331,14 @@ def get_frequency_totals(

return results

def merge_frequencies(self, model, destination, sources, timestamp=None, environment_ids=None):
def merge_frequencies(
self,
model: TSDBModel,
destination: str,
sources: Sequence[TSDBKey],
timestamp: datetime | None = None,
environment_ids: Iterable[int] | None = None,
) -> None:
environment_ids = (set(environment_ids) if environment_ids is not None else set()).union(
[None]
)
Expand Down
19 changes: 9 additions & 10 deletions src/sentry/tsdb/redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from django.utils.encoding import force_bytes
from redis.client import Script

from sentry.tsdb.base import BaseTSDB, IncrMultiOptions, TSDBKey, TSDBModel
from sentry.tsdb.base import BaseTSDB, IncrMultiOptions, TSDBItem, TSDBKey, TSDBModel
from sentry.utils.dates import to_datetime
from sentry.utils.redis import (
check_cluster_versions,
Expand Down Expand Up @@ -915,13 +915,13 @@ def unpack_response(response: rb.Promise) -> dict[str, float]:
def get_frequency_series(
self,
model: TSDBModel,
items: Mapping[str, Sequence[str]],
items: Mapping[TSDBKey, Sequence[TSDBItem]],
start: datetime,
end: datetime | None = None,
rollup: int | None = None,
environment_id: int | None = None,
tenant_ids: dict[str, str | int] | None = None,
) -> dict[str, list[tuple[float, dict[str, float]]]]:
) -> dict[TSDBKey, list[tuple[float, dict[TSDBItem, float]]]]:
self.validate_arguments([model], [environment_id])

if not self.enable_frequency_sketches:
Expand All @@ -935,7 +935,7 @@ def get_frequency_series(
# provided) with the original input values to compose the result.
items = {k: list(members) for k, members in items.items()}

commands: dict[str, list[tuple[Script, list[str], list[str | int]]]] = {}
commands: dict[TSDBKey, list[tuple[Script, list[str], list[str | int]]]] = {}

arguments = ["ESTIMATE"] + list(self.DEFAULT_SKETCH_PARAMETERS)
for item_key, members in items.items():
Expand All @@ -949,7 +949,7 @@ def get_frequency_series(

commands[item_key] = [(CountMinScript, ks, arguments + list(members))]

results: dict[str, list[tuple[float, dict[str, float]]]] = {}
results: dict[TSDBKey, list[tuple[float, dict[TSDBItem, float]]]] = {}

cluster, _ = self.get_cluster(environment_id)
for _key, responses in cluster.execute_commands(commands).items():
Expand Down Expand Up @@ -992,10 +992,10 @@ def merge_frequencies(
self,
model: TSDBModel,
destination: str,
sources: list[str],
sources: Sequence[TSDBKey],
timestamp: datetime | None = None,
environment_ids: Iterable[int] | None = None,
):
) -> None:
ids = (set(environment_ids) if environment_ids is not None else set()).union([None])

self.validate_arguments([model], ids)
Expand All @@ -1013,9 +1013,8 @@ def merge_frequencies(
rollups.append((rollup, [to_datetime(item) for item in rollup_series]))

for (cluster, durable), _ids in self.get_cluster_groups(ids):
exports: dict[str, list[tuple[Script, list[str], list[str]] | list[str]]] = defaultdict(
list
)
exports: dict[TSDBKey, list[tuple[Script, list[str], list[str]] | list[str]]]
exports = defaultdict(list)

for source in sources:
for rollup, series in rollups:
Expand Down
18 changes: 9 additions & 9 deletions src/sentry/tsdb/snuba.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from sentry.ingest.inbound_filters import FILTER_STAT_KEYS_TO_VALUES
from sentry.issues.query import manual_group_on_time_aggregation
from sentry.snuba.dataset import Dataset
from sentry.tsdb.base import BaseTSDB, TSDBKey, TSDBModel
from sentry.tsdb.base import BaseTSDB, TSDBItem, TSDBKey, TSDBModel
from sentry.utils import outcomes, snuba
from sentry.utils.dates import to_datetime
from sentry.utils.snuba import (
Expand Down Expand Up @@ -884,14 +884,14 @@ def get_most_frequent_series(

def get_frequency_series(
self,
model,
items: Mapping[str, Sequence[str]],
start,
end=None,
rollup=None,
environment_id=None,
tenant_ids=None,
):
model: TSDBModel,
items: Mapping[TSDBKey, Sequence[TSDBItem]],
start: datetime,
end: datetime | None = None,
rollup: int | None = None,
environment_id: int | None = None,
tenant_ids: dict[str, str | int] | None = None,
) -> dict[TSDBKey, list[tuple[float, dict[TSDBItem, float]]]]:
result = self.get_data(
model,
items,
Expand Down

0 comments on commit c0848c3

Please sign in to comment.