-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a logger utility to generate a .log file
* This file can afterwards be used in the website to consult errors or warning from the extension generation process
- Loading branch information
1 parent
08aeed9
commit b0570c0
Showing
1 changed file
with
137 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
import dataclasses | ||
import json | ||
from enum import StrEnum | ||
from typing import Dict, List, Optional | ||
|
||
from docker.models.limit import RateLimit | ||
from utils import EnhancedJSONEncoder | ||
|
||
|
||
class LogEntryStatus(StrEnum): | ||
""" | ||
Enum for log status | ||
""" | ||
|
||
INFO = "INFO" | ||
WARNING = "WARNING" | ||
ERROR = "ERROR" | ||
|
||
|
||
@dataclasses.dataclass | ||
class LogEntry: | ||
""" | ||
Represents a log entry in the manifest log | ||
Attributes: | ||
status (str): The status of the log entry. | ||
message (str): The message of the log entry. | ||
""" | ||
|
||
status: LogEntryStatus | ||
message: str | ||
|
||
|
||
@dataclasses.dataclass | ||
class ManifestLog: | ||
""" | ||
Represents the data logged during the consolidation process | ||
""" | ||
|
||
start_docker_rate_limit: Optional[RateLimit] = None | ||
final_docker_rate_limit: Optional[RateLimit] = None | ||
|
||
extensions: Dict[str, List[LogEntry]] = dataclasses.field(default_factory=dict) | ||
|
||
|
||
class Logger: | ||
""" | ||
Simple logger class to consolidate logs and generate a manifest.log | ||
""" | ||
|
||
log_buffer: ManifestLog = ManifestLog() | ||
|
||
|
||
@staticmethod | ||
def start_docker_rate_limit(rate_limit: RateLimit) -> None: | ||
""" | ||
Log the initial Docker rate limit | ||
""" | ||
|
||
Logger.log_buffer.start_docker_rate_limit = rate_limit | ||
|
||
|
||
@staticmethod | ||
def final_docker_rate_limit(rate_limit: RateLimit) -> None: | ||
""" | ||
Log the final Docker rate limit | ||
""" | ||
|
||
Logger.log_buffer.final_docker_rate_limit = rate_limit | ||
|
||
|
||
@staticmethod | ||
def __check_and_init_entry(entry: str) -> None: | ||
""" | ||
Check if an entry exists in the log buffer, if not create it | ||
Args: | ||
entry (str): The entry identifier. | ||
""" | ||
|
||
if entry not in Logger.log_buffer.extensions: | ||
Logger.log_buffer.extensions[entry] = [] | ||
|
||
|
||
@staticmethod | ||
def info(entry: str, message: str) -> None: | ||
""" | ||
Log information for a given entry | ||
Args: | ||
entry (str): The entry identifier. | ||
message (str): The message to log. | ||
""" | ||
|
||
Logger.__check_and_init_entry(entry) | ||
Logger.log_buffer.extensions[entry].append(LogEntry(LogEntryStatus.INFO, message)) | ||
|
||
|
||
@staticmethod | ||
def warning(entry: str, message: str) -> None: | ||
""" | ||
Log warning for a given entry | ||
Args: | ||
entry (str): The entry identifier. | ||
message (str): The message to log. | ||
""" | ||
|
||
Logger.__check_and_init_entry(entry) | ||
Logger.log_buffer.extensions[entry].append(LogEntry(LogEntryStatus.WARNING, message)) | ||
|
||
|
||
@staticmethod | ||
def error(entry: str, message: str) -> None: | ||
""" | ||
Log error for a given entry | ||
Args: | ||
entry (str): The entry identifier. | ||
message (str): The message to log. | ||
""" | ||
|
||
Logger.__check_and_init_entry(entry) | ||
Logger.log_buffer.extensions[entry].append(LogEntry(LogEntryStatus.ERROR, message)) | ||
|
||
|
||
@staticmethod | ||
def dump(file_name: str) -> None: | ||
""" | ||
Dump the log buffer to a file | ||
Args: | ||
file_name (str): The file name to dump the log buffer | ||
""" | ||
|
||
with open(file_name, "w") as log_file: | ||
log_file.write(json.dumps(dataclasses.asdict(Logger.log_buffer), indent=4, sort_keys=True, cls=EnhancedJSONEncoder)) |