Skip to content
Open
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
54 changes: 1 addition & 53 deletions snuba/web/rpc/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from google.protobuf.message import Message as ProtobufMessage
from sentry_protos.snuba.v1.downsampled_storage_pb2 import DownsampledStorageConfig
from sentry_protos.snuba.v1.error_pb2 import Error as ErrorProto
from sentry_protos.snuba.v1.request_common_pb2 import RequestMeta, TraceItemType
from sentry_protos.snuba.v1.request_common_pb2 import RequestMeta
from sentry_sdk import traces

from snuba import environment
Expand Down Expand Up @@ -38,7 +38,6 @@
from snuba.web.rpc.common.query_info import extract_query_info_tags
from snuba.web.rpc.storage_routing.routing_strategies.storage_routing import (
RoutingContext,
RoutingDecision,
)
from snuba.web.rpc.storage_routing.routing_strategy_selector import (
RoutingStrategySelector,
Expand Down Expand Up @@ -101,52 +100,6 @@ def _set_rpc_error_tags(in_msg: ProtobufMessage) -> None:
set_tag_and_attribute("request_id", str(meta.request_id))


class TraceItemDataResolver(Generic[Tin, Tout], metaclass=RegisteredClass):
def __init__(
self, timer: Timer | None = None, metrics_backend: MetricsBackend | None = None
) -> None:
self._timer = timer or Timer("endpoint_timing")
self._metrics_backend = metrics_backend or environment.metrics

@classmethod
def config_key(cls) -> str:
try:
trace_item_type = str(cls.trace_item_type())
except NotImplementedError:
trace_item_type = "base"
return f"{cls.endpoint_name()}__{trace_item_type}"

@classmethod
def endpoint_name(cls) -> str:
if cls.__name__ == "TraceItemDataResolver":
return cls.__name__
raise NotImplementedError

@classmethod
def trace_item_type(cls) -> TraceItemType.ValueType:
raise NotImplementedError

@classmethod
def get_from_trace_item_type(
cls,
trace_item_type: TraceItemType.ValueType,
) -> "type[TraceItemDataResolver[Tin, Tout]]":
registry = cls._registry
try:
shape = registry.get_class_from_name(f"{cls.endpoint_name()}__{trace_item_type}")
except InvalidConfigKeyError:
shape = registry.get_class_from_name(
f"{cls.endpoint_name()}__{TraceItemType.TRACE_ITEM_TYPE_UNSPECIFIED}"
)
return cast(
type["TraceItemDataResolver[Tin, Tout]"],
shape,
)

def resolve(self, in_msg: Tin, routing_decision: RoutingDecision) -> Tout:
raise NotImplementedError


class RPCEndpoint(Generic[Tin, Tout], metaclass=RegisteredClass):
def __init__(self, metrics_backend: MetricsBackend | None = None) -> None:
self._timer = Timer("endpoint_timing")
Expand All @@ -168,11 +121,6 @@ def version(cls) -> str:
def config_key(cls) -> str:
return f"{cls.__name__}__{cls.version()}"

def get_resolver(
self, trace_item_type: TraceItemType.ValueType
) -> TraceItemDataResolver[Tin, Tout]:
raise NotImplementedError

@property
def metrics(self) -> MetricsWrapper:
return MetricsWrapper(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from sentry_protos.snuba.v1.endpoint_time_series_pb2 import TimeSeriesRequest
from sentry_protos.snuba.v1.trace_item_attribute_pb2 import Reliability

from snuba.web.rpc.v1.resolvers.common.aggregation import ExtrapolationContext
from snuba.web.rpc.common.aggregation import ExtrapolationContext
from snuba.web.rpc.v1.visitors.time_series_request_visitor import (
GetSubformulaLabelsVisitor,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@
)

from snuba.protos.common import ARRAY_TYPES, PROTO_ARRAY_TYPE_TO_COLUMN
from snuba.web.rpc.common.aggregation import (
ExtrapolationContext,
)
from snuba.web.rpc.common.common import merge_typed_array_subcolumns
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.v1.endpoint_get_trace import convert_to_attribute_value
from snuba.web.rpc.v1.resolvers.common.aggregation import (
ExtrapolationContext,
)


def _array_raw_to_attribute_value(raw: Any) -> AttributeValue:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@
``for_request`` picks the source for a request.
"""

from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.base import (
from snuba.web.rpc.v1.co_occurring_attrs.base import (
CoOccurringAttrsSource,
)
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.selection import (
from snuba.web.rpc.v1.co_occurring_attrs.selection import (
CO_OCCURRING_ATTRS_V2_OPTION,
CO_OCCURRING_ATTRS_V2_START_TIMESTAMP_DEFAULT,
CO_OCCURRING_ATTRS_V2_START_TIMESTAMP_OPTION,
for_request,
)
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.v1 import (
from snuba.web.rpc.v1.co_occurring_attrs.v1 import (
CO_OCCURRING_ATTRS_STORAGE_KEY,
V1,
CoOccurringAttrsV1,
)
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.v2 import (
from snuba.web.rpc.v1.co_occurring_attrs.v2 import (
CO_OCCURRING_ATTRS_V2_STORAGE_KEY,
V2,
CoOccurringAttrsV2,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@

from snuba.state.sentry_options import get_option
from snuba.web.rpc.common.common import prev_monday
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.base import (
from snuba.web.rpc.v1.co_occurring_attrs.base import (
CoOccurringAttrsSource,
)
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.v1 import V1
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.v2 import V2
from snuba.web.rpc.v1.co_occurring_attrs.v1 import V1
from snuba.web.rpc.v1.co_occurring_attrs.v2 import V2

# Rollout flag. Not sufficient on its own: a request must also fall inside the window v2 has
# data for, see for_request.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from snuba.datasets.storages.storage_key import StorageKey
from snuba.query.dsl import Functions as f
from snuba.query.expressions import Expression
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.base import (
from snuba.web.rpc.v1.co_occurring_attrs.base import (
CoOccurringAttrsSource,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from snuba.query.dsl import Functions as f
from snuba.query.dsl import column
from snuba.query.expressions import Expression
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.base import (
from snuba.web.rpc.v1.co_occurring_attrs.base import (
CoOccurringAttrsSource,
)

Expand Down
12 changes: 6 additions & 6 deletions snuba/web/rpc/v1/endpoint_get_traces.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,18 @@
treeify_or_and_conditions,
use_indexed_name_for_request,
)
from snuba.web.rpc.common.debug_info import (
extract_response_meta,
setup_trace_query_settings,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.v1.resolvers.common.cross_item_queries import (
from snuba.web.rpc.common.cross_item_queries import (
CROSS_ITEM_DISTRIBUTED_PRODUCT_MODE,
convert_trace_filters_to_trace_item_filter_with_type,
get_trace_ids_sql_for_cross_item_query,
trace_id_in_subquery_condition,
use_local_join_for_cross_item_queries,
)
from snuba.web.rpc.common.debug_info import (
extract_response_meta,
setup_trace_query_settings,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException

_DEFAULT_ROW_LIMIT = 10_000
_BUFFER_WINDOW = 2 * 3600 # 2 hours
Expand Down
32 changes: 16 additions & 16 deletions snuba/web/rpc/v1/endpoint_time_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@
from snuba.utils.metrics.timer import Timer
from snuba.web.query import run_query
from snuba.web.rpc import RPCEndpoint
from snuba.web.rpc.common.aggregation import (
ExtrapolationContext,
aggregation_to_expression,
get_average_sample_rate_column,
get_confidence_interval_column,
get_count_column,
)
from snuba.web.rpc.common.common import (
add_existence_check_to_map_attribute_reads,
attribute_key_to_expression,
Expand All @@ -51,31 +58,24 @@
use_sampling_factor,
valid_sampling_factor_conditions,
)
from snuba.web.rpc.common.cross_item_queries import (
apply_cross_item_outer_query_settings,
get_trace_ids_sql_for_cross_item_query,
trace_id_in_subquery_condition,
)
from snuba.web.rpc.common.debug_info import (
extract_response_meta,
setup_trace_query_settings,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.common.formula_reliability import (
FormulaReliabilityCalculator,
_unix_seconds,
)
from snuba.web.rpc.proto_visitor import (
AggregationToConditionalAggregationVisitor,
TimeSeriesRequestWrapper,
)
from snuba.web.rpc.v1.resolvers.common.aggregation import (
ExtrapolationContext,
aggregation_to_expression,
get_average_sample_rate_column,
get_confidence_interval_column,
get_count_column,
)
from snuba.web.rpc.v1.resolvers.common.cross_item_queries import (
apply_cross_item_outer_query_settings,
get_trace_ids_sql_for_cross_item_query,
trace_id_in_subquery_condition,
)
from snuba.web.rpc.v1.resolvers.common.formula_reliability import (
FormulaReliabilityCalculator,
_unix_seconds,
)
from snuba.web.rpc.v1.visitors.time_series_request_visitor import (
preprocess_expression_labels,
)
Expand Down
6 changes: 3 additions & 3 deletions snuba/web/rpc/v1/endpoint_trace_item_attribute_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
)
from snuba.web.rpc.common.debug_info import extract_response_meta
from snuba.web.rpc.proto_visitor import ProtoVisitor, TraceItemFilterWrapper
from snuba.web.rpc.v1.resolvers.R_eap_items import co_occurring_attrs
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs import CoOccurringAttrsSource
from snuba.web.rpc.v1 import co_occurring_attrs
from snuba.web.rpc.v1.co_occurring_attrs import CoOccurringAttrsSource

# max value the user can provide for 'limit' in their request
MAX_REQUEST_LIMIT = 1000
Expand Down Expand Up @@ -270,7 +270,7 @@ def get_co_occurring_attributes(

**Storage:** the roll-up this reads and the parts of the query shape that differ between
the two (per-type key arrays, the aggregates) come from the `CoOccurringAttrsSource`
returned by `resolvers.R_eap_items.co_occurring_attrs.for_request`.
returned by `co_occurring_attrs.for_request`.

**Explanation:**

Expand Down
2 changes: 1 addition & 1 deletion snuba/web/rpc/v1/endpoint_trace_item_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
from snuba.web.rpc.storage_routing.routing_strategies.storage_routing import (
RoutingDecision,
)
from snuba.web.rpc.v1.resolvers.R_eap_items.heatmap_builder import HeatmapBuilder
from snuba.web.rpc.v1.heatmap_builder import HeatmapBuilder

_DEFAULT_ROW_LIMIT = 10_000

Expand Down
24 changes: 12 additions & 12 deletions snuba/web/rpc/v1/endpoint_trace_item_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@
from snuba.utils.metrics.timer import Timer
from snuba.web.query import run_query
from snuba.web.rpc import RPCEndpoint
from snuba.web.rpc.common.aggregation import (
aggregation_to_expression,
get_average_sample_rate_column,
get_confidence_interval_column,
get_count_column,
)
from snuba.web.rpc.common.common import (
add_existence_check_to_map_attribute_reads,
attribute_key_to_expression,
Expand All @@ -76,11 +82,17 @@
use_sampling_factor,
valid_sampling_factor_conditions,
)
from snuba.web.rpc.common.cross_item_queries import (
apply_cross_item_outer_query_settings,
get_trace_ids_sql_for_cross_item_query,
trace_id_in_subquery_condition,
)
from snuba.web.rpc.common.debug_info import (
extract_response_meta,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.common.pagination import FlexibleTimeWindowPageWithFilters
from snuba.web.rpc.common.trace_item_table import convert_results
from snuba.web.rpc.proto_visitor import (
AggregationToConditionalAggregationVisitor,
ColumnWrapper,
Expand All @@ -91,18 +103,6 @@
from snuba.web.rpc.storage_routing.routing_strategies.storage_routing import (
TimeWindow,
)
from snuba.web.rpc.v1.resolvers.common.aggregation import (
aggregation_to_expression,
get_average_sample_rate_column,
get_confidence_interval_column,
get_count_column,
)
from snuba.web.rpc.v1.resolvers.common.cross_item_queries import (
apply_cross_item_outer_query_settings,
get_trace_ids_sql_for_cross_item_query,
trace_id_in_subquery_condition,
)
from snuba.web.rpc.v1.resolvers.common.trace_item_table import convert_results
from snuba.web.rpc.v1.visitors.sparse_aggregate_attribute_transformer import (
SparseAggregateAttributeTransformer,
)
Expand Down
13 changes: 0 additions & 13 deletions snuba/web/rpc/v1/resolvers/__init__.py

This file was deleted.

Empty file.
2 changes: 1 addition & 1 deletion snuba/web/rpc/v1/trace_item_attribute_values.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@
treeify_or_and_conditions,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.common.trace_item_table import get_converter_for_type
from snuba.web.rpc.storage_routing.routing_strategies.storage_routing import (
RoutingDecision,
)
from snuba.web.rpc.v1.resolvers.common.trace_item_table import get_converter_for_type


def _map_key_names_for_existence_check(request_key: AttributeKey) -> list[str]:
Expand Down
12 changes: 6 additions & 6 deletions tests/web/rpc/test_aggregation.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@
Literal,
SubscriptableReference,
)
from snuba.web.rpc.common.common import (
attribute_key_to_expression,
get_field_existence_expression,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.v1.resolvers.common.aggregation import (
from snuba.web.rpc.common.aggregation import (
CUSTOM_COLUMN_PREFIX,
CustomColumnInformation,
ExtrapolationContext,
_get_closest_percentile_index,
aggregation_to_expression,
get_confidence_interval_column,
)
from snuba.web.rpc.common.common import (
attribute_key_to_expression,
get_field_existence_expression,
)
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException


def _collect_column_names(expr: Expression) -> set[str]:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

from snuba.datasets.storages.factory import get_storage
from snuba.query.expressions import FunctionCall
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs import V1, V2
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.base import (
from snuba.web.rpc.v1.co_occurring_attrs import V1, V2
from snuba.web.rpc.v1.co_occurring_attrs.base import (
CoOccurringAttrsSource,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from sentry_protos.snuba.v1.trace_item_attribute_pb2 import AttributeKey

from snuba.query.expressions import FunctionCall
from snuba.web.rpc.v1.resolvers.R_eap_items.co_occurring_attrs.v1 import (
from snuba.web.rpc.v1.co_occurring_attrs.v1 import (
CO_OCCURRING_ATTRS_STORAGE_KEY,
V1,
)
Expand Down
Loading
Loading