feat: implement drain3 based generic log-parser
This commit is contained in:
parent
1d1568e3ee
commit
5af49f926a
17 changed files with 612 additions and 220 deletions
|
|
@ -10,6 +10,7 @@ import (
|
|||
"watch-tool/parser"
|
||||
"watch-tool/patterns"
|
||||
|
||||
"codeberg.org/pata1704/drain3"
|
||||
"github.com/hpcloud/tail"
|
||||
)
|
||||
|
||||
|
|
@ -19,16 +20,25 @@ type FileMonitor struct {
|
|||
hostname string
|
||||
}
|
||||
|
||||
func NewFileMonitor(config ToolConfig, hostname string) *FileMonitor {
|
||||
func NewFileMonitor(config ToolConfig, hostname string, drainCfg *drain3.Config, stateDir string) *FileMonitor {
|
||||
var logParser parser.Parser
|
||||
|
||||
pCfg := parser.ParserConfig{
|
||||
ServiceName: config.Name,
|
||||
LogType: "custom",
|
||||
Hostname: hostname,
|
||||
DrainConfig: drainCfg,
|
||||
StateDir: stateDir,
|
||||
}
|
||||
|
||||
if config.Format.Pattern != "" {
|
||||
compiledRegex, err := regexp.Compile(config.Format.Pattern)
|
||||
if err != nil {
|
||||
slog.Error("Invalid regex pattern in tool config", "tool", config.Name, "error", err)
|
||||
logParser = parser.NewGenericParser(config.Name, hostname)
|
||||
logParser = parser.NewGenericParser(config.Name, hostname, pCfg.DrainConfig, pCfg.StateDir)
|
||||
|
||||
} else {
|
||||
gp := parser.NewGenericParser(config.Name, hostname)
|
||||
gp := parser.NewGenericParser(config.Name, hostname, pCfg.DrainConfig, pCfg.StateDir)
|
||||
|
||||
customExtractor := patterns.CompiledExtractor{
|
||||
Name: "config_custom_pattern",
|
||||
|
|
@ -41,10 +51,10 @@ func NewFileMonitor(config ToolConfig, hostname string) *FileMonitor {
|
|||
}
|
||||
} else {
|
||||
var err error
|
||||
logParser, err = parser.New(config.Name, "custom", hostname)
|
||||
logParser, err = parser.New(pCfg)
|
||||
if err != nil {
|
||||
slog.Error("Cannot get tool specific parser from factory", "error", err)
|
||||
logParser = parser.NewGenericParser(config.Name, hostname)
|
||||
logParser = parser.NewGenericParser(config.Name, hostname, pCfg.DrainConfig, pCfg.StateDir)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -56,6 +66,7 @@ func NewFileMonitor(config ToolConfig, hostname string) *FileMonitor {
|
|||
}
|
||||
|
||||
func (fm *FileMonitor) Start(ctx context.Context, out chan<- models.LogMessage) error {
|
||||
defer fm.parser.Close()
|
||||
t, err := tail.TailFile(fm.config.LogFile, tail.Config{
|
||||
Follow: true,
|
||||
ReOpen: true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue