refactor: oop log parser

This commit is contained in:
Inanc Gumus
2019-08-26 21:52:47 +03:00
parent dcfc7748fe
commit fce56d299e
13 changed files with 256 additions and 181 deletions

View File

@@ -9,10 +9,7 @@ package main
import (
"bufio"
"fmt"
"io"
"strconv"
"strings"
)
type textLog struct {
@@ -26,41 +23,17 @@ func newTextLog(r io.Reader) *textLog {
func (p *textLog) each(yield resultFn) error {
defer readClose(p.reader)
var (
l = 1
in = bufio.NewScanner(p.reader)
)
in := bufio.NewScanner(p.reader)
for in.Scan() {
r, err := extractFields(in.Text())
if err != nil {
return fmt.Errorf("line %d: %v", l, err)
r := new(result)
if err := r.UnmarshalText(in.Bytes()); err != nil {
return err
}
yield(r)
l++
yield(*r)
}
return in.Err()
}
func extractFields(s string) (r result, err error) {
fields := strings.Fields(s)
if len(fields) != fieldsLength {
return r, fmt.Errorf("wrong number of fields %q", fields)
}
r.domain, r.page = fields[0], fields[1]
r.visits, err = strconv.Atoi(fields[2])
if err != nil || r.visits < 0 {
return r, fmt.Errorf("wrong input %q", fields[2])
}
r.uniques, err = strconv.Atoi(fields[3])
if err != nil || r.uniques < 0 {
return r, fmt.Errorf("wrong input %q", fields[3])
}
return r, nil
}