import os import pandas as pd import pyodbc import shutil import time from datetime import datetime import glob import warnings # Constants SERVER = '192.168.32.10' DATABASE = 'MES2' USERNAME = 'mcats' PASSWORD = 'mdogs' SOURCE_DIR = 'C:/Users/marcielo.abalos/Desktop/source/' DESTINATION_DIR = 'C:/Users/marcielo.abalos/Desktop/destination/' # Global cursor and connection variables cursor = None conn = None # Database connection def connect_to_database(): global cursor, conn try: conn = pyodbc.connect(f'DRIVER=SQL Server;SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}') cursor = conn.cursor() except pyodbc.Error as e: print(f"Database connection error: {e}") def extract_data_from_file(file_path): try: http_lines = [] enddate = [] # Capture and print lines that start with "http://" with open(file_path, 'r', encoding='utf-8', errors='ignore') as file: for line in file: if line.startswith('http://192.168.201.59/TytocareWS/TytocareWS.asmx/InsertTestResult'): http_lines.append(line.strip()) elif line.startswith('END TIME'): enddate.append(line.strip()) return http_lines, enddate except Exception as e: print(f"Error occurred while reading file {file_path}: {e}") return None, None def check_record_exists(conn, cardno, station, machine, status, lastupdate): query = """ SELECT count(*) as record_count FROM log_pass WHERE cardno = ? AND station = ? AND machine = ? AND status = ? AND lastupdate = ? """ params = (f"{cardno}_1", station, machine, status, lastupdate) serial_check = pd.read_sql_query(query, conn, params=params) return int(serial_check['record_count'].iloc[0]) def main_loop(): try: global cursor if cursor: # Get all files in the source directory files = glob.glob(SOURCE_DIR + '*.txt') if files: for file in files: http_lines, enddate = extract_data_from_file(file) if http_lines is not None: for line in http_lines: logfile_data = line.split('?')[1] split_logfile_data = logfile_data.split('&') cardno = split_logfile_data[0].split('=')[1] stage = split_logfile_data[3].split('=')[1] machine = split_logfile_data[4].split('=')[1] lastupdatedby = split_logfile_data[5].split('=')[1] status = split_logfile_data[6].split('=')[1] symptoms = split_logfile_data[7].split('=')[1] if status == 'PASSED': database_status = 'GOOD' else: database_status = 'REJECT' if len(enddate) > 0: enddate_str = enddate[0].split(': ')[1] test_date_end = datetime.strptime(enddate_str, "%m-%d-%Y %H:%M:%S:%f") new_date_str_end = test_date_end.strftime('%Y-%m-%d %H:%M:%S.%f') log_pass_lastupdate = str(new_date_str_end[:-3]) else: log_pass_lastupdate = None exists = check_record_exists(conn, cardno, stage, machine, database_status, log_pass_lastupdate) if exists > 0: print(f"Record already exists for cardno: {cardno}, stage: {stage}, machine: {machine}, status: {database_status}, lastupdate: {log_pass_lastupdate}") shutil.move(file, DESTINATION_DIR + os.path.basename(file)) print('File Moved Successfully!') else: # Insert data into the database insert_logpass = "INSERT INTO dbo.log_pass (account, cardno, line, sequence, station, machine, status, lastupdate, lastupdatedby) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" cursor.execute(insert_logpass, ('G5', cardno + '_1', '', '', stage, machine, database_status, log_pass_lastupdate, 'cats')) conn.commit() print('History inserted successfully') # Insert data into log_repair if failed if status == 'FAILED': check_defect = pd.read_sql_query(f"SELECT defectCode FROM dbo.defectProd2 WHERE description = '{symptoms}'", conn) defect_code = check_defect.iloc[0]['defectCode'] insert_log_repair = "INSERT INTO dbo.log_repair (account, cardno, stage, machine, category, defect, location, details, status, addinfo, serialAffected, component, remarks, rejectDate, rejectUser, repairDate, repairUser, lastupdate, lastupdatedby) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" cursor.execute(insert_log_repair, ('G5', cardno + "_1", stage, machine, "Testing Defects", defect_code, "", symptoms, "0", "", "", "", "", log_pass_lastupdate, lastupdatedby, "", "", log_pass_lastupdate, lastupdatedby)) conn.commit() print('Reject Details inserted successfully') shutil.move(file, DESTINATION_DIR + os.path.basename(file)) print('File Moved Successfully!') else: print('No .txt files in the directory found!') else: print('connection failed') except Exception as e: print(f"An error occurred: {e}") # Run the loop continuously if __name__ == "__main__": while True: with warnings.catch_warnings(): warnings.simplefilter("ignore") connect_to_database() main_loop() time.sleep(10)