github.com/netdata/go.d.plugin@v0.58.1/modules/squidlog/init.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package squidlog 4 5 import ( 6 "bytes" 7 "fmt" 8 "strings" 9 10 "github.com/netdata/go.d.plugin/pkg/logs" 11 ) 12 13 func (s *SquidLog) createLogReader() error { 14 s.Cleanup() 15 s.Debug("starting log reader creating") 16 17 reader, err := logs.Open(s.Path, s.ExcludePath, s.Logger) 18 if err != nil { 19 return fmt.Errorf("creating log reader: %v", err) 20 } 21 22 s.Debugf("created log reader, current file '%s'", reader.CurrentFilename()) 23 s.file = reader 24 return nil 25 } 26 27 func (s *SquidLog) createParser() error { 28 s.Debug("starting parser creating") 29 lastLine, err := logs.ReadLastLine(s.file.CurrentFilename(), 0) 30 if err != nil { 31 return fmt.Errorf("read last line: %v", err) 32 } 33 34 lastLine = bytes.TrimRight(lastLine, "\n") 35 s.Debugf("last line: '%s'", string(lastLine)) 36 37 s.parser, err = logs.NewParser(s.Parser, s.file) 38 if err != nil { 39 return fmt.Errorf("create parser: %v", err) 40 } 41 s.Debugf("created parser: %s", s.parser.Info()) 42 43 err = s.parser.Parse(lastLine, s.line) 44 if err != nil { 45 return fmt.Errorf("parse last line: %v (%s)", err, string(lastLine)) 46 } 47 48 if err = s.line.verify(); err != nil { 49 return fmt.Errorf("verify last line: %v (%s)", err, string(lastLine)) 50 } 51 return nil 52 } 53 54 func checkCSVFormatField(name string) (newName string, offset int, valid bool) { 55 name = cleanField(name) 56 if !knownField(name) { 57 return "", 0, false 58 } 59 return name, 0, true 60 } 61 62 func cleanField(name string) string { 63 return strings.TrimLeft(name, "$%") 64 } 65 66 func knownField(name string) bool { 67 switch name { 68 case fieldRespTime, fieldClientAddr, fieldCacheCode, fieldHTTPCode, fieldRespSize, fieldReqMethod: 69 fallthrough 70 case fieldHierCode, fieldServerAddr, fieldMimeType, fieldResultCode, fieldHierarchy: 71 return true 72 } 73 return false 74 }