package sinks import ( "fmt" "math" "strings" // "time" lp "github.com/ClusterCockpit/cc-metric-collector/internal/ccMetric" ) type StdoutSink struct { sink } func (s *StdoutSink) Init(config sinkConfig) error { s.name = "StdoutSink" s.meta_as_tags = config.MetaAsTags return nil } func (s *StdoutSink) Write(point lp.CCMetric) error { var tagsstr []string var fieldstr []string for _, t := range point.TagList() { tagsstr = append(tagsstr, fmt.Sprintf("%s=%s", t.Key, t.Value)) } if s.meta_as_tags { for _, m := range point.MetaList() { tagsstr = append(tagsstr, fmt.Sprintf("%s=%s", m.Key, m.Value)) } } for _, f := range point.FieldList() { switch f.Value.(type) { case float64: if !math.IsNaN(f.Value.(float64)) { fieldstr = append(fieldstr, fmt.Sprintf("%s=%v", f.Key, f.Value.(float64))) } else { fieldstr = append(fieldstr, fmt.Sprintf("%s=0.0", f.Key)) } case float32: if !math.IsNaN(float64(f.Value.(float32))) { fieldstr = append(fieldstr, fmt.Sprintf("%s=%v", f.Key, f.Value.(float32))) } else { fieldstr = append(fieldstr, fmt.Sprintf("%s=0.0", f.Key)) } case int: fieldstr = append(fieldstr, fmt.Sprintf("%s=%d", f.Key, f.Value.(int))) case int64: fieldstr = append(fieldstr, fmt.Sprintf("%s=%d", f.Key, f.Value.(int64))) case string: fieldstr = append(fieldstr, fmt.Sprintf("%s=%q", f.Key, f.Value.(string))) default: fieldstr = append(fieldstr, fmt.Sprintf("%s=%v", f.Key, f.Value)) } } if len(tagsstr) > 0 { fmt.Printf("%s,%s %s %d\n", point.Name(), strings.Join(tagsstr, ","), strings.Join(fieldstr, ","), point.Time().Unix()) } else { fmt.Printf("%s %s %d\n", point.Name(), strings.Join(fieldstr, ","), point.Time().Unix()) } return nil } func (s *StdoutSink) Flush() error { return nil } func (s *StdoutSink) Close() {}