Categorygithub.com/francomidence/nrgrpc
repositorypackage
1.0.4
Repository: https://github.com/francomidence/nrgrpc.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

nrgrpc

Build Status codecov GoDoc Go project version Go Report Card license

gRPC stats.Handler implementation to measure and send performances metrics to New Relic.

Example

gRPC server

nrgrpc.NewServerStatsHandler creates a stats.Handler instance for gRPC servers. When the handler is passed to a gRPC server with grpc.StatsHandler, it will set a newrelic.Transaction into a request context.Context using newrelic.NewContext. So you can retrieve newrelic.Transaction instances with newrelic.FromContext.

func main() {
	lis, err := net.Listen("tcp", ":3000")
	if err != nil {
		panic(err)
	}

	// Initiailze a `newrelic.Appliation`
	cfg := newrelic.NewConfig("your_app","your_license_key")
	nrapp, err := newrelic.NewApplication(cfg)
	if err != nil {
		panic(err)
	}

	s := grpc.NewServer(
		// Create a `stats.Handler` from `newrelic.Application`
		grpc.StatsHandler(nrgrpc.NewServerStatsHandler(nrapp)),
	)

	// Register server implementations

	s.Serve(lis)
}

gRPC client

func main() {
	// Initiailze a `newrelic.Appliation`
	nrapp, err := newrelic.NewApplication(newrelic.Config{
		AppName: "your_app",
		License: "your_license_key",
	})
	if err != nil {
		panic(err)
	}

	// Create a `grpc.ClientConn` with `stats.Handler`
	conn, err := grpc.Dial(
		":3000",
		grpc.WithInsecure(),
		grpc.WithStatsHandler(nrgrpc.NewClientStatsHandler()),
	)
	if err != nil {
		panic(err)
	}


	// Register http handler using `https://godoc.org/github.com/newrelic/go-agent.WrapHandleFunc`.
	// This wrapper sets `newrelic.Transaction` into the `http.Request`'s context.
	nrhttp.WrapHandleFunc(app, "/foo", func(w http.ResponseWriter, r *http.Request) {
		resp, err := NewFooServiceClient.BarCall(r.Context(), &BarRequest{})
		// ...
	})
}