...

Source file src/github.com/datawire/ambassador/v2/cmd/example-envoy-metrics-sink/main.go

Documentation: github.com/datawire/ambassador/v2/cmd/example-envoy-metrics-sink

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"os"
     7  
     8  	"github.com/datawire/dlib/dhttp"
     9  	"github.com/datawire/dlib/dlog"
    10  	"google.golang.org/grpc"
    11  	"google.golang.org/protobuf/encoding/protojson"
    12  
    13  	v2_metrics "github.com/datawire/ambassador/v2/pkg/api/envoy/service/metrics/v2"
    14  )
    15  
    16  type server struct{}
    17  
    18  var _ v2_metrics.MetricsServiceServer = &server{}
    19  
    20  func main() {
    21  	ctx := context.Background()
    22  
    23  	grpcMux := grpc.NewServer()
    24  	v2_metrics.RegisterMetricsServiceServer(grpcMux, &server{})
    25  
    26  	sc := &dhttp.ServerConfig{
    27  		Handler: grpcMux,
    28  	}
    29  
    30  	dlog.Print(ctx, "starting...")
    31  
    32  	if err := sc.ListenAndServe(ctx, ":8080"); err != nil {
    33  		dlog.Errorf(ctx, "shut down with error: %v", err)
    34  		os.Exit(1)
    35  	}
    36  
    37  	dlog.Print(ctx, "shut down without error")
    38  }
    39  
    40  func (s *server) StreamMetrics(stream v2_metrics.MetricsService_StreamMetricsServer) error {
    41  	dlog.Println(stream.Context(), "Started stream")
    42  	for {
    43  		in, err := stream.Recv()
    44  
    45  		if err == io.EOF {
    46  			return nil
    47  		}
    48  
    49  		if err != nil {
    50  			return err
    51  		}
    52  
    53  		dlog.Println(stream.Context(), protojson.Format(in))
    54  	}
    55  }
    56  

View as plain text