From 3eac9b25bf58e4d909260022bf2c394882d4c70e Mon Sep 17 00:00:00 2001 From: SilasMarvin <19626586+SilasMarvin@users.noreply.github.com> Date: Mon, 22 May 2023 10:46:16 -0700 Subject: [PATCH 1/5] Working millisecond execution_time display in cells --- pgml-dashboard/src/models.rs | 23 +++++++++++++++++------ pgml-dashboard/src/templates.rs | 7 +++++-- pgml-dashboard/templates/cell.html | 3 ++- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/pgml-dashboard/src/models.rs b/pgml-dashboard/src/models.rs index 3fbcaaf79..3c5740313 100644 --- a/pgml-dashboard/src/models.rs +++ b/pgml-dashboard/src/models.rs @@ -296,10 +296,11 @@ impl Cell { pub async fn render(&mut self, pool: &PgPool) -> anyhow::Result<()> { let cell_type: CellType = self.cell_type.into(); - let rendering = match cell_type { + let (rendering, execution_time) = match cell_type { CellType::Sql => { let queries = self.contents.split(";"); let mut rendering = String::new(); + let mut total_execution_duration = std::time::Duration::default(); for query in queries { if query.trim().is_empty() { @@ -307,7 +308,10 @@ impl Cell { } let result = match templates::Sql::new(pool, query).await { - Ok(sql) => sql.render_once()?, + Ok(sql) => { + total_execution_duration += sql.execution_duration; + sql.render_once()? + }, Err(err) => templates::SqlError { error: format!("{:?}", err), } @@ -317,7 +321,12 @@ impl Cell { rendering.push_str(&result); } - rendering + let execution_time = PgInterval{ + months: 0, + days: 0, + microseconds: total_execution_duration.as_micros().try_into().unwrap_or(0) + }; + (rendering, Some(execution_time)) } CellType::Markdown => { @@ -335,21 +344,23 @@ impl Cell { front_matter_delimiter: None, }; - format!( + (format!( "
TODO
+ Time: <%- (cell.execution_time.unwrap().microseconds as f64) / 1000.0 %>ms
+
Time: <%- (cell.execution_time.unwrap().microseconds as f64) / 1000.0 %>ms
-
+ Time: <%-
+ match cell.execution_time.unwrap().microseconds {
+ microseconds @ 1000000.. => format!("{}s", (microseconds as f64) / 1000000.),
+ microseconds @ 1000..=999999 => format!("{}ms", (microseconds as f64) / 1000.),
+ microseconds @ 0..=999 => format!("{}μs", microseconds),
+ _ => "0".to_string(),
+ }
+ %>
+ Time:
+ <%- match execution_duration.as_micros() {
+ microseconds @ 1000000.. => format!("{}s", (microseconds as f64) / 1000000.),
+ microseconds @ 1000..=999999 => format!("{}ms", (microseconds as f64) / 1000.),
+ microseconds @ 0..=999 => format!("{}μs", microseconds),
+ _ => "0".to_string(),
+ } %>
+
<% } %>
From b38ebe8f4277f1f3ec60cc076473da14043eb4b6 Mon Sep 17 00:00:00 2001
From: SilasMarvin <19626586+SilasMarvin@users.noreply.github.com>
Date: Mon, 22 May 2023 17:33:33 -0700
Subject: [PATCH 5/5] Added utils.rs, prevented double rendering
---
pgml-dashboard/src/lib.rs | 2 ++
pgml-dashboard/src/models.rs | 9 +++------
pgml-dashboard/src/templates.rs | 5 +++--
pgml-dashboard/src/utils.rs | 9 +++++++++
pgml-dashboard/templates/cell.html | 9 +--------
pgml-dashboard/templates/sql.html | 12 +++---------
6 files changed, 21 insertions(+), 25 deletions(-)
create mode 100644 pgml-dashboard/src/utils.rs
diff --git a/pgml-dashboard/src/lib.rs b/pgml-dashboard/src/lib.rs
index f8e747d4e..0fa686a2f 100644
--- a/pgml-dashboard/src/lib.rs
+++ b/pgml-dashboard/src/lib.rs
@@ -19,6 +19,7 @@ pub mod guards;
pub mod models;
mod responses;
mod templates;
+mod utils;
use guards::Cluster;
use responses::{BadRequest, ResponseOk};
@@ -558,6 +559,7 @@ pub async fn uploaded_index(cluster: Cluster, table_name: &str) -> ResponseOk {
let sql = templates::Sql::new(
cluster.pool(),
&format!("SELECT * FROM {} LIMIT 10", table_name),
+ true,
)
.await
.unwrap();
diff --git a/pgml-dashboard/src/models.rs b/pgml-dashboard/src/models.rs
index 3c5740313..13fb5fb63 100644
--- a/pgml-dashboard/src/models.rs
+++ b/pgml-dashboard/src/models.rs
@@ -298,16 +298,13 @@ impl Cell {
let (rendering, execution_time) = match cell_type {
CellType::Sql => {
- let queries = self.contents.split(";");
+ let queries: Vec<&str> = self.contents.split(';').filter(|q| !q.trim().is_empty()).collect();
let mut rendering = String::new();
let mut total_execution_duration = std::time::Duration::default();
+ let render_individual_execution_duration = queries.len() > 1;
for query in queries {
- if query.trim().is_empty() {
- continue;
- }
-
- let result = match templates::Sql::new(pool, query).await {
+ let result = match templates::Sql::new(pool, query, render_individual_execution_duration).await {
Ok(sql) => {
total_execution_duration += sql.execution_duration;
sql.render_once()?
diff --git a/pgml-dashboard/src/templates.rs b/pgml-dashboard/src/templates.rs
index 0704ab245..fe2425cb0 100644
--- a/pgml-dashboard/src/templates.rs
+++ b/pgml-dashboard/src/templates.rs
@@ -56,10 +56,11 @@ pub struct Sql {
pub columns: VecTime: <%-
- match cell.execution_time.unwrap().microseconds {
- microseconds @ 1000000.. => format!("{}s", (microseconds as f64) / 1000000.),
- microseconds @ 1000..=999999 => format!("{}ms", (microseconds as f64) / 1000.),
- microseconds @ 0..=999 => format!("{}μs", microseconds),
- _ => "0".to_string(),
- }
- %>
+ Time: <%= crate::utils::format_microseconds(cell.execution_time.unwrap().microseconds as f64) %>
- Time:
- <%- match execution_duration.as_micros() {
- microseconds @ 1000000.. => format!("{}s", (microseconds as f64) / 1000000.),
- microseconds @ 1000..=999999 => format!("{}ms", (microseconds as f64) / 1000.),
- microseconds @ 0..=999 => format!("{}μs", microseconds),
- _ => "0".to_string(),
- } %>
-
+ <% if render_execution_duration { %>
+ Time: <%= crate::utils::format_microseconds(execution_duration.as_micros() as f64) %>
+ <% } %>
<% } %>
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: