1
- from datetime import UTC , datetime , timedelta
1
+ from datetime import datetime , timedelta
2
2
from typing import Any
3
3
4
4
from django .utils import timezone
14
14
from sentry .search .eap .types import SearchResolverConfig
15
15
from sentry .search .events .types import SnubaParams
16
16
from sentry .seer .anomaly_detection .types import AnomalyType , TimeSeriesPoint
17
- from sentry .snuba import metrics_performance , spans_rpc
17
+ from sentry .snuba import metrics_performance , ourlogs , spans_rpc
18
18
from sentry .snuba .metrics .extraction import MetricSpecType
19
19
from sentry .snuba .models import SnubaQuery , SnubaQueryEventType
20
20
from sentry .snuba .referrer import Referrer
@@ -229,12 +229,17 @@ def format_historical_data(
229
229
)
230
230
231
231
232
- def get_dataset_from_label (dataset_label : str ):
232
+ def get_dataset_from_label_and_event_types (
233
+ dataset_label : str , event_types : list [SnubaQueryEventType .EventType ] | None = None
234
+ ):
233
235
if dataset_label == "events" :
234
236
# DATASET_OPTIONS expects the name 'errors'
235
237
dataset_label = "errors"
236
238
elif dataset_label == "events_analytics_platform" :
237
- dataset_label = "spans"
239
+ if event_types and SnubaQueryEventType .EventType .TRACE_ITEM_LOG in event_types :
240
+ dataset_label = "ourlogs"
241
+ else :
242
+ dataset_label = "spans"
238
243
elif dataset_label in ["generic_metrics" , "transactions" ]:
239
244
# XXX: performance alerts dataset differs locally vs in prod
240
245
dataset_label = "metricsEnhanced"
@@ -266,8 +271,8 @@ def fetch_historical_data(
266
271
if start is None :
267
272
start = end - timedelta (days = NUM_DAYS )
268
273
granularity = snuba_query .time_window
269
-
270
- dataset = get_dataset_from_label (snuba_query .dataset )
274
+ event_types = get_event_types ( snuba_query , event_types )
275
+ dataset = get_dataset_from_label_and_event_types (snuba_query .dataset , event_types )
271
276
272
277
if not project or not dataset or not organization :
273
278
return None
@@ -289,16 +294,6 @@ def fetch_historical_data(
289
294
if dataset == metrics_performance :
290
295
return get_crash_free_historical_data (start , end , project , organization , granularity )
291
296
elif dataset == spans_rpc :
292
- # EAP timeseries don't round time buckets to the nearest time window but seer expects
293
- # that. So for example, if start was 7:01 with a 15 min interval, EAP would
294
- # bucket it as 7:01, 7:16 etc. Force rounding the start and end times so we
295
- # get the buckets seer expects.
296
- rounded_end = int (end .timestamp () / granularity ) * granularity
297
- rounded_start = int (start .timestamp () / granularity ) * granularity
298
-
299
- snuba_params .end = datetime .fromtimestamp (rounded_end , UTC )
300
- snuba_params .start = datetime .fromtimestamp (rounded_start , UTC )
301
-
302
297
results = spans_rpc .run_timeseries_query (
303
298
params = snuba_params ,
304
299
query_string = snuba_query .query ,
@@ -315,8 +310,24 @@ def fetch_historical_data(
315
310
sampling_mode = "NORMAL" ,
316
311
)
317
312
return results
313
+ elif dataset == ourlogs :
314
+ results = ourlogs .run_timeseries_query (
315
+ params = snuba_params ,
316
+ query_string = snuba_query .query ,
317
+ y_axes = query_columns ,
318
+ referrer = (
319
+ Referrer .ANOMALY_DETECTION_HISTORICAL_DATA_QUERY .value
320
+ if is_store_data_request
321
+ else Referrer .ANOMALY_DETECTION_RETURN_HISTORICAL_ANOMALIES .value
322
+ ),
323
+ config = SearchResolverConfig (
324
+ auto_fields = False ,
325
+ use_aggregate_conditions = False ,
326
+ ),
327
+ sampling_mode = "NORMAL" ,
328
+ )
329
+ return results
318
330
else :
319
- event_types = get_event_types (snuba_query , event_types )
320
331
snuba_query_string = get_snuba_query_string (snuba_query , event_types )
321
332
historical_data = dataset .timeseries_query (
322
333
selected_columns = query_columns ,
0 commit comments