2026-05-14 12:28:06,043 [INFO] Starting PSA gap analysis collector 2026-05-14 12:28:06,044 [INFO] Connecting to PSA SQL source 2026-05-14 12:28:06,044 [ERROR] Collector failed: Missing required environment variable: PSA_SQL_SERVER Traceback (most recent call last): File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 184, in main rows = fetch_psa_rows() File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 88, in fetch_psa_rows with connect_psa_sql() as conn: ~~~~~~~~~~~~~~~^^ File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 46, in connect_psa_sql server = get_env("PSA_SQL_SERVER") File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 41, in get_env raise RuntimeError(f"Missing required environment variable: {name}") RuntimeError: Missing required environment variable: PSA_SQL_SERVER 2026-05-14 12:28:24,743 [INFO] Starting PSA gap analysis collector 2026-05-14 12:28:24,743 [INFO] Connecting to PSA SQL source 2026-05-14 12:28:24,751 [ERROR] Collector failed: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)') Traceback (most recent call last): File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 184, in main rows = fetch_psa_rows() File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 88, in fetch_psa_rows with connect_psa_sql() as conn: ~~~~~~~~~~~~~~~^^ File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 62, in connect_psa_sql return pyodbc.connect(conn_str) ~~~~~~~~~~~~~~^^^^^^^^^^ pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)') 2026-05-14 12:30:19,695 [INFO] Starting PSA gap analysis collector 2026-05-14 12:30:19,695 [INFO] Connecting to PSA SQL source 2026-05-14 12:31:05,045 [ERROR] Collector failed: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [64]. (64) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (64)') Traceback (most recent call last): File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 184, in main rows = fetch_psa_rows() File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 88, in fetch_psa_rows with connect_psa_sql() as conn: ~~~~~~~~~~~~~~~^^ File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 62, in connect_psa_sql return pyodbc.connect(conn_str) ~~~~~~~~~~~~~~^^^^^^^^^^ pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [64]. (64) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (64)') 2026-05-14 12:31:52,251 [INFO] Starting PSA gap analysis collector 2026-05-14 12:31:52,251 [INFO] Connecting to PSA SQL source 2026-05-14 12:31:52,372 [INFO] Executing PSA query 2026-05-14 12:31:56,310 [INFO] Fetched 16187 rows from PSA SQL source 2026-05-14 12:31:56,312 [INFO] Connecting to MariaDB destination 2026-05-14 12:31:56,397 [ERROR] Collector failed: 'ticket_id' Traceback (most recent call last): File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 185, in main upserted = upsert_rows(rows) File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 159, in upsert_rows cursor.executemany(sql, rows) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 195, in executemany self.rowcount = sum(self.execute(query, arg) for arg in args) ~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 195, in self.rowcount = sum(self.execute(query, arg) for arg in args) ~~~~~~~~~~~~^^^^^^^^^^^^ File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 155, in execute query = self.mogrify(query, args) File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 133, in mogrify query = query % self._escape_args(args, conn) ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ KeyError: 'ticket_id' 2026-05-14 12:33:17,682 [INFO] Starting PSA gap analysis collector 2026-05-14 12:33:17,682 [INFO] Connecting to PSA SQL source 2026-05-14 12:33:17,778 [INFO] Executing PSA query 2026-05-14 12:33:20,725 [INFO] Fetched 16187 rows from PSA SQL source 2026-05-14 12:33:20,727 [INFO] Connecting to MariaDB destination 2026-05-14 12:33:20,773 [ERROR] Collector failed: 'company_name' Traceback (most recent call last): File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 185, in main upserted = upsert_rows(rows) File "C:\Users\btaylor\Git\PSA-Gap-Analysis\collector.py", line 159, in upsert_rows cursor.executemany(sql, rows) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 195, in executemany self.rowcount = sum(self.execute(query, arg) for arg in args) ~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 195, in self.rowcount = sum(self.execute(query, arg) for arg in args) ~~~~~~~~~~~~^^^^^^^^^^^^ File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 155, in execute query = self.mogrify(query, args) File "C:\Users\btaylor\AppData\Local\Programs\Python\Python313\Lib\site-packages\pymysql\cursors.py", line 133, in mogrify query = query % self._escape_args(args, conn) ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ KeyError: 'company_name' 2026-05-14 12:36:04,850 [INFO] Starting PSA gap analysis collector 2026-05-14 12:36:04,851 [INFO] Connecting to PSA SQL source 2026-05-14 12:36:04,937 [INFO] Executing PSA query 2026-05-14 12:36:09,779 [INFO] Fetched 16187 rows from PSA SQL source 2026-05-14 12:36:09,782 [INFO] Connecting to MariaDB destination 2026-05-14 12:37:01,814 [INFO] Upserted 16187 rows into MariaDB 2026-05-14 12:37:01,816 [INFO] Collector completed successfully. Rows fetched: 16187. Rows upserted: 16187