Some checks failed
- Added @click.version_option decorator to main() in commands.py - Imported __version__ from loglens package - Resolves CI build failure: 'loglens --version' command not found
54 lines
1.2 KiB
Python
54 lines
1.2 KiB
Python
from abc import ABC, abstractmethod
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
from typing import Any, Optional
|
|
|
|
|
|
class LogFormat(Enum):
|
|
"""Supported log formats."""
|
|
|
|
JSON = "json"
|
|
SYSLOG = "syslog"
|
|
APACHE = "apache"
|
|
RAW = "raw"
|
|
|
|
|
|
@dataclass
|
|
class ParsedEntry:
|
|
"""Parsed log entry."""
|
|
|
|
raw_line: str
|
|
format: LogFormat
|
|
timestamp: Optional[str]
|
|
level: Optional[str]
|
|
message: str
|
|
metadata: dict[str, Any] = field(default_factory=dict)
|
|
severity: str = "info"
|
|
|
|
def to_dict(self) -> dict:
|
|
"""Convert to dictionary."""
|
|
return {
|
|
"raw_line": self.raw_line,
|
|
"format": self.format.value,
|
|
"timestamp": self.timestamp,
|
|
"level": self.level,
|
|
"message": self.message,
|
|
"metadata": self.metadata,
|
|
"severity": self.severity,
|
|
}
|
|
|
|
|
|
class BaseParser(ABC):
|
|
"""Base parser class."""
|
|
|
|
@abstractmethod
|
|
def get_format(self) -> LogFormat:
|
|
"""Get the format this parser handles."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def parse(self, line: str) -> Optional[ParsedEntry]:
|
|
"""Parse a log line."""
|
|
pass
|