func readAddAgg(s *toki.Scanner, table *tbl.Table) error { t := s.Next() if t.Token != sumFn && t.Token != avgFn { return errors.New("invalid function. need sum/avg") } fun := string(t.Value) if t = s.Next(); t.Token != word { return errors.New("need a regex string") } regex := string(t.Value) if t = s.Next(); t.Token != word { return errors.New("need a format string") } outFmt := string(t.Value) if t = s.Next(); t.Token != num { return errors.New("need an interval number") } interval, err := strconv.Atoi(strings.TrimSpace(string(t.Value))) if err != nil { return err } if t = s.Next(); t.Token != num { return errors.New("need a wait number") } wait, err := strconv.Atoi(strings.TrimSpace(string(t.Value))) if err != nil { return err } agg, err := aggregator.New(fun, regex, outFmt, uint(interval), uint(wait), table.In) if err != nil { return err } table.AddAggregator(agg) return nil }