Skip to content

Commit adbae20

Browse files
committed
fix: add stream creation time in get stats api
1 parent 3d8ddeb commit adbae20

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

server/src/handlers/http/logstream.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,17 @@ pub async fn get_stats(req: HttpRequest) -> Result<impl Responder, StreamError>
268268
let stats = stats::get_current_stats(&stream_name, "json")
269269
.ok_or(StreamError::StreamNotFound(stream_name.clone()))?;
270270

271+
let hash_map = STREAM_INFO.read().unwrap();
272+
let stream_creation_time = &hash_map
273+
.get(&stream_name)
274+
.ok_or(StreamError::StreamNotFound(stream_name.clone()))?
275+
.created_at;
276+
271277
let time = Utc::now();
272278

273279
let stats = serde_json::json!({
274280
"stream": stream_name,
281+
"creation_time": stream_creation_time,
275282
"time": time,
276283
"ingestion": {
277284
"count": stats.events,
@@ -307,7 +314,15 @@ pub async fn create_stream(stream_name: String) -> Result<(), CreateStreamError>
307314
if let Err(err) = storage.create_stream(&stream_name).await {
308315
return Err(CreateStreamError::Storage { stream_name, err });
309316
}
310-
metadata::STREAM_INFO.add_stream(stream_name.to_string());
317+
318+
let stream_meta = CONFIG
319+
.storage()
320+
.get_object_store()
321+
.get_stream_metadata(&stream_name)
322+
.await;
323+
let created_at = stream_meta.unwrap().created_at;
324+
325+
metadata::STREAM_INFO.add_stream(stream_name.to_string(), created_at);
311326

312327
Ok(())
313328
}

server/src/metadata.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
use arrow_array::RecordBatch;
2020
use arrow_schema::{Field, Fields, Schema};
21+
use chrono::Local;
2122
use itertools::Itertools;
2223
use once_cell::sync::Lazy;
2324
use std::collections::HashMap;
@@ -43,6 +44,7 @@ pub struct LogStreamMetadata {
4344
pub schema: HashMap<String, Arc<Field>>,
4445
pub alerts: Alerts,
4546
pub cache_enabled: bool,
47+
pub created_at: String,
4648
}
4749

4850
// It is very unlikely that panic will occur when dealing with metadata.
@@ -126,9 +128,14 @@ impl StreamInfo {
126128
})
127129
}
128130

129-
pub fn add_stream(&self, stream_name: String) {
131+
pub fn add_stream(&self, stream_name: String, created_at: String) {
130132
let mut map = self.write().expect(LOCK_EXPECT);
131133
let metadata = LogStreamMetadata {
134+
created_at: if created_at.is_empty() {
135+
Local::now().to_rfc3339()
136+
} else {
137+
created_at.clone()
138+
},
132139
..Default::default()
133140
};
134141
map.insert(stream_name, metadata);
@@ -162,6 +169,7 @@ impl StreamInfo {
162169
schema,
163170
alerts,
164171
cache_enabled: meta.cache_enabled,
172+
created_at: meta.created_at,
165173
};
166174

167175
let mut map = self.write().expect(LOCK_EXPECT);

0 commit comments

Comments
 (0)