GraphQL API and utilities for the rpdata project
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package main
import ( "bufio" "errors" "io" "strconv" "strings" "time" )
type logLine struct { Verb string Args []string Text string }
func parseFile(reader io.Reader) []logLine { bufReader := bufio.NewReader(reader) results := make([]logLine, 0, 512)
for { line, err := bufReader.ReadString('\n') if err == io.EOF { if len(line) < 2 { break } } else if err != nil { break }
if len(line) <= 2 { continue }
line = strings.Replace(line, "\n", "", 1) line = strings.Replace(line, "\r", "", 1)
results = append(results, parseLine(line)) }
return results }
func parseLine(line string) logLine { textSplit := strings.SplitN(line, " :", 2) tokens := strings.Split(textSplit[0], " ")
ll := logLine{ Verb: tokens[0], }
if len(tokens) > 1 { ll.Args = tokens[1:] }
if len(textSplit) > 1 { ll.Text = textSplit[1] }
return ll }
func parseFilename(fname string) (date time.Time, channel string, err error) { date, err = time.ParseInLocation("2006-01-02_150405", fname[:17], time.Local) if err != nil { return }
ms, err := strconv.Atoi(fname[17:20]) if err != nil { return }
date = date.Add(time.Duration(ms) * time.Millisecond)
if len(fname) < 23 { err = errors.New("filename too short") return }
channel = fname[21:]
return }
|