feat: delete old specific parsers and use new generic parser in file_monitor

This commit is contained in:
Patryk Hegenberg 2026-01-18 12:54:57 +01:00
parent 0830b403e0
commit 794180c6ab
9 changed files with 21 additions and 595 deletions

View file

@ -1,117 +1,3 @@
// package parser
// import (
// "fmt"
// "strconv"
// "strings"
// "time"
// "watch-tool/models"
// "watch-tool/patterns"
// )
// type GenericParser struct {
// ServiceName string
// Hostname string
// Extractors []patterns.CompiledExtractor
// CommonExt []patterns.CompiledExtractor
// }
// func NewGenericParser(serviceName, hostname string) *GenericParser {
// repo := patterns.GetInstance()
// return &GenericParser{
// ServiceName: serviceName,
// Hostname: hostname,
// Extractors: repo.GetExtractors(serviceName),
// CommonExt: repo.GetExtractors("common"),
// }
// }
// func (p *GenericParser) Parse(line string) (models.LogMessage, error) {
// entry := models.LogMessage{
// Service: p.ServiceName,
// Host: p.Hostname,
// Timestamp: time.Now(),
// Raw: line,
// Fields: make(map[string]any),
// }
// // 1. Common Extractors laufen lassen (z.B. Syslog Header entfernen/parsen)
// // Wir nutzen eine temporäre Variable für den Rest-String, falls Header entfernt werden soll
// currentLine := line
// // Hinweis: Hier könnte man Syslog-Logik generisch einbauen.
// // Fürs Erste wenden wir Pattern einfach auf die Zeile an.
// // 2. Service Extractors anwenden
// // Wir probieren ALLE Extractors, um maximale Informationen zu gewinnen.
// // Das simuliert die Logik deiner alten Parser (erst Header, dann Details).
// allExtractors := append(p.CommonExt, p.Extractors...)
// for _, ext := range allExtractors {
// matches := ext.Pattern.FindStringSubmatch(currentLine)
// if matches == nil {
// continue
// }
// subexpNames := ext.Pattern.SubexpNames()
// for i, matchValue := range matches {
// if i == 0 || matchValue == "" {
// continue
// }
// groupName := subexpNames[i]
// if groupName == "" {
// continue
// }
// targetType := ext.Fields[groupName]
// parsedValue, err := convertType(matchValue, targetType)
// if err == nil {
// switch groupName {
// case "timestamp":
// if t, ok := parsedValue.(time.Time); ok {
// entry.Timestamp = t
// }
// case "log_level":
// entry.LogLevel = fmt.Sprintf("%v", parsedValue)
// case "message":
// entry.LogMessage = fmt.Sprintf("%v", parsedValue)
// default:
// entry.Fields[groupName] = parsedValue
// }
// }
// }
// }
// if entry.LogMessage == "" {
// entry.LogMessage = strings.TrimSpace(line)
// }
// return entry, nil
// }
// func convertType(value, typeDef string) (any, error) {
// if strings.HasPrefix(typeDef, "int") {
// return strconv.Atoi(value)
// }
// if strings.HasPrefix(typeDef, "float") {
// return strconv.ParseFloat(value, 64)
// }
// if after, ok := strings.CutPrefix(typeDef, "time:"); ok {
// layout := after
// // Workaround für Syslog (Jahr fehlt oft), hier vereinfacht:
// if layout == "Jan 02 15:04:05" {
// t, err := time.Parse(layout, value)
// if err == nil {
// return t.AddDate(time.Now().Year(), 0, 0), nil
// }
// return t, err
// }
// return time.Parse(layout, value)
// }
// // Default: String
// return value, nil
// }
package parser
import (
@ -287,8 +173,6 @@ func (p *GenericParser) mapField(entry *models.LogMessage, key string, value any
entry.PID = pid
}
}
// Mapping auf ServiceInformation Felder (Optional, falls nötig)
// case "transfer_id": ...
default:
entry.Fields[key] = value