Add agent to client.
@@ -3,16 +3,47 @@ package main
import (
"context"
"fmt"
+ "os"
+ "time"
proto "github.com/micro/examples/helloworld/proto"
"github.com/micro/go-micro"
+ newrelic "github.com/newrelic/go-agent"
+ "github.com/newrelic/go-agent/_integrations/nrmicro"
)
+func mustGetEnv(key string) string {
+ if val := os.Getenv(key); "" != val {
+ return val
+ }
+ panic(fmt.Sprintf("environment variable %s unset", key))
+}
+
func main() {
- service := micro.NewService()
+ cfg := newrelic.NewConfig("Micro", mustGetEnv("NEW_RELIC_LICENSE_KEY"))
+ cfg.Logger = newrelic.NewDebugLogger(os.Stdout)
+ app, err := newrelic.NewApplication(cfg)
+ if nil != err {
+ panic(err)
+ }
+ err = app.WaitForConnection(10 * time.Second)
+ if nil != err {
+ panic(err)
+ }
+ defer app.Shutdown(10 * time.Second)
+
+ txn := app.StartTransaction("client", nil, nil)
+ defer txn.End()
+
+ service := micro.NewService(
+ // Add the New Relic wrapper to the client which will create External
+ // segments for each out going call.
+ micro.WrapClient(nrmicro.ClientWrapper()),
+ )
+ ctx := newrelic.NewContext(context.Background(), txn)
c := proto.NewGreeterService("greeter", service.Client())
- rsp, err := c.Hello(context.Background(), &proto.HelloRequest{
+ rsp, err := c.Hello(ctx, &proto.HelloRequest{
Name: "John",
})
if err != nil {
