@@ -10,37 +10,38 @@ import (
10
10
"context"
11
11
"fmt"
12
12
"io/fs"
13
-
14
13
"net"
15
14
"os"
15
+ "os/signal"
16
16
"strings"
17
17
"sync"
18
+ "syscall"
18
19
"time"
19
20
20
- pb "github.com/opentelemetry/opentelemetry-demo/src/productcatalogservice/genproto/oteldemo"
21
21
"github.com/sirupsen/logrus"
22
+
22
23
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
23
24
"go.opentelemetry.io/contrib/instrumentation/runtime"
24
- sdkmetric "go.opentelemetry.io/otel/sdk/metric"
25
- healthpb "google.golang.org/grpc/health/grpc_health_v1"
26
-
27
25
"go.opentelemetry.io/otel"
28
26
"go.opentelemetry.io/otel/attribute"
29
27
otelcodes "go.opentelemetry.io/otel/codes"
30
28
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
31
29
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
32
30
"go.opentelemetry.io/otel/propagation"
31
+ sdkmetric "go.opentelemetry.io/otel/sdk/metric"
33
32
sdkresource "go.opentelemetry.io/otel/sdk/resource"
34
33
sdktrace "go.opentelemetry.io/otel/sdk/trace"
35
34
"go.opentelemetry.io/otel/trace"
36
35
37
- "google.golang.org/protobuf/encoding/protojson"
38
-
39
36
"google.golang.org/grpc"
40
37
"google.golang.org/grpc/codes"
41
38
"google.golang.org/grpc/credentials/insecure"
39
+ healthpb "google.golang.org/grpc/health/grpc_health_v1"
42
40
"google.golang.org/grpc/reflection"
43
41
"google.golang.org/grpc/status"
42
+ "google.golang.org/protobuf/encoding/protojson"
43
+
44
+ pb "github.com/opentelemetry/opentelemetry-demo/src/productcatalogservice/genproto/oteldemo"
44
45
)
45
46
46
47
var (
@@ -115,13 +116,15 @@ func main() {
115
116
if err := tp .Shutdown (context .Background ()); err != nil {
116
117
log .Fatalf ("Tracer Provider Shutdown: %v" , err )
117
118
}
119
+ log .Println ("Shutdown tracer provider" )
118
120
}()
119
121
120
122
mp := initMeterProvider ()
121
123
defer func () {
122
124
if err := mp .Shutdown (context .Background ()); err != nil {
123
125
log .Fatalf ("Error shutting down meter provider: %v" , err )
124
126
}
127
+ log .Println ("Shutdown meter provider" )
125
128
}()
126
129
127
130
err := runtime .Start (runtime .WithMinimumReadMemStatsInterval (time .Second ))
@@ -149,7 +152,20 @@ func main() {
149
152
150
153
pb .RegisterProductCatalogServiceServer (srv , svc )
151
154
healthpb .RegisterHealthServer (srv , svc )
152
- srv .Serve (ln )
155
+
156
+ ctx , cancel := signal .NotifyContext (context .Background (), os .Interrupt , syscall .SIGTERM , syscall .SIGKILL )
157
+ defer cancel ()
158
+
159
+ go func () {
160
+ if err := srv .Serve (ln ); err != nil {
161
+ log .Fatalf ("Failed to serve gRPC server, err: %v" , err )
162
+ }
163
+ }()
164
+
165
+ <- ctx .Done ()
166
+
167
+ srv .GracefulStop ()
168
+ log .Println ("ProductCatalogService gRPC server stopped" )
153
169
}
154
170
155
171
type productCatalog struct {
0 commit comments