diff options
-rw-r--r-- | stdin.go | 58 | ||||
-rw-r--r-- | whois.go | 3 |
2 files changed, 38 insertions, 23 deletions
@@ -49,34 +49,46 @@ func parseRawData(in <-chan []byte, cfg *Config) <-chan []RawData { } go func() { rDat := make([]RawData, 0) + relevant := false for line := range in { - if len(string(line)) > 0 && !strings.HasPrefix(string(line), "{") { - stlogger.Println("Got message:", strings.TrimSpace(string(line))) - //This should be a break in the output from pmacct - //so we deploy our collected data and set a new timeBin - ival, err := cfg.getInterval() - if err != nil { - stlogger.Println("Could not parse interval: ", err) + if relevant { + if strings.Contains(string(line), "END") { + relevant = false + continue } - timeBin = time.Now().Add(ival / -2) //Make sure we are inside the correct timeBin - //Send the data if we have something to send - if len(rDat) > 0 { - out <- rDat - rDat = make([]RawData, 0) + if len(string(line)) > 0 && !strings.HasPrefix(string(line), "{") { + stlogger.Println("Got message:", strings.TrimSpace(string(line))) + //This should be a break in the output from pmacct + //so we deploy our collected data and set a new timeBin + ival, err := cfg.getInterval() + if err != nil { + stlogger.Println("Could not parse interval: ", err) + } + timeBin = time.Now().Add(ival / -2) //Make sure we are inside the correct timeBin + //Send the data if we have something to send + if len(rDat) > 0 { + out <- rDat + rDat = make([]RawData, 0) + } + continue } - continue - } - var rd RawData - err := json.Unmarshal(line, &rd) - if err != nil { - stlogger.Println("Failed in parsing json:", err) - close(out) - return - } - rd.time = timeBin + var rd RawData + err := json.Unmarshal(line, &rd) + if err != nil { + stlogger.Println("Failed in parsing json:", err) + stlogger.Println("Line failed was:", string(line)) + continue + } + rd.time = timeBin - rDat = append(rDat, rd) + rDat = append(rDat, rd) + } else { + if strings.Contains(string(line), "START") { + relevant = true + continue + } + } } //If there is any unsent data after in is closed we make sure to send it. if len(rDat) > 0 { @@ -59,6 +59,9 @@ func findIPBlock(domains ...string) (pairs map[string]string, err error) { pairs = make(map[string]string, len(lines)-2) for _, line := range lines[1 : len(lines)-1] { content := strings.Split(line, "|") + if len(content) < 3 { + continue + } ipaddr := strings.TrimSpace(content[1]) ipb := strings.TrimSpace(content[2]) pairs[ipaddr] = ipb |