MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: machen (1008)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //opt/microsoft/omsagent/tst/modules/heartbeat/check_logs.py
import errno
import re
import subprocess

from error_codes import *
from errors      import error_info

def get_omsagent_logs(LOG_PATH):
    log_tail_size = 50
    lts_mult = 1
    parsed_log_lines = []
    log_template = r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (\+|-)\d{4} \[\w+\]: .*$"

    try:
        # open omsagent.log
        with open(LOG_PATH, 'r') as log_file:
            log_lines = log_file.readlines()
            last_update_lines = log_lines
            # read from bottom up until run into end of omsagent.conf (printed when agent starts up)
            # then grab all logs after (for all logs since agent started)
            for i in range(len(log_lines)-1, -1, -1):
                if (log_lines[i] == "</ROOT>\n"):
                    last_update_lines = log_lines[i+1:]
                    break

            # parse logs
            for line in last_update_lines:
                line = line.rstrip('\n')
                # empty line
                if (line == ''):
                    continue
                # conf file text
                if (re.match(log_template, line) == None):
                    continue
                parsed_log = line.split(' ', 4)
                parsed_log[3] = parsed_log[3].rstrip(':')
                parsed_log.append(line)
                # [ date, time, zone, [logtype], log, unparsed log ]
                parsed_log_lines.append(parsed_log)
        
        return (parsed_log_lines, None)

    # ran into an error with opening file
    except IOError as e:
        # can't access due to permissions
        if (e.errno == errno.EACCES):
            error_info.append((LOG_PATH,))
            return (None, 100)
        # file doesn't exist
        elif (e.errno == errno.ENOENT):
            error_info.append(("file", LOG_PATH))
            return (None, ERR_FILE_MISSING)
        # some other error
        else:
            error_info.append((LOG_PATH, e))
            return (None, ERR_FILE_ACCESS)



# check log for heartbeats
def check_log_heartbeat(workspace):
    LOG_PATH = "/var/opt/microsoft/omsagent/{0}/log/omsagent.log".format(workspace)
    (parsed_log_lines, get_logs_errs) = get_omsagent_logs(LOG_PATH)
    if (parsed_log_lines == None):
        return get_logs_errs

    # filter out errors
    parsed_log_errs = list(filter(lambda x : (x[3]) == '[error]', parsed_log_lines))
    if (len(parsed_log_errs) > 0):
        log_err_lines = list(map(lambda x : x[-1], parsed_log_errs))
        log_errs = '\n  ' + ('\n  '.join(log_err_lines))
        error_info.append((LOG_PATH, log_errs))
        return WARN_LOG_ERRS

    # filter warnings
    parsed_log_warns = list(filter(lambda x : (x[3]) == '[warn]', parsed_log_lines))
    if (len(parsed_log_warns) > 0):
        hb_fail_logs = list(filter(lambda x : 'failed to flush the buffer' in x[4], parsed_log_warns))
        if (len(hb_fail_logs) > 0):
            return ERR_HEARTBEAT
        else:
            log_warn_lines = list(map(lambda x : x[-1], parsed_log_warns))
            log_warns = '\n  ' + ('\n  '.join(log_warn_lines))
            error_info.append((LOG_PATH, log_warns))
            return WARN_LOG_WARNS

    # logs show no errors or warnings
    return NO_ERROR