summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/squidlog/init.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/squidlog/init.go74
1 files changed, 74 insertions, 0 deletions
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
+}