Fix crash when all the regexes of a filter have no pattern in them
Fix #66 Example configuration causing crash: ```yaml streams: mongod_restart: cmd: [ 'sh', '-c', 'while true; do echo "Started MongoDB Database Server."; sleep 5; done' ] filters: mongo_restart: regex: - 'Started MongoDB Database Server.' actions: restart_chat_tel: cmd: [ 'systemctl', 'restart', 'nginx' ] ```
This commit is contained in:
		@ -76,11 +76,17 @@ func (f *Filter) match(line *string) string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if matches := regex.FindStringSubmatch(*line); matches != nil {
 | 
							if matches := regex.FindStringSubmatch(*line); matches != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			match := matches[regex.SubexpIndex(f.pattern.name)]
 | 
								if f.pattern != nil {
 | 
				
			||||||
 | 
									match := matches[regex.SubexpIndex(f.pattern.name)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if f.pattern.notAnIgnore(&match) {
 | 
									if f.pattern.notAnIgnore(&match) {
 | 
				
			||||||
				logger.Printf(logger.INFO, "%s.%s: match [%v]\n", f.stream.name, f.name, match)
 | 
										logger.Printf(logger.INFO, "%s.%s: match [%v]\n", f.stream.name, f.name, match)
 | 
				
			||||||
				return match
 | 
										return match
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									logger.Printf(logger.INFO, "%s.%s: match [.]\n", f.stream.name, f.name)
 | 
				
			||||||
 | 
									// No pattern, so this match will never actually be used
 | 
				
			||||||
 | 
									return "."
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -96,9 +102,16 @@ func (f *Filter) sendActions(match string, at time.Time) {
 | 
				
			|||||||
func (a *Action) exec(match string) {
 | 
					func (a *Action) exec(match string) {
 | 
				
			||||||
	defer wgActions.Done()
 | 
						defer wgActions.Done()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	computedCommand := make([]string, 0, len(a.Cmd))
 | 
						var computedCommand []string
 | 
				
			||||||
	for _, item := range a.Cmd {
 | 
					
 | 
				
			||||||
		computedCommand = append(computedCommand, strings.ReplaceAll(item, a.filter.pattern.nameWithBraces, match))
 | 
						if a.filter.pattern != nil {
 | 
				
			||||||
 | 
							computedCommand := make([]string, 0, len(a.Cmd))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _, item := range a.Cmd {
 | 
				
			||||||
 | 
								computedCommand = append(computedCommand, strings.ReplaceAll(item, a.filter.pattern.nameWithBraces, match))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							computedCommand = a.Cmd
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logger.Printf(logger.INFO, "%s.%s.%s: run %s\n", a.filter.stream.name, a.filter.name, a.name, computedCommand)
 | 
						logger.Printf(logger.INFO, "%s.%s.%s: run %s\n", a.filter.stream.name, a.filter.name, a.name, computedCommand)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user