|
17 | 17 | */ |
18 | 18 |
|
19 | 19 | use core::str; |
20 | | -use std::fs; |
| 20 | +use std::{collections::HashMap, fs}; |
21 | 21 |
|
22 | 22 | use actix_web::{ |
23 | 23 | web::{self, Path}, |
@@ -47,6 +47,7 @@ use crate::{ |
47 | 47 | stats, |
48 | 48 | storage::{ObjectStoreFormat, StreamType, STREAM_ROOT_DIRECTORY}, |
49 | 49 | }; |
| 50 | +const STATS_DATE_QUERY_PARAM: &str = "date"; |
50 | 51 |
|
51 | 52 | pub async fn delete(stream_name: Path<String>) -> Result<impl Responder, StreamError> { |
52 | 53 | let stream_name = stream_name.into_inner(); |
@@ -141,16 +142,13 @@ pub async fn get_stats( |
141 | 142 | return Err(StreamNotFound(stream_name.clone()).into()); |
142 | 143 | } |
143 | 144 |
|
144 | | - let query_string = req.query_string(); |
145 | | - if !query_string.is_empty() { |
146 | | - let date_key = query_string.split('=').collect::<Vec<&str>>()[0]; |
147 | | - let date_value = query_string.split('=').collect::<Vec<&str>>()[1]; |
148 | | - if date_key != "date" { |
149 | | - return Err(StreamError::Custom { |
150 | | - msg: "Invalid query parameter".to_string(), |
151 | | - status: StatusCode::BAD_REQUEST, |
152 | | - }); |
153 | | - } |
| 145 | + let query_map = web::Query::<HashMap<String, String>>::from_query(req.query_string()) |
| 146 | + .map_err(|_| StreamError::InvalidQueryParameter(STATS_DATE_QUERY_PARAM.to_string()))?; |
| 147 | + |
| 148 | + if !query_map.is_empty() { |
| 149 | + let date_value = query_map.get(STATS_DATE_QUERY_PARAM).ok_or_else(|| { |
| 150 | + StreamError::InvalidQueryParameter(STATS_DATE_QUERY_PARAM.to_string()) |
| 151 | + })?; |
154 | 152 |
|
155 | 153 | if !date_value.is_empty() { |
156 | 154 | // this function requires all the ingestor stream jsons |
@@ -180,7 +178,7 @@ pub async fn get_stats( |
180 | 178 |
|
181 | 179 | let stats = serde_json::to_value(stats)?; |
182 | 180 |
|
183 | | - return Ok((web::Json(stats), StatusCode::OK)); |
| 181 | + return Ok(web::Json(stats)); |
184 | 182 | } |
185 | 183 | } |
186 | 184 |
|
@@ -227,5 +225,5 @@ pub async fn get_stats( |
227 | 225 |
|
228 | 226 | let stats = serde_json::to_value(stats)?; |
229 | 227 |
|
230 | | - Ok((web::Json(stats), StatusCode::OK)) |
| 228 | + Ok(web::Json(stats)) |
231 | 229 | } |
0 commit comments