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("Syslog File Location:", syslog_file)
print("Retention Period:", retention_period)
print("Bookmark Index:", bookmark_index)
print("Purging Logs...")
try:
bookmark_line = linecache.getline(syslog_file, int(bookmark_index)).strip()
print("Bookmark Line:", bookmark_line)
except Exception as e:
print("Exception while reading line from file:", e)
return None
if not bookmark_line:
print("Bookmark line not found.")
continue
bookmark_timestamp = get_timestamp_from_line(bookmark_line)
print("Bookmark Timestamp:", bookmark_timestamp)
# 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()
print("Bookmark Date:", bookmark_date)
current_date = datetime.datetime.now().date()
print("Current Date:", current_date)
purging_date = current_date - datetime.timedelta(days=retention_period)
print("Purging Date:", purging_date)
if purging_date < bookmark_date:
print("Performing Purging..")
perform_purging()
else:
print("Purging date greater than Bookmark Date")
# 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:
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)
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")
print("Lines Purged:", lines_purged)
print("Printing First Two Lines:")
with open(syslog_file, "r") as file:
print(file.readline())
print(file.readline())
else:
print("Purging is not needed.")
purge_logs()