close #6
This commit is contained in:
		@ -31,7 +31,7 @@ type Filter struct {
 | 
				
			|||||||
	compiledRegex                  []regexp.Regexp
 | 
						compiledRegex                  []regexp.Regexp
 | 
				
			||||||
	patternName, patternWithBraces string
 | 
						patternName, patternWithBraces string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Retry         uint
 | 
						Retry         int
 | 
				
			||||||
	RetryPeriod   string `yaml:"retry-period"`
 | 
						RetryPeriod   string `yaml:"retry-period"`
 | 
				
			||||||
	retryDuration time.Duration
 | 
						retryDuration time.Duration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -64,6 +64,7 @@ func (c *Conf) setup() {
 | 
				
			|||||||
			filter := stream.Filters[filterName]
 | 
								filter := stream.Filters[filterName]
 | 
				
			||||||
			filter.stream = stream
 | 
								filter.stream = stream
 | 
				
			||||||
			filter.name = filterName
 | 
								filter.name = filterName
 | 
				
			||||||
 | 
								filter.matches = make(map[string][]time.Time)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Parse Duration
 | 
								// Parse Duration
 | 
				
			||||||
			retryDuration, err := time.ParseDuration(filter.RetryPeriod)
 | 
								retryDuration, err := time.ParseDuration(filter.RetryPeriod)
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package app
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bufio"
 | 
						"bufio"
 | 
				
			||||||
	"flag"
 | 
						"flag"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// "fmt"
 | 
						// "fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
@ -80,15 +81,33 @@ func (a *Action) exec(match string) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (f *Filter) cleanOldMatches(match string) {
 | 
				
			||||||
 | 
						now := time.Now()
 | 
				
			||||||
 | 
						newMatches := make([]time.Time, 0, len(f.matches[match]))
 | 
				
			||||||
 | 
						for _, old := range f.matches[match] {
 | 
				
			||||||
 | 
							if old.Add(f.retryDuration).After(now) {
 | 
				
			||||||
 | 
								newMatches = append(newMatches, old)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						f.matches[match] = newMatches
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (f *Filter) handle() chan *string {
 | 
					func (f *Filter) handle() chan *string {
 | 
				
			||||||
	lines := make(chan *string)
 | 
						lines := make(chan *string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		for line := range lines {
 | 
							for line := range lines {
 | 
				
			||||||
			if match := f.match(line); match != "" {
 | 
								if match := f.match(line); match != "" {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									f.cleanOldMatches(match)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									f.matches[match] = append(f.matches[match], time.Now())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if len(f.matches[match]) >= f.Retry {
 | 
				
			||||||
					f.execActions(match)
 | 
										f.execActions(match)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return lines
 | 
						return lines
 | 
				
			||||||
 | 
				
			|||||||
@ -8,13 +8,13 @@ patterns:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
streams:
 | 
					streams:
 | 
				
			||||||
  tailDown:
 | 
					  tailDown:
 | 
				
			||||||
    cmd: [ "tail", "/home/ao/DOWN" ]
 | 
					    cmd: [ "sh", "-c", "echo 'found 1.1.1.1' && sleep 2s && echo 'found 1.1.1.2' && sleep 2s && echo 'found 1.1.1.1' && sleep 1s" ]
 | 
				
			||||||
    filters:
 | 
					    filters:
 | 
				
			||||||
      findIP:
 | 
					      findIP:
 | 
				
			||||||
        regex:
 | 
					        regex:
 | 
				
			||||||
          - found <ip>
 | 
					          - found <ip>
 | 
				
			||||||
        # retry: 1
 | 
					        retry: 2
 | 
				
			||||||
        retry-period: 1s
 | 
					        retry-period: 5s
 | 
				
			||||||
        actions:
 | 
					        actions:
 | 
				
			||||||
          damn:
 | 
					          damn:
 | 
				
			||||||
            cmd: [ "echo", "<ip>" ]
 | 
					            cmd: [ "echo", "<ip>" ]
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user