standardize logs
This commit is contained in:
parent
067fb13e79
commit
7f93079f66
36
app/conf.go
36
app/conf.go
@ -67,7 +67,7 @@ func (c *Conf) setup() {
|
|||||||
c.Patterns[patternName] = fmt.Sprintf("(?P<%s>%s)", patternName, pattern)
|
c.Patterns[patternName] = fmt.Sprintf("(?P<%s>%s)", patternName, pattern)
|
||||||
}
|
}
|
||||||
if len(c.Streams) == 0 {
|
if len(c.Streams) == 0 {
|
||||||
log.Fatalln("Bad configuration: no streams configured!")
|
log.Fatalln("FATAL Bad configuration: no streams configured!")
|
||||||
}
|
}
|
||||||
for streamName := range c.Streams {
|
for streamName := range c.Streams {
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ func (c *Conf) setup() {
|
|||||||
stream.name = streamName
|
stream.name = streamName
|
||||||
|
|
||||||
if len(stream.Filters) == 0 {
|
if len(stream.Filters) == 0 {
|
||||||
log.Fatalln("Bad configuration: no filters configured in '%s'!", stream.name)
|
log.Fatalln("FATAL Bad configuration: no filters configured in '%s'!", stream.name)
|
||||||
}
|
}
|
||||||
for filterName := range stream.Filters {
|
for filterName := range stream.Filters {
|
||||||
|
|
||||||
@ -87,12 +87,12 @@ func (c *Conf) setup() {
|
|||||||
// Parse Duration
|
// Parse Duration
|
||||||
retryDuration, err := time.ParseDuration(filter.RetryPeriod)
|
retryDuration, err := time.ParseDuration(filter.RetryPeriod)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to parse time in configuration file:", err)
|
log.Fatalln("FATAL Bad configuration: Failed to parse time:", err)
|
||||||
}
|
}
|
||||||
filter.retryDuration = retryDuration
|
filter.retryDuration = retryDuration
|
||||||
|
|
||||||
if len(filter.Regex) == 0 {
|
if len(filter.Regex) == 0 {
|
||||||
log.Fatalln("Bad configuration: no regexes configured in '%s.%s'!", stream.name, filter.name)
|
log.Fatalln("FATAL Bad configuration: no regexes configured in '%s.%s'!", stream.name, filter.name)
|
||||||
}
|
}
|
||||||
// Compute Regexes
|
// Compute Regexes
|
||||||
// Look for Patterns inside Regexes
|
// Look for Patterns inside Regexes
|
||||||
@ -108,7 +108,7 @@ func (c *Conf) setup() {
|
|||||||
// no op
|
// no op
|
||||||
default:
|
default:
|
||||||
log.Fatalf(
|
log.Fatalf(
|
||||||
"ERROR Can't mix different patterns (%s, %s) in same filter (%s.%s)\n",
|
"Bad configuration: Can't mix different patterns (%s, %s) in same filter (%s.%s)\n",
|
||||||
filter.patternName, patternName, streamName, filterName,
|
filter.patternName, patternName, streamName, filterName,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -120,7 +120,7 @@ func (c *Conf) setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(filter.Actions) == 0 {
|
if len(filter.Actions) == 0 {
|
||||||
log.Fatalln("Bad configuration: no actions configured in '%s.%s'!", stream.name, filter.name)
|
log.Fatalln("FATAL Bad configuration: no actions configured in '%s.%s'!", stream.name, filter.name)
|
||||||
}
|
}
|
||||||
for actionName := range filter.Actions {
|
for actionName := range filter.Actions {
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ func (c *Conf) setup() {
|
|||||||
if action.After != "" {
|
if action.After != "" {
|
||||||
afterDuration, err := time.ParseDuration(action.After)
|
afterDuration, err := time.ParseDuration(action.After)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to parse time in configuration file:", err)
|
log.Fatalln("FATAL Bad configuration: Failed to parse time:", err)
|
||||||
}
|
}
|
||||||
action.afterDuration = afterDuration
|
action.afterDuration = afterDuration
|
||||||
}
|
}
|
||||||
@ -151,34 +151,34 @@ func (c *Conf) updateFromDB() *gob.Encoder {
|
|||||||
file, err := os.Open(DBname)
|
file, err := os.Open(DBname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
log.Printf("WARN: No DB found at %s\n", DBname)
|
log.Printf("WARN No DB found at %s. It's ok if this is the first time reaction is running.\n", DBname)
|
||||||
|
|
||||||
file, err := os.Create(DBname)
|
file, err := os.Create(DBname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to create DB:", err)
|
log.Fatalln("FATAL Failed to create DB:", err)
|
||||||
}
|
}
|
||||||
return gob.NewEncoder(file)
|
return gob.NewEncoder(file)
|
||||||
}
|
}
|
||||||
log.Fatalln("Failed to open DB:", err)
|
log.Fatalln("FATAL Failed to open DB:", err)
|
||||||
}
|
}
|
||||||
dec := gob.NewDecoder(file)
|
dec := gob.NewDecoder(file)
|
||||||
|
|
||||||
newfile, err := os.Create(DBnewName)
|
newfile, err := os.Create(DBnewName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to create new DB:", err)
|
log.Fatalln("FATAL Failed to create new DB:", err)
|
||||||
}
|
}
|
||||||
enc := gob.NewEncoder(newfile)
|
enc := gob.NewEncoder(newfile)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
err := file.Close()
|
err := file.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("ERRO: Failed to close old DB:", err)
|
log.Fatalln("FATAL Failed to close old DB:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// It should be ok to rename an open file
|
// It should be ok to rename an open file
|
||||||
err = os.Rename(DBnewName, DBname)
|
err = os.Rename(DBnewName, DBname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("ERRO: Failed to replace old DB with new one:", err)
|
log.Fatalln("FATAL Failed to replace old DB with new one:", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -189,18 +189,18 @@ func (c *Conf) updateFromDB() *gob.Encoder {
|
|||||||
defer func() {
|
defer func() {
|
||||||
for sf, t := range discardedEntries {
|
for sf, t := range discardedEntries {
|
||||||
if t {
|
if t {
|
||||||
log.Printf("WARN: info discarded from the DB: stream/filter not found: %s.%s\n", sf.s, sf.f)
|
log.Printf("WARN info discarded from the DB: stream/filter not found: %s.%s\n", sf.s, sf.f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if malformedEntries > 0 {
|
if malformedEntries > 0 {
|
||||||
log.Printf("WARN: %v malformed entries discarded from the DB\n", malformedEntries)
|
log.Printf("WARN %v malformed entries discarded from the DB\n", malformedEntries)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
encodeOrFatal := func(entry LogEntry) {
|
encodeOrFatal := func(entry LogEntry) {
|
||||||
err = enc.Encode(entry)
|
err = enc.Encode(entry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("ERRO: couldn't write to new DB:", err)
|
log.Fatalln("FATAL Failed to write to new DB:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,13 +250,13 @@ func parseConf(filename string) (*Conf, *gob.Encoder) {
|
|||||||
data, err := os.ReadFile(filename)
|
data, err := os.ReadFile(filename)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to read configuration file:", err)
|
log.Fatalln("FATAL Failed to read configuration file:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var conf Conf
|
var conf Conf
|
||||||
err = yaml.Unmarshal(data, &conf)
|
err = yaml.Unmarshal(data, &conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to parse configuration file:", err)
|
log.Fatalln("FATAL Failed to parse configuration file:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
conf.setup()
|
conf.setup()
|
||||||
|
@ -50,7 +50,7 @@ func (f *Filter) match(line *string) string {
|
|||||||
|
|
||||||
match := matches[regex.SubexpIndex(f.patternName)]
|
match := matches[regex.SubexpIndex(f.patternName)]
|
||||||
|
|
||||||
log.Printf("INFO %s.%s: match [%v]\n", f.stream.name, f.name, match)
|
log.Printf("INFO %s.%s: match [%v]\n", f.stream.name, f.name, match)
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,12 +92,12 @@ func (a *Action) exec(match string, advance time.Duration) {
|
|||||||
computedCommand = append(computedCommand, strings.ReplaceAll(item, a.filter.patternWithBraces, match))
|
computedCommand = append(computedCommand, strings.ReplaceAll(item, a.filter.patternWithBraces, match))
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("INFO %s.%s.%s: run %s\n", a.filter.stream.name, a.filter.name, a.name, computedCommand)
|
log.Printf("INFO %s.%s.%s: run %s\n", a.filter.stream.name, a.filter.name, a.name, computedCommand)
|
||||||
|
|
||||||
cmd := exec.Command(computedCommand[0], computedCommand[1:]...)
|
cmd := exec.Command(computedCommand[0], computedCommand[1:]...)
|
||||||
|
|
||||||
if ret := cmd.Run(); ret != nil {
|
if ret := cmd.Run(); ret != nil {
|
||||||
log.Printf("ERR %s.%s.%s: run %s, code %s\n", a.filter.stream.name, a.filter.name, a.name, computedCommand, ret)
|
log.Printf("ERROR %s.%s.%s: run %s, code %s\n", a.filter.stream.name, a.filter.name, a.name, computedCommand, ret)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ func (f *Filter) handle() chan *string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Stream) handle(endedSignal chan *Stream) {
|
func (s *Stream) handle(endedSignal chan *Stream) {
|
||||||
log.Printf("INFO %s: start %s\n", s.name, s.Cmd)
|
log.Printf("INFO %s: start %s\n", s.name, s.Cmd)
|
||||||
|
|
||||||
lines := cmdStdout(s.Cmd)
|
lines := cmdStdout(s.Cmd)
|
||||||
|
|
||||||
@ -207,7 +207,7 @@ func Main() {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case finishedStream := <-endSignals:
|
case finishedStream := <-endSignals:
|
||||||
log.Printf("ERR %s stream finished", finishedStream.name)
|
log.Printf("ERROR %s stream finished", finishedStream.name)
|
||||||
noStreamsInExecution--
|
noStreamsInExecution--
|
||||||
if noStreamsInExecution == 0 {
|
if noStreamsInExecution == 0 {
|
||||||
quit()
|
quit()
|
||||||
|
Loading…
Reference in New Issue
Block a user