Просмотр исходного кода

Revert "feat(profiling): add support to return span scoped flamegraph (#51030)"

This reverts commit d9978ea97239249c1075d000e90f895e5cbfec28.

Co-authored-by: asottile-sentry <103459774+asottile-sentry@users.noreply.github.com>
getsentry-bot 1 год назад
Родитель
Сommit
6303c843e5

+ 2 - 13
src/sentry/api/endpoints/organization_profiling_profiles.py

@@ -12,7 +12,7 @@ from sentry.api.base import region_silo_endpoint
 from sentry.api.bases import NoProjects, OrganizationEventsV2EndpointBase
 from sentry.exceptions import InvalidSearchQuery
 from sentry.models import Organization
-from sentry.profiles.flamegraph import get_profile_ids, get_profile_ids_with_spans
+from sentry.profiles.flamegraph import get_profiles_id
 from sentry.profiles.utils import parse_profile_filters, proxy_profiling_service
 
 
@@ -54,18 +54,7 @@ class OrganizationProfilingFlamegraphEndpoint(OrganizationProfilingBaseEndpoint)
         project_ids = params["project_id"]
         if len(project_ids) > 1:
             raise ParseError(detail="You cannot get a flamegraph from multiple projects.")
-
-        span_group = request.query_params.get("spans.group", None)
-        if span_group is not None:
-            profile_ids = get_profile_ids_with_spans(
-                organization.id,
-                project_ids[0],
-                params,
-                span_group,
-                request.query_params.get("query", None),
-            )
-        else:
-            profile_ids = get_profile_ids(params, request.query_params.get("query", None))
+        profile_ids = get_profiles_id(params, request.query_params.get("query", None))
         kwargs: Dict[str, Any] = {
             "method": "POST",
             "path": f"/organizations/{organization.id}/projects/{project_ids[0]}/flamegraph",

+ 8 - 109
src/sentry/profiles/flamegraph.py

@@ -1,27 +1,23 @@
-from datetime import datetime
-from typing import Any, Dict, List, Optional
+from typing import Dict, List, Optional
 
-from snuba_sdk import Column, Condition, Entity, Function, Op, Query, Request
+from snuba_sdk import Column, Condition, Op
 
 from sentry.search.events.builder import QueryBuilder
 from sentry.search.events.types import ParamsType
-from sentry.snuba.dataset import Dataset, EntityKey
+from sentry.snuba.dataset import Dataset
 from sentry.snuba.referrer import Referrer
 from sentry.utils.snuba import raw_snql_query
 
 
-def query_profiles_data(
+def get_profiles_id(
     params: ParamsType,
-    referrer: str,
-    selected_columns: List[str],
     query: Optional[str] = None,
-    additional_conditions: List[Condition] = None,
-) -> List[Dict[str, Any]]:
+) -> Dict[str, List[str]]:
     builder = QueryBuilder(
         dataset=Dataset.Discover,
         params=params,
         query=query,
-        selected_columns=selected_columns,
+        selected_columns=["profile.id"],
         limit=100,
     )
 
@@ -31,107 +27,10 @@ def query_profiles_data(
             Condition(Column("profile_id"), Op.IS_NOT_NULL),
         ]
     )
-    if additional_conditions is not None:
-        builder.add_conditions(additional_conditions)
 
     snql_query = builder.get_snql_query()
-    return raw_snql_query(
+    data = raw_snql_query(
         snql_query,
-        referrer,
+        referrer=Referrer.API_PROFILING_PROFILE_FLAMEGRAPH.value,
     )["data"]
-
-
-def get_profile_ids(
-    params: ParamsType,
-    query: Optional[str] = None,
-) -> Dict[str, List[str]]:
-    data = query_profiles_data(
-        params,
-        Referrer.API_PROFILING_PROFILE_FLAMEGRAPH.value,
-        selected_columns=["profile.id"],
-        query=query,
-    )
     return {"profile_ids": [row["profile.id"] for row in data]}
-
-
-def get_span_intervals(
-    project_id: str,
-    span_group: str,
-    transaction_ids: List[str],
-    organization_id: str,
-    params: ParamsType,
-) -> Dict[str, Any]:
-    query = Query(
-        match=Entity(EntityKey.Spans.value),
-        select=[
-            Column("transaction_id"),
-            Column("start_timestamp"),
-            Column("start_ms"),
-            Column("end_timestamp"),
-            Column("end_ms"),
-        ],
-        where=[
-            Condition(Column("project_id"), Op.EQ, project_id),
-            Condition(Column("transaction_id"), Op.IN, transaction_ids),
-            Condition(Column("group"), Op.EQ, span_group),
-            Condition(Column("timestamp"), Op.GTE, params["start"]),
-            Condition(Column("timestamp"), Op.LT, params["end"]),
-        ],
-    )
-    request = Request(
-        dataset=Dataset.SpansIndexed.value,
-        app_id="default",
-        query=query,
-        tenant_ids={
-            "referrer": Referrer.API_STARFISH_PROFILE_FLAMEGRAPH.value,
-            "organization_id": organization_id,
-        },
-    )
-    return raw_snql_query(
-        request,
-        referrer=Referrer.API_STARFISH_PROFILE_FLAMEGRAPH.value,
-    )["data"]
-
-
-def get_profile_ids_with_spans(
-    organization_id: str,
-    project_id: str,
-    params: ParamsType,
-    span_group: str,
-    query: Optional[str] = None,
-):
-    data = query_profiles_data(
-        params,
-        Referrer.API_STARFISH_PROFILE_FLAMEGRAPH.value,
-        selected_columns=["id", "profile.id"],
-        query=query,
-        additional_conditions=[
-            Condition(Function("has", [Column("spans.group"), span_group]), Op.EQ, 1)
-        ],
-    )
-    # map {transaction_id: (profile_id, [span intervals])}
-    transaction_to_prof = {row["id"]: (row["profile.id"], []) for row in data}
-
-    data = get_span_intervals(
-        project_id,
-        span_group,
-        list(transaction_to_prof.keys()),
-        organization_id,
-        params,
-    )
-
-    for row in data:
-        start_ns = (int(datetime.fromisoformat(row["start_timestamp"]).timestamp()) * 10**9) + (
-            row["start_ms"] * 10**6
-        )
-        end_ns = (int(datetime.fromisoformat(row["end_timestamp"]).timestamp()) * 10**9) + (
-            row["end_ms"] * 10**6
-        )
-        transaction_id = row["transaction_id"]
-
-        transaction_to_prof[transaction_id][1].append({"start": str(start_ns), "end": str(end_ns)})
-
-    profile_ids = [tup[0] for tup in transaction_to_prof.values()]
-    spans = [tup[1] for tup in transaction_to_prof.values()]
-
-    return {"profile_ids": profile_ids, "spans": spans}

+ 0 - 1
src/sentry/snuba/dataset.py

@@ -23,7 +23,6 @@ class Dataset(Enum):
 class EntityKey(Enum):
     Events = "events"
     Sessions = "sessions"
-    Spans = "spans"
     Transactions = "transactions"
     MetricsSets = "metrics_sets"
     MetricsCounters = "metrics_counters"

+ 0 - 1
src/sentry/snuba/referrer.py

@@ -343,7 +343,6 @@ class Referrer(Enum):
     API_SPAN_SAMPLE_GET_SPAN_IDS = "api.spans.sample-get-span-ids"
     API_SPAN_SAMPLE_GET_SPAN_DATA = "api.spans.sample-get-span-data"
     API_SERIALIZER_PROJECTS_GET_STATS = "api.serializer.projects.get_stats"
-    API_STARFISH_PROFILE_FLAMEGRAPH = "api.starfish.profile-flamegraph"
     API_TRACE_VIEW_ERRORS_VIEW = "api.trace-view.errors-view"
     API_TRACE_VIEW_GET_EVENTS = "api.trace-view.get-events"
     API_TRACE_VIEW_GET_META = "api.trace-view.get-meta"