@@ -164,50 +164,9 @@ pub async fn get_alert(req: HttpRequest) -> HttpResponse {
164164 . to_http ( )
165165}
166166
167- pub async fn put ( req : HttpRequest ) -> HttpResponse {
167+ pub async fn put_stream ( req : HttpRequest ) -> HttpResponse {
168168 let stream_name: String = req. match_info ( ) . get ( "logstream" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
169-
170- // fail to proceed if there is an error in log stream name validation
171- if let Err ( e) = validator:: stream_name ( & stream_name) {
172- return response:: ServerResponse {
173- msg : format ! ( "failed to create log stream due to err: {}" , e) ,
174- code : StatusCode :: BAD_REQUEST ,
175- }
176- . to_http ( ) ;
177- }
178-
179- let s3 = S3 :: new ( ) ;
180-
181- // Proceed to create log stream if it doesn't exist
182- if s3. get_schema ( & stream_name) . await . is_err ( ) {
183- // Fail if unable to create log stream on object store backend
184- if let Err ( e) = s3. create_stream ( & stream_name) . await {
185- return response:: ServerResponse {
186- msg : format ! (
187- "failed to create log stream {} due to err: {}" ,
188- stream_name, e
189- ) ,
190- code : StatusCode :: INTERNAL_SERVER_ERROR ,
191- }
192- . to_http ( ) ;
193- }
194- metadata:: STREAM_INFO . add_stream ( stream_name. to_string ( ) , None , Alerts :: default ( ) ) ;
195- return response:: ServerResponse {
196- msg : format ! ( "created log stream {}" , stream_name) ,
197- code : StatusCode :: OK ,
198- }
199- . to_http ( ) ;
200- }
201-
202- // Error if the log stream already exists
203- response:: ServerResponse {
204- msg : format ! (
205- "log stream {} already exists, please create a new log stream with unique name" ,
206- stream_name
207- ) ,
208- code : StatusCode :: BAD_REQUEST ,
209- }
210- . to_http ( )
169+ create_stream_if_not_exists ( stream_name) . await
211170}
212171
213172pub async fn put_alert ( req : HttpRequest , body : web:: Json < serde_json:: Value > ) -> HttpResponse {
@@ -349,3 +308,47 @@ fn remove_id_from_alerts(value: &mut Value) {
349308 } ) ;
350309 }
351310}
311+
312+ // Check if the stream exists and create a new stream if doesn't exist
313+ pub async fn create_stream_if_not_exists ( stream_name : String ) -> HttpResponse {
314+ if metadata:: STREAM_INFO . stream_exists ( stream_name. as_str ( ) ) {
315+ // Error if the log stream already exists
316+ response:: ServerResponse {
317+ msg : format ! (
318+ "log stream {} already exists, please create a new log stream with unique name" ,
319+ stream_name
320+ ) ,
321+ code : StatusCode :: BAD_REQUEST ,
322+ }
323+ . to_http ( ) ;
324+ }
325+
326+ // fail to proceed if invalid stream name
327+ if let Err ( e) = validator:: stream_name ( & stream_name) {
328+ response:: ServerResponse {
329+ msg : format ! ( "failed to create log stream due to err: {}" , e) ,
330+ code : StatusCode :: BAD_REQUEST ,
331+ }
332+ . to_http ( ) ;
333+ }
334+
335+ // Proceed to create log stream if it doesn't exist
336+ let s3 = S3 :: new ( ) ;
337+ if let Err ( e) = s3. create_stream ( & stream_name) . await {
338+ // Fail if unable to create log stream on object store backend
339+ response:: ServerResponse {
340+ msg : format ! (
341+ "failed to create log stream {} due to err: {}" ,
342+ stream_name, e
343+ ) ,
344+ code : StatusCode :: INTERNAL_SERVER_ERROR ,
345+ }
346+ . to_http ( ) ;
347+ }
348+ metadata:: STREAM_INFO . add_stream ( stream_name. to_string ( ) , None , Alerts :: default ( ) ) ;
349+ response:: ServerResponse {
350+ msg : format ! ( "created log stream {}" , stream_name) ,
351+ code : StatusCode :: OK ,
352+ }
353+ . to_http ( )
354+ }
0 commit comments