@@ -2,10 +2,10 @@ use relay_event_normalization::{
22 GeoIpLookup , RequiredMode , SchemaProcessor , TimestampProcessor , TrimmingProcessor , eap,
33} ;
44use relay_event_schema:: processor:: { ProcessingState , ValueType , process_value} ;
5- use relay_event_schema:: protocol:: SpanV2 ;
5+ use relay_event_schema:: protocol:: { Span , SpanV2 } ;
66use relay_protocol:: Annotated ;
77
8- use crate :: envelope:: { ContainerItems , Item , ItemContainer } ;
8+ use crate :: envelope:: { ContainerItems , Item , ItemContainer , WithHeader } ;
99use crate :: extractors:: RequestMeta ;
1010use crate :: managed:: Managed ;
1111use crate :: processing:: Context ;
@@ -20,11 +20,18 @@ pub fn expand(spans: Managed<SampledSpans>) -> Managed<ExpandedSpans> {
2020 let mut all_spans = Vec :: new ( ) ;
2121
2222 for item in & spans. inner . spans {
23- let expanded = expand_span ( item) ;
23+ let expanded = expand_span_container ( item) ;
2424 let expanded = records. or_default ( expanded, item) ;
2525 all_spans. extend ( expanded) ;
2626 }
2727
28+ for item in & spans. inner . legacy {
29+ match expand_legacy_span ( item) {
30+ Ok ( span) => all_spans. push ( span) ,
31+ Err ( err) => drop ( records. reject_err ( err, item) ) ,
32+ }
33+ }
34+
2835 spans:: integrations:: expand_into ( & mut all_spans, records, spans. inner . integrations ) ;
2936
3037 ExpandedSpans {
@@ -35,7 +42,7 @@ pub fn expand(spans: Managed<SampledSpans>) -> Managed<ExpandedSpans> {
3542 } )
3643}
3744
38- fn expand_span ( item : & Item ) -> Result < ContainerItems < SpanV2 > > {
45+ fn expand_span_container ( item : & Item ) -> Result < ContainerItems < SpanV2 > > {
3946 let spans = ItemContainer :: parse ( item)
4047 . map_err ( |err| {
4148 relay_log:: debug!( "failed to parse span container: {err}" ) ;
@@ -46,6 +53,19 @@ fn expand_span(item: &Item) -> Result<ContainerItems<SpanV2>> {
4653 Ok ( spans)
4754}
4855
56+ fn expand_legacy_span ( item : & Item ) -> Result < WithHeader < SpanV2 > > {
57+ let payload = item. payload ( ) ;
58+
59+ let span = Annotated :: < Span > :: from_json_bytes ( & payload)
60+ . map_err ( |err| {
61+ relay_log:: debug!( "failed to parse span: {err}" ) ;
62+ Error :: Invalid ( DiscardReason :: InvalidJson )
63+ } ) ?
64+ . map_value ( relay_spans:: span_v1_to_span_v2) ;
65+
66+ Ok ( WithHeader :: new ( span) )
67+ }
68+
4969/// Normalizes individual spans.
5070pub fn normalize ( spans : & mut Managed < ExpandedSpans > , geo_lookup : & GeoIpLookup ) {
5171 spans. retain_with_context (
0 commit comments