74 lines
3.2 KiB
Rust
74 lines
3.2 KiB
Rust
// file: kb-app-demo-desktop/src/demo_sql_diag.rs
|
|
// version: 5
|
|
|
|
//! SQL diagnostic demo commands.
|
|
|
|
use ts_rs::TS; // rust-rules: derive-import
|
|
|
|
/// Complete SQL diagnostic payload shown by `demo_sql_diag`.
|
|
#[derive(Clone, Debug, serde::Serialize, TS)]
|
|
#[serde(rename_all = "camelCase")]
|
|
#[ts(
|
|
export,
|
|
export_to = "../frontend/ts/bindings/kb_app_demo_desktop/demo_sql_diag/DemoSqlDiagPayload.ts"
|
|
)]
|
|
pub(crate) struct DemoSqlDiagPayload {
|
|
/// Configuration file path.
|
|
pub(crate) config_path: std::string::String,
|
|
/// Active profile name.
|
|
pub(crate) active_profile_name: std::string::String,
|
|
/// Configured database backend.
|
|
pub(crate) backend: std::string::String,
|
|
/// Masked PostgreSQL DSN.
|
|
pub(crate) masked_dsn: std::string::String,
|
|
/// PostgreSQL current schema.
|
|
pub(crate) current_schema: std::option::Option<std::string::String>,
|
|
/// PostgreSQL health status.
|
|
pub(crate) health_status: std::string::String,
|
|
/// PostgreSQL health message.
|
|
pub(crate) health_message: std::option::Option<std::string::String>,
|
|
/// Migration status.
|
|
pub(crate) migration_status: std::string::String,
|
|
/// Migration diagnostic message.
|
|
pub(crate) migration_message: std::option::Option<std::string::String>,
|
|
/// PostgreSQL server version when available.
|
|
pub(crate) server_version: std::option::Option<std::string::String>,
|
|
/// Known raw/core table diagnostics.
|
|
pub(crate) tables: std::vec::Vec<crate::DemoSqlTableSnapshot>,
|
|
}
|
|
|
|
/// Loads read-only SQL diagnostics from the active profile.
|
|
pub(crate) async fn load_demo_sql_diag(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoSqlDiagPayload, std::string::String> {
|
|
let profile = state.active_profile().clone();
|
|
let store_result = crate::connect_postgres_store(&profile).await;
|
|
let store = match store_result {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
|
};
|
|
let diagnostics_result = store.backend_diagnostics().await;
|
|
let diagnostics = match diagnostics_result {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(error) => return std::result::Result::Err(error.to_string()),
|
|
};
|
|
let tables_result = store.known_table_diagnostics().await;
|
|
let tables = match tables_result {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(error) => return std::result::Result::Err(error.to_string()),
|
|
};
|
|
return std::result::Result::Ok(crate::DemoSqlDiagPayload {
|
|
config_path: state.config_path().to_string(),
|
|
active_profile_name: profile.name.clone(),
|
|
backend: profile.database.backend.clone(),
|
|
masked_dsn: store.options().masked_dsn(),
|
|
current_schema: diagnostics.descriptor.current_schema,
|
|
health_status: crate::debug_status(diagnostics.health.status),
|
|
health_message: diagnostics.health.message,
|
|
migration_status: crate::debug_status(diagnostics.migrations.status),
|
|
migration_message: diagnostics.migrations.message,
|
|
server_version: diagnostics.server_version,
|
|
tables: crate::table_snapshots_from_pg(tables.as_slice()),
|
|
});
|
|
}
|