Skip to content

Commit 137a94e

Browse files
committed
refactor: improve time parsing logic in query handler
1 parent 0a671d0 commit 137a94e

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

server/src/handlers/http/query.rs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -200,20 +200,7 @@ pub async fn into_query(
200200
return Err(QueryError::EmptyEndTime);
201201
}
202202

203-
let start: DateTime<Utc>;
204-
let end: DateTime<Utc>;
205-
206-
if query.end_time == "now" {
207-
end = Utc::now();
208-
start = end - chrono::Duration::from_std(humantime::parse_duration(&query.start_time)?)?;
209-
} else {
210-
start = DateTime::parse_from_rfc3339(&query.start_time)
211-
.map_err(|_| QueryError::StartTimeParse)?
212-
.into();
213-
end = DateTime::parse_from_rfc3339(&query.end_time)
214-
.map_err(|_| QueryError::EndTimeParse)?
215-
.into();
216-
};
203+
let (start, end) = parse_human_time(&query.start_time, &query.end_time)?;
217204

218205
if start.timestamp() > end.timestamp() {
219206
return Err(QueryError::StartTimeAfterEndTime);
@@ -227,6 +214,28 @@ pub async fn into_query(
227214
})
228215
}
229216

217+
fn parse_human_time(
218+
start_time: &str,
219+
end_time: &str,
220+
) -> Result<(DateTime<Utc>, DateTime<Utc>), QueryError> {
221+
let start: DateTime<Utc>;
222+
let end: DateTime<Utc>;
223+
224+
if end_time == "now" {
225+
end = Utc::now();
226+
start = end - chrono::Duration::from_std(humantime::parse_duration(start_time)?)?;
227+
} else {
228+
start = DateTime::parse_from_rfc3339(start_time)
229+
.map_err(|_| QueryError::StartTimeParse)?
230+
.into();
231+
end = DateTime::parse_from_rfc3339(end_time)
232+
.map_err(|_| QueryError::EndTimeParse)?
233+
.into();
234+
};
235+
236+
Ok((start, end))
237+
}
238+
230239
/// unused for now, might need it in the future
231240
#[allow(unused)]
232241
fn transform_query_for_ingestor(query: &Query) -> Option<Query> {

0 commit comments

Comments
 (0)