diff --git a/extension/src/controller/bgw_transformer_client.rs b/extension/src/controller/bgw_transformer_client.rs index 80131fe..bba1de7 100644 --- a/extension/src/controller/bgw_transformer_client.rs +++ b/extension/src/controller/bgw_transformer_client.rs @@ -19,13 +19,18 @@ const MAX_TRANSFORMER_RETRIES: u8 = 3; // TODO: Set in GUC #[no_mangle] pub extern "C" fn background_worker_transformer_client(_arg: pg_sys::Datum) { + let database_name_string = guc::get_guc(guc::PgAutoDWGuc::DatabaseName); + let database_name_o: Option<&str> = database_name_string.as_deref(); + BackgroundWorker::attach_signal_handlers(SignalWakeFlags::SIGHUP | SignalWakeFlags::SIGTERM); - BackgroundWorker::connect_worker_to_spi(Some("pg_auto_dw"), None); + BackgroundWorker::connect_worker_to_spi(database_name_o, None); // Initialize Tokio runtime let runtime = Runtime::new().expect("Failed to create Tokio runtime"); while BackgroundWorker::wait_latch(Some(Duration::from_secs(10))) { + + extension_log("BGWorker: Transformer Client", "INFO", "Beginning Transformer Background Process."); // Load Prompts into Results let result: Result, pgrx::spi::Error> = BackgroundWorker::transaction(|| { @@ -289,6 +294,20 @@ pub extern "C" fn background_worker_transformer_client(_arg: pg_sys::Datum) { } } +fn extension_log(process: &str, level: &str, message: &str) { + + let insert_statement = format!(r#" + INSERT INTO auto_dw.log (process, level, message) + VALUES ('{}', '{}', '{}'); + "#, process, level, message); + + BackgroundWorker::transaction(|| { + Spi::connect(|mut client| { + _ = client.update(insert_statement.as_str(), None, None); + }) + }); +} + fn extract_column_numbers(json_str: &str) -> Vec { // Define a regex to capture the column numbers let re = Regex::new(r"Column No: (\d+)").expect("Invalid regex"); diff --git a/extension/src/utility/sql/info_tables.sql b/extension/src/utility/sql/info_tables.sql index e99997b..2963be5 100644 --- a/extension/src/utility/sql/info_tables.sql +++ b/extension/src/utility/sql/info_tables.sql @@ -64,3 +64,13 @@ CREATE TABLE dv_repo ( insert_time TIMESTAMP WITHOUT TIME ZONE DEFAULT (now() AT TIME ZONE 'UTC'), schema JSON ); + +DROP TABLE IF EXISTS log; + +CREATE TABLE log ( + pk_log BIGSERIAL PRIMARY KEY, + log_ts TIMESTAMP WITHOUT TIME ZONE DEFAULT (NOW() AT TIME ZONE 'UTC'), + process VARCHAR(50), + level VARCHAR(50), + message TEXT +);