refactor: logparser
This commit is contained in:
@@ -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())
|
||||
}
|
||||
|
Reference in New Issue
Block a user