Skip to content

Commit 071fa6b

Browse files
committed
Fix parsing log2 filenames
Our format is 2025-10-12T01-00-00-000.log2, not 2025-10-12T01:00:00.log2.
1 parent c08a73c commit 071fa6b

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

src/tree.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::pin::Pin;
55
use std::sync::Arc;
66

77
use async_compression::tokio::write::GzipEncoder;
8+
use chrono::TimeZone;
89
use futures::io::{BufReader, BufWriter};
910
use futures::{Stream, StreamExt, TryStreamExt};
1011
use log::{error, info, warn};
@@ -798,6 +799,17 @@ async fn pushlog_handler(
798799
).into())
799800
}
800801

802+
fn file_name_to_file_msec(filename: &str) -> Result<i64, String> {
803+
let without_ext = filename
804+
.strip_suffix(".log2")
805+
.ok_or_else(|| format!("Invalid file extension in '{filename}'"))?;
806+
807+
let datetime = chrono::NaiveDateTime::parse_from_str(without_ext, "%Y-%m-%dT%H-%M-%S-%3f")
808+
.map_err(|e| format!("Failed to parse '{filename}': {e}"))?;
809+
810+
Ok(chrono::Utc.from_utc_datetime(&datetime).timestamp_millis())
811+
}
812+
801813
pub async fn getlog_handler(
802814
site_path: &str,
803815
params: &GetLog2Params,
@@ -844,17 +856,13 @@ pub async fn getlog_handler(
844856
match &params.since {
845857
GetLog2Since::DateTime(date_time) => {
846858
let since_ms = date_time.epoch_msec();
847-
let file_name_to_msec = |file_name: &str| file_name
848-
.strip_suffix(".log2")
849-
.and_then(|file| shvproto::DateTime::from_iso_str(file).ok().as_ref().map(shvproto::DateTime::epoch_msec))
850-
.unwrap_or(i64::MAX);
851859

852860
log_files
853861
.iter()
854862
.map(DirEntry::file_name)
855863
.enumerate()
856864
.rev()
857-
.find(|(_,file)| file_name_to_msec(&file.to_string_lossy()) < since_ms)
865+
.find(|(_,file)| file_name_to_file_msec(&file.to_string_lossy()).is_ok_and(|ms| ms < since_ms))
858866
.map(|(idx, _)| idx)
859867
.unwrap_or(0)
860868
}

0 commit comments

Comments
 (0)