From 751ecf1f9e6421e812f25e9fbf9c52c4c28fd70a Mon Sep 17 00:00:00 2001
From: Neil-Jocelyn Schark <neil.schark@h-da.de>
Date: Wed, 3 Jul 2024 12:59:27 +0000
Subject: [PATCH] tried first integration

---
 Makefile                                      |  2 +-
 go.mod                                        |  1 +
 go.sum                                        |  2 ++
 goKMS/kms/kms.go                              |  3 ++-
 goKMS/main.go                                 |  3 +++
 goKMS/telemetry/telemetry.go                  | 27 +++++++++++++++++++
 .../docker-compose_integration_test.yml       |  4 +++
 7 files changed, 40 insertions(+), 2 deletions(-)
 create mode 100644 goKMS/telemetry/telemetry.go

diff --git a/Makefile b/Makefile
index 4f659d08..26dd2f8c 100644
--- a/Makefile
+++ b/Makefile
@@ -111,7 +111,7 @@ integration-test: generate-integration-test-certs build-images
 	echo "Will sleep for the quantumlayers to get ready"
 	sleep 25
 	go test -p 1 -count=1 -v ./integration-tests/code/*
-	docker-compose -f integration-tests/docker-compose_integration_test.yml down
+#   docker-compose -f integration-tests/docker-compose_integration_test.yml down
 
 playground-start: generate-certs build-images
 	sudo containerlab deploy --reconfigure --topo dev_env_data/containerlab/playground.clab.yaml
diff --git a/go.mod b/go.mod
index e1f4ae4d..4afadde5 100644
--- a/go.mod
+++ b/go.mod
@@ -39,6 +39,7 @@ require (
 	github.com/tklauser/go-sysconf v0.3.13 // indirect
 	github.com/tklauser/numcpus v0.7.0 // indirect
 	github.com/yusufpapurcu/wmi v1.2.4 // indirect
+	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect
 	go.opentelemetry.io/otel v1.28.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect
diff --git a/go.sum b/go.sum
index 8045ebc8..a4fb370f 100644
--- a/go.sum
+++ b/go.sum
@@ -125,6 +125,8 @@ github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDgu
 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
 github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0=
 go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
 go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY=
diff --git a/goKMS/kms/kms.go b/goKMS/kms/kms.go
index 5540cb88..ad7f2fa3 100644
--- a/goKMS/kms/kms.go
+++ b/goKMS/kms/kms.go
@@ -33,6 +33,7 @@ import (
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/util"
 	pbQS "code.fbi.h-da.de/danet/quipsec/gen/go/quipsec"
 	"github.com/google/uuid"
+	"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
 )
 
 type Route struct {
@@ -242,7 +243,7 @@ func (kms *KMS) startGRPC() {
 		log.Fatalf("unable to generate gRPC server: %v", err)
 	}
 
-	interKMSServer := grpc.NewServer(grpc.Creds(gRPCTransportCreds))
+	interKMSServer := grpc.NewServer(grpc.Creds(gRPCTransportCreds), grpc.StatsHandler(otelgrpc.NewServerHandler()))
 	healthCheck := health.NewServer()
 
 	healthpb.RegisterHealthServer(interKMSServer, healthCheck)
diff --git a/goKMS/main.go b/goKMS/main.go
index 51d6ade0..d7f6c289 100644
--- a/goKMS/main.go
+++ b/goKMS/main.go
@@ -110,6 +110,9 @@ func main() {
 		Receivers: make(map[uuid.UUID]chan<- struct{}),
 	}
 
+	if err != nil {
+		log.Fatalf("failed to initialize OpenTelemetry: %v", err)
+	}
 	kms := kms.NewKMS(kmsId, os.Stdout, log.GetLevel(), false, kmsConfig, receiver)
 
 	// start Qkdn Manager server, if there is info about it in the config
diff --git a/goKMS/telemetry/telemetry.go b/goKMS/telemetry/telemetry.go
new file mode 100644
index 00000000..8c3497ba
--- /dev/null
+++ b/goKMS/telemetry/telemetry.go
@@ -0,0 +1,27 @@
+package telemetry
+
+import (
+	"context"
+	"fmt"
+
+	"go.opentelemetry.io/otel"
+	"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
+	"go.opentelemetry.io/otel/propagation"
+	"go.opentelemetry.io/otel/sdk/trace"
+)
+
+// Init configures an OpenTelemetry exporter and trace provider.
+func InitOpenTelemitry() (*trace.TracerProvider, error) {
+	traceExporter, err := otlptracehttp.New(context.TODO(), otlptracehttp.WithInsecure())
+	if err != nil {
+		return nil, fmt.Errorf("failed to create trace exporter: %w", err)
+	}
+
+	tp := trace.NewTracerProvider(
+		trace.WithSampler(trace.AlwaysSample()),
+		trace.WithBatcher(traceExporter),
+	)
+	otel.SetTracerProvider(tp)
+	otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
+	return tp, nil
+}
diff --git a/integration-tests/docker-compose_integration_test.yml b/integration-tests/docker-compose_integration_test.yml
index d60c3644..1d4c6ff6 100644
--- a/integration-tests/docker-compose_integration_test.yml
+++ b/integration-tests/docker-compose_integration_test.yml
@@ -8,6 +8,8 @@ services:
                 "--kms_config",
                 "/tmp/kms/config/kms_1.yaml",
             ]
+        environment:
+            - OTEL_EXPORTER_OTLP_ENDPOINT="http://jaeger:443"
         volumes:
             - ./config/kms/kms_1.yaml:/tmp/kms/config/kms_1.yaml
             - ../artifacts/integration-tests/ssl:/config/ssl
@@ -25,6 +27,8 @@ services:
                 "--kms_config",
                 "/tmp/kms/config/kms_2.yaml",
             ]
+        environment:
+            - OTEL_EXPORTER_OTLP_ENDPOINT="http://jaeger:443"
         volumes:
             - ./config/kms/kms_2.yaml:/tmp/kms/config/kms_2.yaml
             - ../artifacts/integration-tests/ssl:/config/ssl
-- 
GitLab