// parseTcollectorValue parses a tcollector-style line into a data point. func parseTcollectorValue(line string) (*opentsdb.DataPoint, error) { sp := strings.Fields(line) if len(sp) < 3 { return nil, fmt.Errorf("bad line: %s", line) } ts, err := strconv.ParseInt(sp[1], 10, 64) if err != nil { return nil, fmt.Errorf("bad timestamp: %s", sp[1]) } val, err := strconv.ParseFloat(sp[2], 64) if err != nil { return nil, fmt.Errorf("bad value: %s", sp[2]) } if !opentsdb.ValidTSDBString(sp[0]) { return nil, fmt.Errorf("bad metric: %s", sp[0]) } dp := opentsdb.DataPoint{ Metric: sp[0], Timestamp: ts, Value: val, } tags := opentsdb.TagSet{} for _, tag := range sp[3:] { ts, err := opentsdb.ParseTags(tag) if err != nil { return nil, fmt.Errorf("bad tag, metric %s: %v: %v", sp[0], tag, err) } tags.Merge(ts) } setExternalTags(tags) dp.Tags = tags return &dp, nil }
// NewWatchedProc takes a configuration block [[Process]] from conf func NewWatchedProc(params conf.ProcessParams) (*WatchedProc, error) { if params.Name == "" { params.Name = params.Command } if !opentsdb.ValidTSDBString(params.Name) { return nil, fmt.Errorf("bad process name: %v", params.Name) } return &WatchedProc{ Command: regexp.MustCompile(params.Command), Name: params.Name, IncludeCount: params.IncludeCount, Processes: make(map[string]int), ArgMatch: regexp.MustCompile(params.Args), idPool: new(idPool), }, nil }