refactor: logparser

This commit is contained in:
Inanc Gumus
2019-08-19 20:00:27 +03:00
parent 158f475a2d
commit b39a9ea117
10 changed files with 94 additions and 94 deletions

View File

@@ -7,34 +7,57 @@
package main
type notifier interface {
notify(func(r result))
}
import (
"errors"
"os"
"strings"
)
type resultFn func(result)
type parser interface {
parse() error
notifier
}
type iterator interface {
each(func(result))
parse(resultFn) error
}
type analyser interface {
analyse(result)
iterator
}
type iterator interface {
each(resultFn)
}
type summarizer interface {
summarize(iterator) error
}
func report(a analyser, p parser, s summarizer) error {
p.notify(a.analyse)
if err := p.parse(); err != nil {
func report(p parser, a analyser, s summarizer) error {
if err := p.parse(a.analyse); err != nil {
return err
}
return s.summarize(a)
it, ok := a.(iterator)
if !ok {
return errors.New("cannot iterate on analyser")
}
return s.summarize(it)
}
// reportFromFile generates a default report
func reportFromFile(path string) (err error) {
f, err := os.Open(path)
if err != nil {
return err
}
var p parser
switch {
case strings.HasSuffix(path, ".txt"):
p = newTextParser(f)
case strings.HasSuffix(path, ".json"):
p = newJSONParser(f)
}
return report(p, newAnalysis(), newTextSummary())
}