func (s *Server) appendGraphiteService(c graphite.Config) error { if !c.Enabled { return nil } srv, err := graphite.NewService(c) if err != nil { return err } srv.PointsWriter = s.PointsWriter srv.MetaClient = s.MetaClient srv.Monitor = s.Monitor s.Services = append(s.Services, srv) return nil }
func (s *Server) appendGraphiteServices() error { for i, c := range s.config.Graphites { if !c.Enabled { continue } srv, err := graphite.NewService(c) if err != nil { return errors.Wrap(err, "creating new graphite service") } w := s.LogService.NewStaticLevelWriter(logging.INFO) srv.SetLogOutput(w) srv.PointsWriter = s.TaskMaster srv.MetaClient = s.MetaClient s.AppendService(fmt.Sprintf("graphite%d", i), srv) } return nil }
func Test_ServerGraphiteUDP(t *testing.T) { t.Parallel() now := time.Now().UTC().Round(time.Second) config := graphite.Config{} config.Database = "graphitedb" config.BatchSize = 0 // No batching. config.BatchTimeout = toml.Duration(time.Second) config.BindAddress = ":10000" config.Protocol = "udp" service, err := graphite.NewService(config) if err != nil { t.Fatalf("failed to create Graphite service: %s", err.Error()) } // Allow test to wait until points are written. var wg sync.WaitGroup wg.Add(1) pointsWriter := PointsWriter{ WritePointsFn: func(req *cluster.WritePointsRequest) error { defer wg.Done() pt, _ := models.NewPoint( "cpu", map[string]string{}, map[string]interface{}{"value": 23.456}, time.Unix(now.Unix(), 0)) if req.Database != "graphitedb" { t.Fatalf("unexpected database: %s", req.Database) } else if req.RetentionPolicy != "" { t.Fatalf("unexpected retention policy: %s", req.RetentionPolicy) } else if req.Points[0].String() != pt.String() { t.Fatalf("unexpected points: %#v", req.Points[0].String()) } return nil }, } service.PointsWriter = &pointsWriter dbCreator := DatabaseCreator{} service.MetaClient = &dbCreator if err := service.Open(); err != nil { t.Fatalf("failed to open Graphite service: %s", err.Error()) } if !dbCreator.Created { t.Fatalf("failed to create target database") } // Connect to the graphite endpoint we just spun up _, port, _ := net.SplitHostPort(service.Addr().String()) conn, err := net.Dial("udp", "127.0.0.1:"+port) if err != nil { t.Fatal(err) } data := []byte(`cpu 23.456 `) data = append(data, []byte(fmt.Sprintf("%d", now.Unix()))...) data = append(data, '\n') _, err = conn.Write(data) if err != nil { t.Fatal(err) } wg.Wait() conn.Close() }