Skip to content

Commit 40b3195

Browse files
authored
feat: add timeTaken to query response (#1270)
1 parent d9da876 commit 40b3195

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/handlers/http/query.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ use crate::query::error::ExecuteError;
4444
use crate::query::{execute, CountsRequest, CountsResponse, Query as LogicalQuery};
4545
use crate::query::{TableScanVisitor, QUERY_SESSION};
4646
use crate::rbac::Users;
47-
use crate::response::QueryResponse;
47+
use crate::response::{QueryResponse, TIME_ELAPSED_HEADER};
4848
use crate::storage::object_storage::commit_schema_to_storage;
4949
use crate::storage::ObjectStorageError;
5050
use crate::utils::actix::extract_session_key_from_req;
@@ -122,22 +122,26 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
122122
Value::Array(vec![json!({column_name: count})])
123123
};
124124

125+
let total_time = format!("{:?}", time.elapsed());
125126
let time = time.elapsed().as_secs_f64();
126127

127128
QUERY_EXECUTE_TIME
128129
.with_label_values(&[&table_name])
129130
.observe(time);
130131

131-
return Ok(HttpResponse::Ok().json(response));
132+
return Ok(HttpResponse::Ok()
133+
.insert_header((TIME_ELAPSED_HEADER, total_time.as_str()))
134+
.json(response));
132135
}
133136

134137
let (records, fields) = execute(query, &table_name).await?;
135-
138+
let total_time = format!("{:?}", time.elapsed());
136139
let response = QueryResponse {
137140
records,
138141
fields,
139142
fill_null: query_request.send_null,
140143
with_fields: query_request.fields,
144+
total_time,
141145
}
142146
.to_http()?;
143147

src/response.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ use itertools::Itertools;
2323
use serde_json::{json, Value};
2424
use tracing::info;
2525

26+
pub const TIME_ELAPSED_HEADER: &str = "p-time-elapsed";
27+
2628
pub struct QueryResponse {
2729
pub records: Vec<RecordBatch>,
2830
pub fields: Vec<String>,
2931
pub fill_null: bool,
3032
pub with_fields: bool,
33+
pub total_time: String,
3134
}
3235

3336
impl QueryResponse {
@@ -49,12 +52,14 @@ impl QueryResponse {
4952
let response = if self.with_fields {
5053
json!({
5154
"fields": self.fields,
52-
"records": values
55+
"records": values,
5356
})
5457
} else {
5558
Value::Array(values)
5659
};
5760

58-
Ok(HttpResponse::Ok().json(response))
61+
Ok(HttpResponse::Ok()
62+
.insert_header((TIME_ELAPSED_HEADER, self.total_time.as_str()))
63+
.json(response))
5964
}
6065
}

0 commit comments

Comments
 (0)