130 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import logging, os, traceback, re, sys, subprocess
 | 
						|
from enum import Enum
 | 
						|
from linuxmusterLinuxclient7 import user, config
 | 
						|
 | 
						|
class Level(Enum):
 | 
						|
    DEBUG = 0
 | 
						|
    INFO = 1
 | 
						|
    WARNING = 2
 | 
						|
    ERROR = 3
 | 
						|
    FATAL = 4
 | 
						|
 | 
						|
def debug(message):
 | 
						|
    """
 | 
						|
    Do a debug log.
 | 
						|
 | 
						|
    :param message: The message to log
 | 
						|
    :type message: str
 | 
						|
    """
 | 
						|
    _log(Level.DEBUG, message)
 | 
						|
 | 
						|
def info(message):
 | 
						|
    """
 | 
						|
    Do an info log.
 | 
						|
 | 
						|
    :param message: The message to log
 | 
						|
    :type message: str
 | 
						|
    """
 | 
						|
    _log(Level.INFO, message)
 | 
						|
 | 
						|
def warning(message):
 | 
						|
    """
 | 
						|
    Do a warning log.
 | 
						|
 | 
						|
    :param message: The message to log
 | 
						|
    :type message: str
 | 
						|
    """
 | 
						|
    _log(Level.WARNING, message)
 | 
						|
 | 
						|
def error(message):
 | 
						|
    """
 | 
						|
    Do an error log.
 | 
						|
 | 
						|
    :param message: The message to log
 | 
						|
    :type message: str
 | 
						|
    """
 | 
						|
    _log(Level.ERROR, message)
 | 
						|
 | 
						|
def fatal(message):
 | 
						|
    """
 | 
						|
    Do a fatal log. If used in onLogin hook, this will create a dialog containing the message.
 | 
						|
 | 
						|
    :param message: The message to log
 | 
						|
    :type message: str
 | 
						|
    """
 | 
						|
    _log(Level.FATAL, message)
 | 
						|
 | 
						|
def exception(exception):
 | 
						|
    """
 | 
						|
    Log an exception
 | 
						|
 | 
						|
    :param exception: The exception to log
 | 
						|
    :type exception: Exception
 | 
						|
    """
 | 
						|
    error("=== An exception occurred ===")
 | 
						|
    error(str(exception))
 | 
						|
    # Only use for debugging! This will cause ugly error dialogs in X11
 | 
						|
    #traceback.print_tb(exception.__traceback__)
 | 
						|
    error("=== end exception ===")
 | 
						|
 | 
						|
def printLogs(compact=False,anonymize=False):
 | 
						|
    """
 | 
						|
    Print logs of linuxmuster-linuxclient7 from `/var/log/syslog`.
 | 
						|
 | 
						|
    :param compact: If set to True, some stuff like time and date will be removed. Defaults to False
 | 
						|
    :type compact: bool, optional
 | 
						|
    :param anonymize: If set to True, domain/realm/serverHostname will be replaced by linuxmuster.lan. Defaults to False
 | 
						|
    :type anonymize: bool, optional
 | 
						|
    """
 | 
						|
    print("===========================================")
 | 
						|
    print("=== Linuxmuster-linuxclient7 logs begin ===")
 | 
						|
 | 
						|
    (rc, networkConfig) = config.network()
 | 
						|
    if rc:
 | 
						|
        domain = networkConfig["domain"]
 | 
						|
        serverHostname = networkConfig["serverHostname"]
 | 
						|
        realm= networkConfig["realm"]
 | 
						|
 | 
						|
    with open("/var/log/syslog") as logfile:
 | 
						|
        startPattern = re.compile("^.*linuxmuster-linuxclient7[^>]+======$")
 | 
						|
        endPattern = re.compile("^.*linuxmuster-linuxclient7.*======>.*$")
 | 
						|
 | 
						|
        currentlyInsideOfLinuxmusterLinuxclient7Log = False
 | 
						|
 | 
						|
        for line in logfile:
 | 
						|
            line = line.replace("\n", "")
 | 
						|
            if startPattern.fullmatch(line):
 | 
						|
                currentlyInsideOfLinuxmusterLinuxclient7Log = True
 | 
						|
                print("\n")
 | 
						|
 | 
						|
            if currentlyInsideOfLinuxmusterLinuxclient7Log:
 | 
						|
                if compact:
 | 
						|
                    # "^([^ ]+[ ]+){4}" matches "Apr  6 14:39:23 somehostname" 
 | 
						|
                    line = re.sub("^([^ ]+[ ]+){4}", "", line)
 | 
						|
                if anonymize and rc:
 | 
						|
                    line = re.sub(serverHostname, "server.linuxmuster.lan", line)
 | 
						|
                    line = re.sub(domain, "linuxmuster.lan", line)
 | 
						|
                    line = re.sub(realm, "LINUXMUSTER.LAN", line)
 | 
						|
 | 
						|
                print(line)
 | 
						|
 | 
						|
            if endPattern.fullmatch(line):
 | 
						|
                currentlyInsideOfLinuxmusterLinuxclient7Log = False
 | 
						|
                print("\n")
 | 
						|
            
 | 
						|
    print("=== Linuxmuster-linuxclient7 logs end ===")
 | 
						|
    print("=========================================")
 | 
						|
 | 
						|
# --------------------
 | 
						|
# - Helper functions -
 | 
						|
# --------------------
 | 
						|
 | 
						|
def _log(level, message):
 | 
						|
    #if level == Level.DEBUG:
 | 
						|
    #    return
 | 
						|
    if level == Level.FATAL:
 | 
						|
        sys.stderr.write(message)
 | 
						|
        
 | 
						|
    print("[{0}] {1}".format(level.name, message))
 | 
						|
    message = message.replace("'", "")
 | 
						|
    subprocess.call(["logger", "-t", "linuxmuster-linuxclient7", f"[{level.name}] {message}"])
 |