main.go (58 lines of code) (raw):

/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package main import ( "flag" "fmt" "google.golang.org/grpc" "log" "net" "net/http" hubgrpc "github.com/facebookincubator/prometheus-edge-hub/grpc" "github.com/facebookincubator/prometheus-edge-hub/hub" "github.com/labstack/echo" ) const ( defaultPort = 9091 defaultGRPCPort = 0 defaultLimit = -1 defaultScrapeTimeout = 10 // seconds defaultMaxGRPCMsgSizeBytes = 1024 * 1024 * 1024 //1 GB ) func main() { port := flag.Int("port", defaultPort, fmt.Sprintf("Port to listen for requests. Default is %d", defaultPort)) totalMetricsLimit := flag.Int("limit", defaultLimit, fmt.Sprintf("Limit the total metrics in the hub at one time. Will reject a push if hub is full. Default is %d which is no limit.", defaultLimit)) scrapeTimeout := flag.Int("scrapeTimeout", defaultScrapeTimeout, fmt.Sprintf("Timeout for scrape calls. Default is %d", defaultScrapeTimeout)) grpcPort := flag.Int("grpc-port", defaultGRPCPort, fmt.Sprintf("Port to listen for GRPC requests")) grpcMaxGRPCMsgSizeBytes := flag.Int("grpc-max-msg-size", defaultMaxGRPCMsgSizeBytes, fmt.Sprintf("Max message size (bytes) for GRPC receives")) flag.Parse() metricHub := hub.NewMetricHub(*totalMetricsLimit, *scrapeTimeout) e := echo.New() e.POST("/metrics", metricHub.Receive) e.GET("/metrics", metricHub.Scrape) e.GET("/debug", metricHub.Debug) // For liveness probe e.GET("/", func(ctx echo.Context) error { return ctx.NoContent(http.StatusOK) }) e.GET("/internal", serveInternalMetrics) if *grpcPort != 0 { go func() { log.Fatal(serveGRPC(*grpcPort, *grpcMaxGRPCMsgSizeBytes, metricHub)) }() } go e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", *port))) } func serveInternalMetrics(ctx echo.Context) error { text, err := hub.WriteInternalMetrics() if err != nil { return ctx.NoContent(http.StatusInternalServerError) } return ctx.String(http.StatusOK, text) } func serveGRPC(port, maxMsgSize int, metricHub *hub.MetricHub) error { lis, err := net.Listen("tcp", fmt.Sprintf(":%d", port)) if err != nil { log.Fatalf("failed to listen: %v", err) } metricsGrpcServer := hubgrpc.MetricsControllerServerImpl{MetricHub: metricHub} grpcServer := grpc.NewServer(grpc.MaxRecvMsgSize(maxMsgSize)) hubgrpc.RegisterMetricsControllerServer(grpcServer, &metricsGrpcServer) log.Printf("Serving GRPC on: %d\n", port) return grpcServer.Serve(lis) }