16
16
*
17
17
*/
18
18
19
- use std:: collections:: HashMap ;
19
+ use std:: collections:: { HashMap , HashSet } ;
20
20
21
21
use actix_web:: web:: { Json , Path } ;
22
22
use actix_web:: { http:: header:: ContentType , HttpRequest , HttpResponse } ;
@@ -28,10 +28,13 @@ use serde_json::Value;
28
28
29
29
use crate :: event;
30
30
use crate :: event:: error:: EventError ;
31
- use crate :: event:: format:: { self , EventFormat , LogSource } ;
31
+ use crate :: event:: format:: { self , EventFormat , LogSource , LogSourceEntry } ;
32
32
use crate :: handlers:: { LOG_SOURCE_KEY , STREAM_NAME_HEADER_KEY } ;
33
33
use crate :: metadata:: SchemaVersion ;
34
34
use crate :: option:: Mode ;
35
+ use crate :: otel:: logs:: OTEL_LOG_KNOWN_FIELD_LIST ;
36
+ use crate :: otel:: metrics:: OTEL_METRICS_KNOWN_FIELD_LIST ;
37
+ use crate :: otel:: traces:: OTEL_TRACES_KNOWN_FIELD_LIST ;
35
38
use crate :: parseable:: { StreamNotFound , PARSEABLE } ;
36
39
use crate :: storage:: { ObjectStorageError , StreamType } ;
37
40
use crate :: utils:: header_parsing:: ParseHeaderError ;
@@ -55,9 +58,6 @@ pub async fn ingest(req: HttpRequest, Json(json): Json<Value>) -> Result<HttpRes
55
58
if internal_stream_names. contains ( & stream_name) {
56
59
return Err ( PostError :: InternalStream ( stream_name) ) ;
57
60
}
58
- PARSEABLE
59
- . create_stream_if_not_exists ( & stream_name, StreamType :: UserDefined , LogSource :: default ( ) )
60
- . await ?;
61
61
62
62
let log_source = req
63
63
. headers ( )
@@ -72,6 +72,15 @@ pub async fn ingest(req: HttpRequest, Json(json): Json<Value>) -> Result<HttpRes
72
72
return Err ( PostError :: OtelNotSupported ) ;
73
73
}
74
74
75
+ let log_source_entry = LogSourceEntry :: new ( log_source. clone ( ) , HashSet :: new ( ) ) ;
76
+ PARSEABLE
77
+ . create_stream_if_not_exists (
78
+ & stream_name,
79
+ StreamType :: UserDefined ,
80
+ vec ! [ log_source_entry] ,
81
+ )
82
+ . await ?;
83
+
75
84
flatten_and_push_logs ( json, & stream_name, & log_source) . await ?;
76
85
77
86
Ok ( HttpResponse :: Ok ( ) . finish ( ) )
@@ -119,8 +128,20 @@ pub async fn handle_otel_logs_ingestion(
119
128
}
120
129
121
130
let stream_name = stream_name. to_str ( ) . unwrap ( ) . to_owned ( ) ;
131
+
132
+ let log_source_entry = LogSourceEntry :: new (
133
+ log_source. clone ( ) ,
134
+ OTEL_LOG_KNOWN_FIELD_LIST
135
+ . iter ( )
136
+ . map ( |& s| s. to_string ( ) )
137
+ . collect ( ) ,
138
+ ) ;
122
139
PARSEABLE
123
- . create_stream_if_not_exists ( & stream_name, StreamType :: UserDefined , LogSource :: OtelLogs )
140
+ . create_stream_if_not_exists (
141
+ & stream_name,
142
+ StreamType :: UserDefined ,
143
+ vec ! [ log_source_entry] ,
144
+ )
124
145
. await ?;
125
146
126
147
flatten_and_push_logs ( json, & stream_name, & log_source) . await ?;
@@ -146,11 +167,18 @@ pub async fn handle_otel_metrics_ingestion(
146
167
return Err ( PostError :: IncorrectLogSource ( LogSource :: OtelMetrics ) ) ;
147
168
}
148
169
let stream_name = stream_name. to_str ( ) . unwrap ( ) . to_owned ( ) ;
170
+ let log_source_entry = LogSourceEntry :: new (
171
+ log_source. clone ( ) ,
172
+ OTEL_METRICS_KNOWN_FIELD_LIST
173
+ . iter ( )
174
+ . map ( |& s| s. to_string ( ) )
175
+ . collect ( ) ,
176
+ ) ;
149
177
PARSEABLE
150
178
. create_stream_if_not_exists (
151
179
& stream_name,
152
180
StreamType :: UserDefined ,
153
- LogSource :: OtelMetrics ,
181
+ vec ! [ log_source_entry ] ,
154
182
)
155
183
. await ?;
156
184
@@ -178,8 +206,20 @@ pub async fn handle_otel_traces_ingestion(
178
206
return Err ( PostError :: IncorrectLogSource ( LogSource :: OtelTraces ) ) ;
179
207
}
180
208
let stream_name = stream_name. to_str ( ) . unwrap ( ) . to_owned ( ) ;
209
+ let log_source_entry = LogSourceEntry :: new (
210
+ log_source. clone ( ) ,
211
+ OTEL_TRACES_KNOWN_FIELD_LIST
212
+ . iter ( )
213
+ . map ( |& s| s. to_string ( ) )
214
+ . collect ( ) ,
215
+ ) ;
216
+
181
217
PARSEABLE
182
- . create_stream_if_not_exists ( & stream_name, StreamType :: UserDefined , LogSource :: OtelTraces )
218
+ . create_stream_if_not_exists (
219
+ & stream_name,
220
+ StreamType :: UserDefined ,
221
+ vec ! [ log_source_entry] ,
222
+ )
183
223
. await ?;
184
224
185
225
flatten_and_push_logs ( json, & stream_name, & log_source) . await ?;
0 commit comments