Untitled
unknown
plain_text
2 years ago
5.1 kB
6
Indexable
This the one code block- def get_retention_period(vm): with open(agent_file, encoding='latin-1') as file: for line in file: if line.startswith(str(vm) + ".vmmetricskpi.syslog_retention_period_in_days"): return int(line.split("=")[1].strip()) return 0 def get_bookmark_index(vm_ip): with open(bookmark_properties_file) as file: for line in file: if line.startswith(str(vm_ip) + "_bookmark_log"): return int(line.split("=")[1].strip()) return 0 def get_timestamp_from_line(line): # Extract the timestamp from the line try: timestamp = line.strip().split(' ')[0] return timestamp except IndexError: return None def purge_logs(): vm_details = get_vm_details() for vm in vm_details: vm_id = vm['vm_id'] vm_ip = vm['vm_ip'] syslog_file = vm['syslog_file_location'] retention_period = get_retention_period(vm_id) #bookmark_index = get_bookmark_index(vm_ip) print("VM:", vm_id) print("VM_IP:", vm_ip) #bookmark_record=str(vm_ip) + "_bookmark_log" #print("Bookmark record ",bookmark_record) print("Syslog File Location:", syslog_file) print("Retention Period:", retention_period) #print("Bookmark Index:", bookmark_index) #print("Purging Logs...") current_date = datetime.datetime.now().date() print("Current Date:", current_date) logging.info("Current Date %s ", current_date) try: bookmark_line = linecache.getline(syslog_file, str(current_date)).strip().strip() print("Bookmark Line:", bookmark_line) except Exception as e: print("Exception while reading line from file:", e) logging.error("Exception while reading line from file %s ",e) return None if not bookmark_line: print("Bookmark line not found.") logging.error("Bookmark line not found.") continue # Calculate the purging date (retention_period days before the bookmark timestamp) #bookmark_date = datetime.datetime.strptime(bookmark_timestamp, "%Y-%m-%dT%H:%M:%S+00:00").date() bookmark_date = parse(bookmark_timestamp).date() ## Changes made here 20sep23 print("Bookmark Date:", bookmark_date) logging.info("Bookmark Date %s ", bookmark_date) purging_date = current_date - datetime.timedelta(days=retention_period) print("Purging Date:", purging_date) logging.info("Purging Date : %s ", purging_date) if purging_date <= bookmark_date: print("Performing Purging..") ## Function call to perform purging perform_purging(syslog_file, purging_date,bookmark_record) else: print("Purging date greater than Bookmark Date, no purging will be done") logging.info("Purging date greater than Bookmark Date, no purging will be done") def perform_purging(syslog_file, purging_date, bookmark_record): # Perform the log purging temp_file = syslog_file + ".tmp" # Create a temporary file # Search for the purging date in the syslog file purging_line_number = None with open(syslog_file, "r") as file: print("Opening Syslog File...") for line_number, line in enumerate(file, 1): if str(purging_date) in line: purging_line_number = line_number print("Purging Line Number:", purging_line_number) logging.info("Purging Line Number %s ",purging_line_number ) break if purging_line_number is not None: # Delete lines before the purging date with open(syslog_file, "r") as input_file, open(temp_file, "w") as output_file: for line_number, line in enumerate(input_file, 1): if line_number >= purging_line_number: output_file.write(line) # Replace the original file with the temporary file shutil.move(temp_file, syslog_file) lines_purged = purging_line_number - 1 print("Purging Completed") logging.info("Purging Completed") print("Lines Purged:", lines_purged) logging.info("Lines Purged: %s ", lines_purged) print("Printing First Two Lines:") with open(syslog_file, "r") as file: print(file.readline()) print(file.readline()) # Update the bookmark index in the bookmark file update_bookmark_index(bookmark_record, lines_purged) else: print("Purging is not needed.") logging.info("Purging is not needed.") There is one change in requirement wherein we need to purge the lines from file with current_date -1 , so if today's date is 12 Dec , it should simply open syslog file and check for that dates less than 11 dec and remove those lines. Only records from 11 th Dec onwards should be there. Can you show changes in code based on our requirement please.
Editor is loading...
Leave a Comment