1package report 2 3import ( 4 "fmt" 5 "io" 6 "strings" 7 "time" 8 9 "github.com/sirupsen/logrus" 10 11 "github.com/sensu/sensu-go/cli/elements/globals" 12) 13 14// Report reports debug, warning, & errors 15type Report struct { 16 Out io.Writer 17 LogLevel logrus.Level 18 19 entries []Entry 20} 21 22// New returns new report w/ log level preconfigured 23func New() Report { 24 return Report{LogLevel: logrus.InfoLevel} 25} 26 27// Flush pops entries from list and writes them 28func (r *Report) Flush() error { 29 entries := make([]Entry, len(r.entries)) 30 copy(entries, r.entries) 31 r.entries = []Entry{} 32 33 for _, entry := range entries { 34 if entry.Level > r.LogLevel { 35 continue 36 } 37 38 level := strings.ToUpper(entry.Level.String()) 39 if entry.Level == logrus.WarnLevel { 40 level = globals.WarningStyle(level) 41 } else if entry.Level <= logrus.ErrorLevel { 42 level = globals.ErrorTextStyle(level) 43 } else if entry.Level == logrus.InfoLevel { 44 level = globals.PrimaryTextStyle(level) 45 } 46 47 fmt.Fprintf( 48 r.Out, 49 "%s\r\t%s\n", 50 level, 51 entry.Message, 52 ) 53 } 54 55 return nil 56} 57 58// HasWarnings returns true if there are any warnings entries in the report 59func (r *Report) HasWarnings() bool { 60 for _, entry := range r.entries { 61 if entry.Level == logrus.WarnLevel { 62 return true 63 } 64 } 65 66 return false 67} 68 69// HasErrors returns true if there are any error entries in the report 70func (r *Report) HasErrors() bool { 71 for _, entry := range r.entries { 72 if entry.Level <= logrus.ErrorLevel { 73 return true 74 } 75 } 76 77 return false 78} 79 80// AddEntry adds given entry to report 81func (r *Report) AddEntry(e Entry) { 82 r.entries = append(r.entries, e) 83} 84 85// Entry ... 86type Entry struct { 87 Level logrus.Level 88 Message string 89 Context map[string]interface{} 90 Time time.Time 91} 92