Skip to main content

rsiot/components/cmp_tsdb_writer/
query_stat.rs

1use std::{fmt::Display, time::Duration};
2
3/// Статистика выполнения SQL-запроса
4#[derive(Default)]
5pub struct QueryStat {
6    /// Название таблицы
7    pub table_name: String,
8
9    /// Количество строк
10    pub rows_count: usize,
11
12    /// Размер строки SQL-запроса в байтах
13    pub sql_string_len: usize,
14
15    /// Время, прошедшее с момента последнего выполнения запроса
16    pub last_execution: Duration,
17
18    /// Время выполнения запроса
19    pub execution_time: Duration,
20}
21
22impl QueryStat {
23    /// Создать структуру со значениями по умолчанию
24    pub fn new() -> Self {
25        Default::default()
26    }
27
28    /// Установить название таблицы
29    pub fn set_table_name(&mut self, table_name: &str) {
30        self.table_name = table_name.to_string();
31    }
32
33    /// Установить количество строк
34    pub fn set_rows_count(&mut self, rows_count: usize) {
35        self.rows_count = rows_count;
36    }
37
38    /// Установить размер строки SQL-запроса в байтах
39    pub fn set_sql_string_len(&mut self, sql_string_len: usize) {
40        self.sql_string_len = sql_string_len;
41    }
42
43    /// Установить время последнего выполнения запроса
44    pub fn set_last_execution(&mut self, last_execution: Duration) {
45        self.last_execution = last_execution;
46    }
47
48    /// Установить время выполнения запроса
49    pub fn set_execution_time(&mut self, execution_time: Duration) {
50        self.execution_time = execution_time;
51    }
52}
53
54impl Display for QueryStat {
55    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
56        write!(
57            f,
58            "SQL query stat: row count: {}; time elapsed: {} ms; SQL string len: {:.1} KB; execution time: {} ms",
59            self.rows_count,
60            self.last_execution.as_millis(),
61            self.sql_string_len as f32 / 1024.0,
62            self.execution_time.as_millis()
63        )
64    }
65}