Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
5.1 kB
1
Indexable
Never
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.
Leave a Comment