From b5f8ee61a7f7e9bd291dd26b0585d03eb686c941 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 5 May 2024 13:19:16 +0200 Subject: Adding upstream version 1.46.3. Signed-off-by: Daniel Baumann --- .../go.d.plugin/modules/squidlog/init.go | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/go/collectors/go.d.plugin/modules/squidlog/init.go (limited to 'src/go/collectors/go.d.plugin/modules/squidlog/init.go') diff --git a/src/go/collectors/go.d.plugin/modules/squidlog/init.go b/src/go/collectors/go.d.plugin/modules/squidlog/init.go new file mode 100644 index 000000000..b995b3e65 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/squidlog/init.go @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package squidlog + +import ( + "bytes" + "fmt" + "strings" + + "github.com/netdata/netdata/go/go.d.plugin/pkg/logs" +) + +func (s *SquidLog) createLogReader() error { + s.Cleanup() + s.Debug("starting log reader creating") + + reader, err := logs.Open(s.Path, s.ExcludePath, s.Logger) + if err != nil { + return fmt.Errorf("creating log reader: %v", err) + } + + s.Debugf("created log reader, current file '%s'", reader.CurrentFilename()) + s.file = reader + return nil +} + +func (s *SquidLog) createParser() error { + s.Debug("starting parser creating") + lastLine, err := logs.ReadLastLine(s.file.CurrentFilename(), 0) + if err != nil { + return fmt.Errorf("read last line: %v", err) + } + + lastLine = bytes.TrimRight(lastLine, "\n") + s.Debugf("last line: '%s'", string(lastLine)) + + s.parser, err = logs.NewParser(s.ParserConfig, s.file) + if err != nil { + return fmt.Errorf("create parser: %v", err) + } + s.Debugf("created parser: %s", s.parser.Info()) + + err = s.parser.Parse(lastLine, s.line) + if err != nil { + return fmt.Errorf("parse last line: %v (%s)", err, string(lastLine)) + } + + if err = s.line.verify(); err != nil { + return fmt.Errorf("verify last line: %v (%s)", err, string(lastLine)) + } + return nil +} + +func checkCSVFormatField(name string) (newName string, offset int, valid bool) { + name = cleanField(name) + if !knownField(name) { + return "", 0, false + } + return name, 0, true +} + +func cleanField(name string) string { + return strings.TrimLeft(name, "$%") +} + +func knownField(name string) bool { + switch name { + case fieldRespTime, fieldClientAddr, fieldCacheCode, fieldHTTPCode, fieldRespSize, fieldReqMethod: + fallthrough + case fieldHierCode, fieldServerAddr, fieldMimeType, fieldResultCode, fieldHierarchy: + return true + } + return false +} -- cgit v1.2.3