pg_extras/queries/
long_running_queries.rs1use crate::queries::shared::{get_default_interval, Query};
2use crate::PgStatsVersion;
3use sqlx::postgres::{types::PgInterval, PgRow};
4use sqlx::Row;
5
6#[derive(Debug, Clone)]
7pub struct LongRunningQueries {
8 pub pid: i32,
9 pub duration: PgInterval,
10 pub query: String,
11}
12
13impl serde::Serialize for LongRunningQueries {
14 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
15 where
16 S: serde::Serializer,
17 {
18 use serde::ser::SerializeStruct;
19 let mut state = serializer.serialize_struct("LongRunningQueries", 3)?;
20 state.serialize_field("pid", &self.pid)?;
21 state.serialize_field("duration", &format!("{:?}", self.duration))?;
22 state.serialize_field("query", &self.query)?;
23 state.end()
24 }
25}
26
27impl Query for LongRunningQueries {
28 fn new(row: &PgRow) -> Self {
29 Self {
30 pid: row.try_get("pid").unwrap_or_default(),
31 duration: row.try_get("duration").unwrap_or(get_default_interval()),
32 query: row.try_get("query").unwrap_or_default(),
33 }
34 }
35
36 fn to_row(&self) -> prettytable::Row {
37 row![self.pid, format!("{:?}", self.duration), self.query]
38 }
39
40 fn headers() -> prettytable::Row {
41 row!["pid", "duration", "query"]
42 }
43
44 fn read_file(_pg_statement_version: Option<PgStatsVersion>) -> String {
45 include_str!("../sql/long_running_queries.sql").to_string()
46 }
47}