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