Nettacker/nettacker/logger.py

203 lines
4.8 KiB
Python

import sys
from enum import Enum
from functools import cached_property
from nettacker.core.utils import time
class TerminalCodes(Enum):
RESET = "\033[0m"
# Colors \033[1;
GREY = "\033[1;30m"
RED = "\033[1;31m"
GREEN = "\033[1;32m"
YELLOW = "\033[1;33m"
BLUE = "\033[1;34m"
PURPLE = "\033[1;35m"
CYAN = "\033[1;36m"
WHITE = "\033[1;37m"
class Logger:
"""Nettacker logger."""
@staticmethod
def log(text):
print(text, end="", flush=True) # noqa: T201
@cached_property
def run_from_api(self):
"""
check if framework run from API to prevent any alert
Returns:
True if run from API otherwise False
"""
return "--start-api" in sys.argv
@cached_property
def verbose_mode_is_enabled(self):
return "--verbose" in sys.argv or "-v" in sys.argv
@cached_property
def event_verbose_mode_is_enabled(self):
return "--verbose-event" in sys.argv
def info(self, content):
"""
build the info message, log the message in database if requested,
rewrite the thread temporary file
Args:
content: content of the message
Returns:
None
"""
if not self.run_from_api:
self.log(
TerminalCodes.YELLOW.value
+ "[{0}][+] ".format(time.now())
+ TerminalCodes.GREEN.value
+ content
+ TerminalCodes.RESET.value
+ "\n",
)
def verbose_event_info(self, content):
"""
build the info message, log the message in database if requested,
rewrite the thread temporary file
Args:
content: content of the message
Returns:
None
"""
if not self.run_from_api and (
self.verbose_mode_is_enabled or self.event_verbose_mode_is_enabled
): # prevent to stdout if run from API
self.log(
TerminalCodes.YELLOW.value
+ "[{0}][+] ".format(time.now())
+ TerminalCodes.GREEN.value
+ content
+ TerminalCodes.RESET.value
+ "\n",
)
def write(self, content):
"""
simple print a message
Args:
content: content of the message
Returns:
None
"""
if not self.run_from_api:
self.log(content)
def success_event_info(self, content):
"""
build the info message, log the message in database if requested,
rewrite the thread temporary file
Args:
content: content of the message
Returns:
None
"""
if not self.run_from_api:
self.log(
TerminalCodes.RED.value
+ "[{0}][+++] ".format(time.now())
+ TerminalCodes.CYAN.value
+ content
+ TerminalCodes.RESET.value
+ "\n",
)
def verbose_info(self, content):
"""
build the info message, log the message in database if requested,
rewrite the thread temporary file
Args:
content: content of the message
Returns:
None
"""
if self.verbose_mode_is_enabled:
self.log(
TerminalCodes.YELLOW.value
+ "[{0}][+] ".format(time.now())
+ TerminalCodes.PURPLE.value
+ content
+ TerminalCodes.RESET.value
+ "\n",
)
def warn(self, content):
"""
build the warn message
Args:
content: content of the message
Returns:
the message in warn structure - None
"""
if not self.run_from_api:
self.log(
TerminalCodes.BLUE.value
+ "[{0}][!] ".format(time.now())
+ TerminalCodes.YELLOW.value
+ content
+ TerminalCodes.RESET.value
+ "\n",
)
def error(self, content):
"""
build the error message
Args:
content: content of the message
Returns:
the message in error structure - None
"""
self.log(
TerminalCodes.RED.value
+ "[{0}][X] ".format(time.now())
+ TerminalCodes.YELLOW.value
+ content
+ TerminalCodes.RESET.value
+ "\n"
)
def write_to_api_console(self, content):
"""
simple print a message in API mode
Args:
content: content of the message
Returns:
None
"""
self.log(content)
def reset_color(self):
self.log(TerminalCodes.RESET.value)
def get_logger():
return Logger()