From 552a672cd286fdc41c14ab956efec604b8be5f6c Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Mon, 29 Apr 2024 16:02:58 +0530 Subject: [PATCH 1/7] Instrumented open telemetry --- server/cmd/server/main.go | 83 +++++++++++++++- server/go.mod | 35 +++++-- server/go.sum | 90 +++++++++++------ server/pkg/api/get_clusters.go | 7 ++ server/pkg/api/new_cluster_registration.go | 8 ++ server/pkg/config/config.go | 1 + server/pkg/opentelemetry/opentelemetry.go | 109 +++++++++++++++++++++ 7 files changed, 292 insertions(+), 41 deletions(-) create mode 100644 server/pkg/opentelemetry/opentelemetry.go diff --git a/server/cmd/server/main.go b/server/cmd/server/main.go index b98cba41..8fef615c 100644 --- a/server/cmd/server/main.go +++ b/server/cmd/server/main.go @@ -1,12 +1,15 @@ package main import ( + "context" "fmt" "net" "os" "os/signal" "syscall" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "google.golang.org/grpc" "google.golang.org/grpc/reflection" @@ -30,7 +33,15 @@ func main() { if err != nil { log.Fatal("failed to load service congfig", err) } - + cleanup, err := opentelemetry.InitTracer() + if err != nil { + log.Errorf("unable to set the open telemetry , error: %v", err) + } + defer func() { + if cleanup != nil { + cleanup(context.Background()) + } + }() err = iamclient.RegisterService(log) if err != nil { log.Fatalf("%v", err) @@ -84,12 +95,38 @@ func main() { log.Fatal("failed to listen: ", err) } + //grpc.NewServer( + // grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor()), + // grpc.StreamInterceptor(otelgrpc.StreamServerInterceptor())) + // authInterceptor := grpc.UnaryInterceptor(rpcServer.AuthInterceptor) + var grpcServer *grpc.Server - if cfg.AuthEnabled { + if (cfg.OptelEnabled) && (cfg.AuthEnabled) { + + log.Info("Server Authentication and opentelemetry is enabled") + + interceptor := CombineInterceptors(rpcServer.AuthInterceptor, otelgrpc.UnaryServerInterceptor()) + + grpcServer = grpc.NewServer(grpc.UnaryInterceptor(interceptor)) + + // log.Info("Server Authentication disabled but opentelemetry instrumented") + + // grpcServer = grpc.NewServer() + } else if cfg.OptelEnabled { + + log.Info("Opentelemetry is enabled") + + grpcServer = grpc.NewServer(grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor())) + + } else if cfg.AuthEnabled { + log.Info("Server Authentication enabled") + grpcServer = grpc.NewServer(grpc.UnaryInterceptor(rpcServer.AuthInterceptor)) } else { + log.Info("Server Authentication disabled") + grpcServer = grpc.NewServer() } @@ -110,3 +147,45 @@ func main() { <-signals log.Info("interrupt received, exiting") } + +// CombineInterceptors combines multiple unary interceptors into one +func CombineInterceptors(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor { + return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + // Chain the interceptors + chained := handler + for i := len(interceptors) - 1; i >= 0; i-- { + chained = chainedInterceptor(interceptors[i], chained) + } + // Call the combined interceptors + return chained(ctx, req) + } +} + +// chainedInterceptor chains two unary interceptors together +func chainedInterceptor(a grpc.UnaryServerInterceptor, b grpc.UnaryHandler) grpc.UnaryHandler { + return func(ctx context.Context, req interface{}) (interface{}, error) { + // Call the first interceptor, passing the next handler as the next interceptor + return a(ctx, req, nil, b) + } +} + +// CombineInterceptors combines multiple unary interceptors into one +// func CombineInterceptors(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor { +// return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { +// // Chain the interceptors +// chained := handler +// for i := len(interceptors) - 1; i >= 0; i-- { +// chained = chainedInterceptor(interceptors[i], info, chained) +// } +// // Call the combined interceptors +// return chained(ctx, req) +// } +// } + +// // chainedInterceptor chains two unary interceptors together +// func chainedInterceptor(a grpc.UnaryServerInterceptor, info *grpc.UnaryServerInfo, b grpc.UnaryHandler) grpc.UnaryHandler { +// return func(ctx context.Context, req interface{}) (interface{}, error) { +// // Call the first interceptor, passing the next handler as the next interceptor +// return a(ctx, req, info, b) +// } +// } diff --git a/server/go.mod b/server/go.mod index 25000793..c1a7d70b 100644 --- a/server/go.mod +++ b/server/go.mod @@ -5,7 +5,7 @@ go 1.21 require ( github.com/go-git/go-git/v5 v5.11.0 github.com/gocql/gocql v1.3.1 - github.com/google/uuid v1.4.0 + github.com/google/uuid v1.6.0 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 github.com/intelops/go-common v1.0.20 github.com/kelseyhightower/envconfig v1.4.0 @@ -13,18 +13,21 @@ require ( github.com/ory/client-go v1.1.49 github.com/pkg/errors v0.9.1 github.com/stargate/stargate-grpc-go-client v0.0.0-20220822130422-9a1c6261d4fa - golang.org/x/oauth2 v0.14.0 - google.golang.org/grpc v1.59.0 - google.golang.org/protobuf v1.31.0 + golang.org/x/oauth2 v0.17.0 + google.golang.org/grpc v1.63.2 + google.golang.org/protobuf v1.33.0 gopkg.in/yaml.v2 v2.4.0 ) +require github.com/stretchr/testify v1.9.0 // indirect + require ( dario.cat/mergo v1.0.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/cenkalti/backoff/v3 v3.0.0 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/containerd/containerd v1.7.13 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect @@ -36,9 +39,12 @@ require ( github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -71,15 +77,24 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - golang.org/x/crypto v0.17.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 // indirect + go.opentelemetry.io/otel v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/sdk v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.26.0 // indirect + go.opentelemetry.io/proto/otlp v1.2.0 // indirect + golang.org/x/crypto v0.22.0 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.13.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect ) diff --git a/server/go.sum b/server/go.sum index 1f774e52..f29bd4a1 100644 --- a/server/go.sum +++ b/server/go.sum @@ -22,6 +22,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEe github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3eG1c= github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/containerd/containerd v1.7.13 h1:wPYKIeGMN8vaggSKuV1X0wZulpMz4CrgEsZdaCyB6Is= @@ -58,6 +60,11 @@ github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3c github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/gocql/gocql v1.3.1 h1:BTwM4rux+ah5G3oH6/MQa+tur/TDd/XAAOXDxBBs7rg= @@ -66,10 +73,10 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -78,10 +85,12 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 h1:HcUWd006luQPljE73d5sk+/VgYPGUReEVz2y1/qylwY= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1/go.mod h1:w9Y7gY31krpLmrVU5ZPG9H7l9fZuRu5/3R3S3FMtVQ4= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -201,13 +210,29 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/testcontainers/testcontainers-go v0.11.1 h1:FiYsB83LSGbiawoV8TpAZGfcCUbtaeeg1SXqEKUxh08= github.com/testcontainers/testcontainers-go v0.11.1/go.mod h1:/V0UVq+1e7NWYoqTPog179clf0Qp9TOyp4EcXaEFQz8= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= +go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= +go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -215,14 +240,15 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -231,15 +257,17 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= -golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -262,20 +290,21 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= @@ -292,16 +321,19 @@ golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/server/pkg/api/get_clusters.go b/server/pkg/api/get_clusters.go index 8f8ace31..d4e455c7 100644 --- a/server/pkg/api/get_clusters.go +++ b/server/pkg/api/get_clusters.go @@ -3,12 +3,19 @@ package api import ( "context" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" ) func (s *Server) GetClusters(ctx context.Context, request *serverpb.GetClustersRequest) ( *serverpb.GetClustersResponse, error) { + + _, span := opentelemetry.GetTracer("Get Clusters"). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + orgId, err := validateOrgWithArgs(ctx) + if err != nil { s.log.Infof("request validation failed", err) return &serverpb.GetClustersResponse{ diff --git a/server/pkg/api/new_cluster_registration.go b/server/pkg/api/new_cluster_registration.go index 4357db96..35368334 100644 --- a/server/pkg/api/new_cluster_registration.go +++ b/server/pkg/api/new_cluster_registration.go @@ -6,12 +6,20 @@ import ( "github.com/gocql/gocql" "github.com/kube-tarian/kad/server/pkg/agent" "github.com/kube-tarian/kad/server/pkg/credential" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) NewClusterRegistration(ctx context.Context, request *serverpb.NewClusterRegistrationRequest) ( *serverpb.NewClusterRegistrationResponse, error) { orgId, err := validateOrgWithArgs(ctx) + _, span := opentelemetry.GetTracer(request.GetClusterName()). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Name", request.ClusterName)) + span.SetAttributes(attribute.String("Agent EndPoint", request.AgentEndpoint)) if err != nil { s.log.Infof("request validation failed", err) return &serverpb.NewClusterRegistrationResponse{ diff --git a/server/pkg/config/config.go b/server/pkg/config/config.go index 0a4dfac3..d21e5925 100644 --- a/server/pkg/config/config.go +++ b/server/pkg/config/config.go @@ -13,6 +13,7 @@ type ServiceConfig struct { Database string `envconfig:"DATABASE" default:"astra"` CleanupDatabase bool `envconfig:"CLEANUP_DATABASE" default:"false"` AuthEnabled bool `envconfig:"AUTH_ENABLED" default:"false"` + OptelEnabled bool `envconfig:"IS_OPTEL_ENABLED" default:"true"` RegisterLaunchAppsConifg bool `envconfig:"REGISTER_LAUNCH_APPS_CONFIG" default:"true"` CaptenOAuthURL string `envconfig:"CAPTEN_OAUTH_URL" default:"https://alpha.optimizor.app/api/.ory"` } diff --git a/server/pkg/opentelemetry/opentelemetry.go b/server/pkg/opentelemetry/opentelemetry.go new file mode 100644 index 00000000..f873ff17 --- /dev/null +++ b/server/pkg/opentelemetry/opentelemetry.go @@ -0,0 +1,109 @@ +package opentelemetry + +import ( + "context" + "os" + + "github.com/kelseyhightower/envconfig" + "github.com/pkg/errors" + logger "github.com/sirupsen/logrus" + + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + "go.opentelemetry.io/otel/sdk/trace" + tre "go.opentelemetry.io/otel/trace" + "google.golang.org/grpc/credentials" +) + +type Configurations struct { + ServiceName string `envconfig:"APPLICATION_NAME" default:"Applications"` + CollectorURL string `envconfig:"OPTE_URL" default:"otelcollector.dev.optimizor.app:80"` + IsInsecure bool `envconfig:"IS_OPTE_INSECURE" default:"true"` + IsEnabled bool `envconfig:"IS_OPTEL_ENABLED" default:"true"` +} + +func getConfigurations() (opteConfig *Configurations, err error) { + opteConfig = &Configurations{} + if err = envconfig.Process("", opteConfig); err != nil { + return nil, errors.WithStack(err) + } + return + +} + +func InitTracer() (func(context.Context) error, error) { + config, err := getConfigurations() + if err != nil { + logger.Errorf("Unable to read open telemetry configurations") + return nil, err + } + if !config.IsEnabled { + return nil, nil + } + + headers := map[string]string{ + "signoz-service-name": config.ServiceName, + } + secureOption := otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, "")) + if config.IsInsecure { + secureOption = otlptracegrpc.WithInsecure() + } + + exporter, err := otlptrace.New( + context.Background(), + otlptracegrpc.NewClient( + secureOption, + otlptracegrpc.WithEndpoint(config.CollectorURL), + otlptracegrpc.WithHeaders(headers), + ), + ) + + if err != nil { + logger.Errorf("unble initialize new object , error : %v", err) + return nil, err + } + resources, err := resource.New( + context.Background(), + resource.WithAttributes( + attribute.String("service.name", config.ServiceName), + attribute.String("library.language", "go"), + ), + ) + if err != nil { + logger.Errorf("Could not set resources:%v ", err) + return nil, err + } + + traceProvider := trace.NewTracerProvider( + trace.WithSampler(trace.AlwaysSample()), + trace.WithBatcher(exporter), + trace.WithResource(resources), + ) + + otel.SetTracerProvider(traceProvider) + otel.SetTextMapPropagator( + propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{})) + return exporter.Shutdown, nil +} + +var tracer tre.Tracer + +func GetTracer(defaultValue string) tre.Tracer { + if tracer == nil { + serviceName := os.Getenv("APPLICATION_NAME") + if serviceName == "" || serviceName == "Applications" { + serviceName = defaultValue + } + tracer = otel.Tracer(serviceName) + } + return tracer +} + +func BuildContext(ctx context.Context) context.Context { + newCtx, _ := context.WithCancel(ctx) + return newCtx +} From d36b915ef78a04cd44089561b2aa312046062e6d Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Mon, 29 Apr 2024 21:23:20 +0530 Subject: [PATCH 2/7] Instrumented opentelemetry --- server/pkg/opentelemetry/opentelemetry.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/pkg/opentelemetry/opentelemetry.go b/server/pkg/opentelemetry/opentelemetry.go index f873ff17..70d9d578 100644 --- a/server/pkg/opentelemetry/opentelemetry.go +++ b/server/pkg/opentelemetry/opentelemetry.go @@ -21,8 +21,8 @@ import ( type Configurations struct { ServiceName string `envconfig:"APPLICATION_NAME" default:"Applications"` - CollectorURL string `envconfig:"OPTE_URL" default:"otelcollector.dev.optimizor.app:80"` - IsInsecure bool `envconfig:"IS_OPTE_INSECURE" default:"true"` + CollectorURL string `envconfig:"OPTE_URL" default:"otelcollector.awsagent.optimizor.app:80"` + IsInsecure bool `envconfig:"IS_OPTEL_INSECURE" default:"true"` IsEnabled bool `envconfig:"IS_OPTEL_ENABLED" default:"true"` } From a6d3dfa86fd57e230137ce0e33db79b681769f6a Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Mon, 29 Apr 2024 22:12:22 +0530 Subject: [PATCH 3/7] Instrumented opentelemetry --- server/cmd/server/main.go | 7 ++++--- server/pkg/opentelemetry/opentelemetry.go | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/server/cmd/server/main.go b/server/cmd/server/main.go index 8fef615c..7e3e80ba 100644 --- a/server/cmd/server/main.go +++ b/server/cmd/server/main.go @@ -103,6 +103,7 @@ func main() { var grpcServer *grpc.Server if (cfg.OptelEnabled) && (cfg.AuthEnabled) { + log.Info("OPtel Enabled", cfg.OptelEnabled) log.Info("Server Authentication and opentelemetry is enabled") interceptor := CombineInterceptors(rpcServer.AuthInterceptor, otelgrpc.UnaryServerInterceptor()) @@ -113,18 +114,18 @@ func main() { // grpcServer = grpc.NewServer() } else if cfg.OptelEnabled { - + log.Info("OPtel Enabled", cfg.OptelEnabled) log.Info("Opentelemetry is enabled") grpcServer = grpc.NewServer(grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor())) } else if cfg.AuthEnabled { - + log.Info("OPtel Enabled", cfg.OptelEnabled) log.Info("Server Authentication enabled") grpcServer = grpc.NewServer(grpc.UnaryInterceptor(rpcServer.AuthInterceptor)) } else { - + log.Info("OPtel Enabled", cfg.OptelEnabled) log.Info("Server Authentication disabled") grpcServer = grpc.NewServer() diff --git a/server/pkg/opentelemetry/opentelemetry.go b/server/pkg/opentelemetry/opentelemetry.go index 70d9d578..f3f934c5 100644 --- a/server/pkg/opentelemetry/opentelemetry.go +++ b/server/pkg/opentelemetry/opentelemetry.go @@ -37,6 +37,7 @@ func getConfigurations() (opteConfig *Configurations, err error) { func InitTracer() (func(context.Context) error, error) { config, err := getConfigurations() + logger.Info("Getting optel config", config.CollectorURL, config.IsEnabled) if err != nil { logger.Errorf("Unable to read open telemetry configurations") return nil, err From 7bba9ec0bcd01f467d2a88831db590535cb2b575 Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Tue, 7 May 2024 21:07:39 +0530 Subject: [PATCH 4/7] Instrumented with Open Telemetry --- capten/agent/internal/api/store_cred_apis.go | 3 +++ capten/common-pkg/plugins/argocd/clusters.go | 1 + server/pkg/api/add_store_apps.go | 8 ++++++++ server/pkg/api/agent.go | 9 +++++++++ server/pkg/api/delete_cluster_registration.go | 10 ++++++++++ server/pkg/api/delete_store_app.go | 8 ++++++++ server/pkg/api/deploy_store_app.go | 9 +++++++++ server/pkg/api/get_cluster.go | 6 ++++++ server/pkg/api/get_cluster_app.go | 9 +++++++++ server/pkg/api/get_cluster_app_launches.go | 9 +++++++++ server/pkg/api/get_cluster_apps.go | 8 ++++++++ server/pkg/api/get_store_app.go | 8 ++++++++ server/pkg/api/get_store_app_values.go | 10 ++++++++++ server/pkg/api/get_store_apps.go | 6 ++++++ server/pkg/api/undeploy_store_app.go | 9 +++++++++ server/pkg/api/update_cluster_registration.go | 10 ++++++++++ server/pkg/api/update_store_app.go | 9 +++++++++ server/pkg/api/upgrade_store_app.go | 10 ++++++++++ 18 files changed, 142 insertions(+) diff --git a/capten/agent/internal/api/store_cred_apis.go b/capten/agent/internal/api/store_cred_apis.go index 26997574..9a73a91d 100644 --- a/capten/agent/internal/api/store_cred_apis.go +++ b/capten/agent/internal/api/store_cred_apis.go @@ -7,6 +7,7 @@ import ( "github.com/kube-tarian/kad/capten/common-pkg/agentpb" "github.com/kube-tarian/kad/capten/common-pkg/k8s" vaultcred "github.com/kube-tarian/kad/capten/common-pkg/vault-cred" + v1 "k8s.io/api/core/v1" "github.com/kube-tarian/kad/capten/common-pkg/credential" @@ -20,6 +21,8 @@ var ( ) func (a *Agent) StoreCredential(ctx context.Context, request *agentpb.StoreCredentialRequest) (*agentpb.StoreCredentialResponse, error) { + + credPath := fmt.Sprintf("%s/%s/%s", request.CredentialType, request.CredEntityName, request.CredIdentifier) credAdmin, err := credentials.NewCredentialAdmin(ctx) if err != nil { diff --git a/capten/common-pkg/plugins/argocd/clusters.go b/capten/common-pkg/plugins/argocd/clusters.go index 665a3ab1..44873d7f 100644 --- a/capten/common-pkg/plugins/argocd/clusters.go +++ b/capten/common-pkg/plugins/argocd/clusters.go @@ -119,6 +119,7 @@ func (a *ArgoCDClient) DeleteCluster(ctx context.Context, clusterURL string) (*c } func (a *ArgoCDClient) GetCluster(ctx context.Context, clusterURL string) (*v1alpha1.Cluster, error) { + conn, appClient, err := a.client.NewClusterClient() if err != nil { return nil, err diff --git a/server/pkg/api/add_store_apps.go b/server/pkg/api/add_store_apps.go index d7fb47f5..abdf3c3b 100644 --- a/server/pkg/api/add_store_apps.go +++ b/server/pkg/api/add_store_apps.go @@ -4,12 +4,20 @@ import ( "context" "encoding/hex" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" "github.com/kube-tarian/kad/server/pkg/types" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppRequest) ( *serverpb.AddStoreAppResponse, error) { + + _, span := opentelemetry.GetTracer("Add Store App"). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + span.SetAttributes(attribute.String("Cluster Name", request.AppConfig.AppName)) + err := validateArgs(request.AppConfig.AppName, request.AppConfig.Version) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/agent.go b/server/pkg/api/agent.go index 50c20c62..2c0dcde2 100644 --- a/server/pkg/api/agent.go +++ b/server/pkg/api/agent.go @@ -4,12 +4,21 @@ import ( "context" "github.com/intelops/go-common/credentials" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) StoreCredential(ctx context.Context, request *serverpb.StoreCredentialRequest) ( *serverpb.StoreCredentialResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) + metadataMap := metadataContextToMap(ctx) orgId := metadataMap[organizationIDAttribute] if orgId == "" { diff --git a/server/pkg/api/delete_cluster_registration.go b/server/pkg/api/delete_cluster_registration.go index b1fff001..5e8cb205 100644 --- a/server/pkg/api/delete_cluster_registration.go +++ b/server/pkg/api/delete_cluster_registration.go @@ -4,11 +4,21 @@ import ( "context" "github.com/kube-tarian/kad/server/pkg/credential" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) DeleteClusterRegistration(ctx context.Context, request *serverpb.DeleteClusterRegistrationRequest) ( *serverpb.DeleteClusterRegistrationResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Name", request.ClusterID)) + + orgId, err := validateOrgWithArgs(ctx, request.ClusterID) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/delete_store_app.go b/server/pkg/api/delete_store_app.go index 404854f3..87df350f 100644 --- a/server/pkg/api/delete_store_app.go +++ b/server/pkg/api/delete_store_app.go @@ -3,11 +3,19 @@ package api import ( "context" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteStoreAppRequest) ( *serverpb.DeleteStoreAppResponse, error) { + _, span := opentelemetry.GetTracer(request.AppName). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Name", request.AppName)) + span.SetAttributes(attribute.String("Agent EndPoint", request.Version)) err := validateArgs(request.AppName, request.Version) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/deploy_store_app.go b/server/pkg/api/deploy_store_app.go index 80b81615..9b1ffa08 100644 --- a/server/pkg/api/deploy_store_app.go +++ b/server/pkg/api/deploy_store_app.go @@ -4,12 +4,21 @@ import ( "context" "encoding/hex" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) DeployStoreApp(ctx context.Context, request *serverpb.DeployStoreAppRequest) ( *serverpb.DeployStoreAppResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("App Name", request.AppName)) + span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) orgId, err := validateOrgWithArgs(ctx, request.ClusterID, request.AppName, request.Version) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/get_cluster.go b/server/pkg/api/get_cluster.go index e21f80ea..7f6d8e8f 100644 --- a/server/pkg/api/get_cluster.go +++ b/server/pkg/api/get_cluster.go @@ -5,6 +5,7 @@ import ( "fmt" "strings" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" ) @@ -15,6 +16,11 @@ const ( func (s *Server) GetClusterDetails(ctx context.Context, request *serverpb.GetClusterDetailsRequest) ( *serverpb.GetClusterDetailsResponse, error) { + + _, span := opentelemetry.GetTracer("GetClusterDetails"). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + orgId, err := validateOrgWithArgs(ctx) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/get_cluster_app.go b/server/pkg/api/get_cluster_app.go index f843b4ab..3c180069 100644 --- a/server/pkg/api/get_cluster_app.go +++ b/server/pkg/api/get_cluster_app.go @@ -4,10 +4,19 @@ import ( "context" "fmt" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) GetClusterApp(ctx context.Context, request *serverpb.GetClusterAppRequest) ( *serverpb.GetClusterAppResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) + span.SetAttributes(attribute.String("AppReleaseName", request.AppReleaseName)) return &serverpb.GetClusterAppResponse{}, fmt.Errorf("not implemented") } diff --git a/server/pkg/api/get_cluster_app_launches.go b/server/pkg/api/get_cluster_app_launches.go index 48159f19..4365a468 100644 --- a/server/pkg/api/get_cluster_app_launches.go +++ b/server/pkg/api/get_cluster_app_launches.go @@ -3,11 +3,20 @@ package api import ( "context" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) GetClusterAppLaunchConfigs(ctx context.Context, request *serverpb.GetClusterAppLaunchConfigsRequest) ( *serverpb.GetClusterAppLaunchConfigsResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Id", request.ClusterID)) + orgId, err := validateOrgWithArgs(ctx, request.ClusterID) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/get_cluster_apps.go b/server/pkg/api/get_cluster_apps.go index 62d6098e..4f816509 100644 --- a/server/pkg/api/get_cluster_apps.go +++ b/server/pkg/api/get_cluster_apps.go @@ -3,12 +3,20 @@ package api import ( "context" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) GetClusterApps(ctx context.Context, request *serverpb.GetClusterAppsRequest) ( *serverpb.GetClusterAppsResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Name", request.ClusterID)) orgId, err := validateOrgWithArgs(ctx, request.ClusterID) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/get_store_app.go b/server/pkg/api/get_store_app.go index 9a4ce9e0..31c93eea 100644 --- a/server/pkg/api/get_store_app.go +++ b/server/pkg/api/get_store_app.go @@ -4,11 +4,19 @@ import ( "context" "encoding/hex" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) GetStoreApp(ctx context.Context, request *serverpb.GetStoreAppRequest) ( *serverpb.GetStoreAppResponse, error) { + _, span := opentelemetry.GetTracer(request.AppName). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("App Name", request.AppName)) + orgId, err := validateOrgWithArgs(ctx, request.AppName, request.Version) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/get_store_app_values.go b/server/pkg/api/get_store_app_values.go index f472b803..514b80a6 100644 --- a/server/pkg/api/get_store_app_values.go +++ b/server/pkg/api/get_store_app_values.go @@ -3,12 +3,22 @@ package api import ( "context" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) GetStoreAppValues(ctx context.Context, request *serverpb.GetStoreAppValuesRequest) ( *serverpb.GetStoreAppValuesResponse, error) { orgId, err := validateOrgWithArgs(ctx, request.ClusterID) + + _, span := opentelemetry.GetTracer(request.AppName). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Name", request.AppName)) + span.SetAttributes(attribute.String("Agent EndPoint", request.ClusterID)) + if err != nil { s.log.Infof("request validation failed", err) return &serverpb.GetStoreAppValuesResponse{ diff --git a/server/pkg/api/get_store_apps.go b/server/pkg/api/get_store_apps.go index 1f10d7c8..45b0fd92 100644 --- a/server/pkg/api/get_store_apps.go +++ b/server/pkg/api/get_store_apps.go @@ -4,11 +4,17 @@ import ( "context" "encoding/hex" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" ) func (s *Server) GetStoreApps(ctx context.Context, request *serverpb.GetStoreAppsRequest) ( *serverpb.GetStoreAppsResponse, error) { + + _, span := opentelemetry.GetTracer("GetStoreAppsRequest"). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + orgId, err := validateOrgWithArgs(ctx) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/undeploy_store_app.go b/server/pkg/api/undeploy_store_app.go index 4e54a677..b8874be9 100644 --- a/server/pkg/api/undeploy_store_app.go +++ b/server/pkg/api/undeploy_store_app.go @@ -3,12 +3,21 @@ package api import ( "context" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) UnDeployStoreApp(ctx context.Context, request *serverpb.UnDeployStoreAppRequest) ( *serverpb.UnDeployStoreAppResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) + span.SetAttributes(attribute.String("Release Name", request.ReleaseName)) orgId, err := validateOrgWithArgs(ctx, request.ClusterID, request.ReleaseName) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/update_cluster_registration.go b/server/pkg/api/update_cluster_registration.go index 86a517b2..983a8171 100644 --- a/server/pkg/api/update_cluster_registration.go +++ b/server/pkg/api/update_cluster_registration.go @@ -5,12 +5,22 @@ import ( "github.com/kube-tarian/kad/server/pkg/agent" "github.com/kube-tarian/kad/server/pkg/credential" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) UpdateClusterRegistration(ctx context.Context, request *serverpb.UpdateClusterRegistrationRequest) ( *serverpb.UpdateClusterRegistrationResponse, error) { + orgId, err := validateOrgWithArgs(ctx, request.ClusterID) + + _, span := opentelemetry.GetTracer(request.GetClusterName()). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster Name", request.ClusterName)) + span.SetAttributes(attribute.String("Agent EndPoint", request.AgentEndpoint)) if err != nil { s.log.Infof("request validation failed", err) return &serverpb.UpdateClusterRegistrationResponse{ diff --git a/server/pkg/api/update_store_app.go b/server/pkg/api/update_store_app.go index 6e39448b..5bed5ef8 100644 --- a/server/pkg/api/update_store_app.go +++ b/server/pkg/api/update_store_app.go @@ -4,12 +4,21 @@ import ( "context" "encoding/hex" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" "github.com/kube-tarian/kad/server/pkg/types" + "go.opentelemetry.io/otel/attribute" ) func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateStoreAppRequest) ( *serverpb.UpdateStoreAppRsponse, error) { + + _, span := opentelemetry.GetTracer(request.AppConfig.AppName). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("App Name", request.AppConfig.AppName)) + _, err := validateOrgWithArgs(ctx, request.AppConfig.AppName, request.AppConfig.Version) if err != nil { s.log.Infof("request validation failed", err) diff --git a/server/pkg/api/upgrade_store_app.go b/server/pkg/api/upgrade_store_app.go index 6bffc09e..8e75291a 100644 --- a/server/pkg/api/upgrade_store_app.go +++ b/server/pkg/api/upgrade_store_app.go @@ -4,13 +4,23 @@ import ( "context" "encoding/hex" + "github.com/kube-tarian/kad/server/pkg/opentelemetry" "github.com/kube-tarian/kad/server/pkg/pb/agentpb" "github.com/kube-tarian/kad/server/pkg/pb/serverpb" + "go.opentelemetry.io/otel/attribute" "gopkg.in/yaml.v2" ) func (s *Server) UpgradeStoreApp(ctx context.Context, request *serverpb.UpgradeStoreAppRequest) ( *serverpb.UpgradeStoreAppResponse, error) { + + _, span := opentelemetry.GetTracer(request.ClusterID). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + + span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) + span.SetAttributes(attribute.String("App Name", request.AppName)) + orgId, err := validateOrgWithArgs(ctx, request.ClusterID, request.AppName, request.Version) if err != nil { s.log.Infof("request validation failed", err) From 7fa70f4b67c16ca2b3e3a278c779ef7c5154ca17 Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Wed, 8 May 2024 16:06:24 +0530 Subject: [PATCH 5/7] Resolved conflicts --- server/pkg/api/add_store_apps.go | 67 -------------- server/pkg/api/delete_store_app.go | 43 --------- server/pkg/api/deploy_store_app.go | 119 ------------------------- server/pkg/api/get_store_app.go | 64 ------------- server/pkg/api/get_store_app_values.go | 66 -------------- server/pkg/api/get_store_apps.go | 90 ------------------- server/pkg/api/undeploy_store_app.go | 61 ------------- server/pkg/api/update_store_app.go | 66 -------------- server/pkg/api/upgrade_store_app.go | 112 ----------------------- 9 files changed, 688 deletions(-) delete mode 100644 server/pkg/api/add_store_apps.go delete mode 100644 server/pkg/api/delete_store_app.go delete mode 100644 server/pkg/api/deploy_store_app.go delete mode 100644 server/pkg/api/get_store_app.go delete mode 100644 server/pkg/api/get_store_app_values.go delete mode 100644 server/pkg/api/get_store_apps.go delete mode 100644 server/pkg/api/undeploy_store_app.go delete mode 100644 server/pkg/api/update_store_app.go delete mode 100644 server/pkg/api/upgrade_store_app.go diff --git a/server/pkg/api/add_store_apps.go b/server/pkg/api/add_store_apps.go deleted file mode 100644 index abdf3c3b..00000000 --- a/server/pkg/api/add_store_apps.go +++ /dev/null @@ -1,67 +0,0 @@ -package api - -import ( - "context" - "encoding/hex" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "github.com/kube-tarian/kad/server/pkg/types" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) AddStoreApp(ctx context.Context, request *serverpb.AddStoreAppRequest) ( - *serverpb.AddStoreAppResponse, error) { - - _, span := opentelemetry.GetTracer("Add Store App"). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - span.SetAttributes(attribute.String("Cluster Name", request.AppConfig.AppName)) - - err := validateArgs(request.AppConfig.AppName, request.AppConfig.Version) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.AddStoreAppResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Add store app [%s:%s] request recieved", request.AppConfig.AppName, request.AppConfig.Version) - - config := &types.StoreAppConfig{ - ReleaseName: request.AppConfig.ReleaseName, - AppName: request.AppConfig.AppName, - Version: request.AppConfig.Version, - Category: request.AppConfig.Category, - Description: request.AppConfig.Description, - ChartName: request.AppConfig.ChartName, - RepoName: request.AppConfig.RepoName, - RepoURL: request.AppConfig.RepoURL, - Namespace: request.AppConfig.Namespace, - CreateNamespace: request.AppConfig.CreateNamespace, - PrivilegedNamespace: request.AppConfig.PrivilegedNamespace, - Icon: hex.EncodeToString(request.AppConfig.Icon), - LaunchURL: request.AppConfig.LaunchURL, - LaunchUIDescription: request.AppConfig.LaunchUIDescription, - OverrideValues: request.AppValues.OverrideValues, - LaunchUIValues: request.AppValues.LaunchUIValues, - TemplateValues: request.AppValues.TemplateValues, - PluginName: request.AppConfig.PluginName, - PluginDescription: request.AppConfig.PluginDescription, - APIEndpoint: request.AppConfig.ApiEndpoint, - } - - if err := s.serverStore.AddOrUpdateStoreApp(config); err != nil { - s.log.Errorf("failed to add app config to store, %v", err) - return &serverpb.AddStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed add app config to store", - }, nil - } - - s.log.Infof("Add store app [%s:%s] request successful", request.AppConfig.AppName, request.AppConfig.Version) - return &serverpb.AddStoreAppResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app config is sucessfuly added to store", - }, nil -} diff --git a/server/pkg/api/delete_store_app.go b/server/pkg/api/delete_store_app.go deleted file mode 100644 index 87df350f..00000000 --- a/server/pkg/api/delete_store_app.go +++ /dev/null @@ -1,43 +0,0 @@ -package api - -import ( - "context" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) DeleteStoreApp(ctx context.Context, request *serverpb.DeleteStoreAppRequest) ( - *serverpb.DeleteStoreAppResponse, error) { - _, span := opentelemetry.GetTracer(request.AppName). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("Cluster Name", request.AppName)) - span.SetAttributes(attribute.String("Agent EndPoint", request.Version)) - err := validateArgs(request.AppName, request.Version) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.DeleteStoreAppResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Delete store app [%s:%s] request recieved", request.AppName, request.Version) - - if err := s.serverStore.DeleteAppInStore(request.AppName, request.Version); err != nil { - s.log.Errorf("failed to delete app config from store, %v", err) - return &serverpb.DeleteStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to delete app config from store", - }, nil - } - - s.log.Infof("Delete store app [%s:%s] request successful", request.AppName, request.Version) - return &serverpb.DeleteStoreAppResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app config is sucessfuly deleted", - }, nil - -} diff --git a/server/pkg/api/deploy_store_app.go b/server/pkg/api/deploy_store_app.go deleted file mode 100644 index 9b1ffa08..00000000 --- a/server/pkg/api/deploy_store_app.go +++ /dev/null @@ -1,119 +0,0 @@ -package api - -import ( - "context" - "encoding/hex" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/agentpb" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) DeployStoreApp(ctx context.Context, request *serverpb.DeployStoreAppRequest) ( - *serverpb.DeployStoreAppResponse, error) { - - _, span := opentelemetry.GetTracer(request.ClusterID). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("App Name", request.AppName)) - span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) - orgId, err := validateOrgWithArgs(ctx, request.ClusterID, request.AppName, request.Version) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Deploy store app [%s:%s] request for cluster %s recieved, [org: %s]", - request.AppName, request.Version, request.ClusterID, orgId) - - config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) - if err != nil { - s.log.Errorf("failed to get store app values, %v", err) - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to find store app values", - }, nil - } - - overrideValues := request.OverrideValues - if len(request.OverrideValues) == 0 { - overrideValues = config.OverrideValues - } - - clusterGlobalValues, err := s.getClusterGlobalValues(orgId, request.ClusterID) - if err != nil { - s.log.Errorf("failed to get cluster global values, %v", err) - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to fetch cluster global values values", - }, nil - } - - dervivedOverrideValues, err := s.deriveTemplateOverrideValues(overrideValues, clusterGlobalValues) - if err != nil { - s.log.Errorf("failed to update overrided store app values, %v", err) - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to update overrided store app values", - }, nil - } - - decodedIconBytes, _ := hex.DecodeString(config.Icon) - req := &agentpb.InstallAppRequest{ - AppConfig: &agentpb.AppConfig{ - AppName: config.Name, - Version: config.Version, - ReleaseName: config.ReleaseName, - Category: config.Category, - Description: config.Description, - ChartName: config.ChartName, - RepoName: config.RepoName, - RepoURL: config.RepoURL, - Namespace: config.Namespace, - CreateNamespace: config.CreateNamespace, - PrivilegedNamespace: config.PrivilegedNamespace, - Icon: decodedIconBytes, - LaunchURL: config.LaunchURL, - LaunchUIDescription: config.LaunchUIDescription, - DefualtApp: false, - PluginName: config.PluginName, - PluginDescription: config.PluginDescription, - ApiEndpoint: config.APIEndpoint, - }, - AppValues: &agentpb.AppValues{ - OverrideValues: dervivedOverrideValues, - LaunchUIValues: config.LaunchUIValues, - TemplateValues: config.TemplateValues, - }, - } - - agent, err := s.agentHandeler.GetAgent(orgId, request.ClusterID) - if err != nil { - s.log.Errorf("failed to initialize agent, %v", err) - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to deploy the app", - }, nil - } - - _, err = agent.GetClient().InstallApp(ctx, req) - if err != nil { - s.log.Errorf("failed to deploy app, %v", err) - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to deploy the app", - }, nil - } - - s.log.Infof("Deploy Store app [%s:%s] request request triggered for cluster %s, [org: %s]", - request.AppName, request.Version, request.ClusterID, orgId) - - return &serverpb.DeployStoreAppResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app is successfully deployed", - }, nil -} diff --git a/server/pkg/api/get_store_app.go b/server/pkg/api/get_store_app.go deleted file mode 100644 index 31c93eea..00000000 --- a/server/pkg/api/get_store_app.go +++ /dev/null @@ -1,64 +0,0 @@ -package api - -import ( - "context" - "encoding/hex" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) GetStoreApp(ctx context.Context, request *serverpb.GetStoreAppRequest) ( - *serverpb.GetStoreAppResponse, error) { - _, span := opentelemetry.GetTracer(request.AppName). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("App Name", request.AppName)) - - orgId, err := validateOrgWithArgs(ctx, request.AppName, request.Version) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.GetStoreAppResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Get store app %s:%s request recieved, [org: %s]", request.AppName, request.Version, orgId) - - config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) - if err != nil { - s.log.Errorf("failed to get app config from store, %v", err) - return &serverpb.GetStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to get app config from store", - }, nil - } - - decodedIconBytes, _ := hex.DecodeString(config.Icon) - appConfig := &serverpb.StoreAppConfig{ - AppName: config.Name, - Version: config.Version, - Category: config.Category, - Description: config.Description, - ChartName: config.ChartName, - RepoName: config.RepoName, - RepoURL: config.RepoURL, - Namespace: config.Namespace, - CreateNamespace: config.CreateNamespace, - PrivilegedNamespace: config.PrivilegedNamespace, - Icon: decodedIconBytes, - LaunchURL: config.LaunchURL, - LaunchUIDescription: config.LaunchUIDescription, - ReleaseName: config.ReleaseName, - } - - s.log.Infof("Fetched store app %s:%s, [org: %s]", request.AppName, request.Version, orgId) - return &serverpb.GetStoreAppResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app config is sucessfuly fetched from store", - AppConfig: appConfig, - }, nil - -} diff --git a/server/pkg/api/get_store_app_values.go b/server/pkg/api/get_store_app_values.go deleted file mode 100644 index 514b80a6..00000000 --- a/server/pkg/api/get_store_app_values.go +++ /dev/null @@ -1,66 +0,0 @@ -package api - -import ( - "context" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) GetStoreAppValues(ctx context.Context, request *serverpb.GetStoreAppValuesRequest) ( - *serverpb.GetStoreAppValuesResponse, error) { - orgId, err := validateOrgWithArgs(ctx, request.ClusterID) - - _, span := opentelemetry.GetTracer(request.AppName). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("Cluster Name", request.AppName)) - span.SetAttributes(attribute.String("Agent EndPoint", request.ClusterID)) - - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.GetStoreAppValuesResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Get store app [%s:%s] values request for cluster %s recieved, [org: %s]", - request.AppName, request.Version, request.ClusterID, orgId) - - config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) - if err != nil { - s.log.Errorf("failed to get store app values, %v", err) - return &serverpb.GetStoreAppValuesResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to get store app values", - }, nil - } - - clusterGlobalValues, err := s.getClusterGlobalValues(orgId, request.ClusterID) - if err != nil { - s.log.Errorf("failed to get cluster global values, %v", err) - return &serverpb.GetStoreAppValuesResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to fetch cluster global values values", - }, nil - } - - overrideValues, err := s.deriveTemplateOverrideValues(config.OverrideValues, clusterGlobalValues) - if err != nil { - s.log.Errorf("failed to update overrided store app values, %v", err) - return &serverpb.GetStoreAppValuesResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to update overrided store app values", - }, nil - } - - s.log.Infof("Fetched store app [%s:%s] values request for cluster %s successful, [org: %s]", - request.AppName, request.Version, request.ClusterID, orgId) - return &serverpb.GetStoreAppValuesResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "store app values sucessfuly fetched", - OverrideValues: overrideValues, - }, nil -} diff --git a/server/pkg/api/get_store_apps.go b/server/pkg/api/get_store_apps.go deleted file mode 100644 index 45b0fd92..00000000 --- a/server/pkg/api/get_store_apps.go +++ /dev/null @@ -1,90 +0,0 @@ -package api - -import ( - "context" - "encoding/hex" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" -) - -func (s *Server) GetStoreApps(ctx context.Context, request *serverpb.GetStoreAppsRequest) ( - *serverpb.GetStoreAppsResponse, error) { - - _, span := opentelemetry.GetTracer("GetStoreAppsRequest"). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - orgId, err := validateOrgWithArgs(ctx) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.GetStoreAppsResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Get store apps request recieved, [org: %s]", orgId) - - cluster, err := s.serverStore.GetClusterForOrg(orgId) - if err != nil { - s.log.Errorf("failed to get clusterID for org %s, %v", orgId, err) - return &serverpb.GetStoreAppsResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed get cluster details", - }, err - } - - configs, err := s.serverStore.GetAppsFromStore() - if err != nil { - s.log.Errorf("failed to get app config's from store, %v", err) - return &serverpb.GetStoreAppsResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to get app config's from store", - }, nil - } - - clusterGlobalValues, err := s.getClusterGlobalValues(orgId, cluster.ClusterID) - if err != nil { - s.log.Errorf("failed to get cluster global values, %v", err) - return &serverpb.GetStoreAppsResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to fetch cluster global values values", - }, nil - } - - appsData := []*serverpb.StoreAppsData{} - for _, config := range configs { - overrideValues, err := s.deriveTemplateOverrideValues(config.OverrideValues, clusterGlobalValues) - if err != nil { - s.log.Errorf("failed to update overrided store app values for app %s, %v", config.ReleaseName, err) - } - - decodedIconBytes, _ := hex.DecodeString(config.Icon) - appsData = append(appsData, &serverpb.StoreAppsData{ - AppConfigs: &serverpb.StoreAppConfig{ - AppName: config.Name, - Version: config.Version, - Category: config.Category, - Description: config.Description, - ChartName: config.ChartName, - RepoName: config.RepoName, - RepoURL: config.RepoURL, - Namespace: config.Namespace, - CreateNamespace: config.CreateNamespace, - PrivilegedNamespace: config.PrivilegedNamespace, - Icon: decodedIconBytes, - LaunchURL: config.LaunchURL, - LaunchUIDescription: config.LaunchUIDescription, - ReleaseName: config.ReleaseName, - }, - OverrideValues: overrideValues, - }) - } - - s.log.Infof("Fetched %d store apps, [org: %s]", len(appsData), orgId) - return &serverpb.GetStoreAppsResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app config's are sucessfuly fetched from store", - Data: appsData, - }, nil -} diff --git a/server/pkg/api/undeploy_store_app.go b/server/pkg/api/undeploy_store_app.go deleted file mode 100644 index b8874be9..00000000 --- a/server/pkg/api/undeploy_store_app.go +++ /dev/null @@ -1,61 +0,0 @@ -package api - -import ( - "context" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/agentpb" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) UnDeployStoreApp(ctx context.Context, request *serverpb.UnDeployStoreAppRequest) ( - *serverpb.UnDeployStoreAppResponse, error) { - - _, span := opentelemetry.GetTracer(request.ClusterID). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) - span.SetAttributes(attribute.String("Release Name", request.ReleaseName)) - orgId, err := validateOrgWithArgs(ctx, request.ClusterID, request.ReleaseName) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.UnDeployStoreAppResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - - s.log.Infof("UnDeploy store app %s request for cluster %s recieved, [org: %s]", - request.ReleaseName, request.ClusterID, orgId) - - agent, err := s.agentHandeler.GetAgent(orgId, request.ClusterID) - if err != nil { - s.log.Errorf("failed to initialize agent, %v", err) - return &serverpb.UnDeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to undeploy the app", - }, nil - } - - req := &agentpb.UnInstallAppRequest{ - ReleaseName: request.ReleaseName, - } - resp, err := agent.GetClient().UnInstallApp(ctx, req) - if err != nil { - s.log.Errorf("failed to undeploy app, %v", err) - return &serverpb.UnDeployStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to undeploy the app", - }, nil - } - - s.log.Infof("UnDeploy store app %s request request triggered for cluster %s, [org: %s]", - request.ReleaseName, request.ClusterID, orgId) - - return &serverpb.UnDeployStoreAppResponse{ - Status: serverpb.StatusCode(resp.Status), - StatusMessage: resp.StatusMessage, - }, nil -} diff --git a/server/pkg/api/update_store_app.go b/server/pkg/api/update_store_app.go deleted file mode 100644 index 5bed5ef8..00000000 --- a/server/pkg/api/update_store_app.go +++ /dev/null @@ -1,66 +0,0 @@ -package api - -import ( - "context" - "encoding/hex" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "github.com/kube-tarian/kad/server/pkg/types" - "go.opentelemetry.io/otel/attribute" -) - -func (s *Server) UpdateStoreApp(ctx context.Context, request *serverpb.UpdateStoreAppRequest) ( - *serverpb.UpdateStoreAppRsponse, error) { - - _, span := opentelemetry.GetTracer(request.AppConfig.AppName). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("App Name", request.AppConfig.AppName)) - - _, err := validateOrgWithArgs(ctx, request.AppConfig.AppName, request.AppConfig.Version) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.UpdateStoreAppRsponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - s.log.Infof("Update store app [%s:%s] request recieved", request.AppConfig.AppName, request.AppConfig.Version) - - //TODO check store app exist in DB - config := &types.StoreAppConfig{ - ReleaseName: request.AppConfig.ReleaseName, - AppName: request.AppConfig.AppName, - Version: request.AppConfig.Version, - Category: request.AppConfig.Category, - Description: request.AppConfig.Description, - ChartName: request.AppConfig.ChartName, - RepoName: request.AppConfig.RepoName, - RepoURL: request.AppConfig.RepoURL, - Namespace: request.AppConfig.Namespace, - CreateNamespace: request.AppConfig.CreateNamespace, - PrivilegedNamespace: request.AppConfig.PrivilegedNamespace, - Icon: hex.EncodeToString(request.AppConfig.Icon), - LaunchURL: request.AppConfig.LaunchURL, - LaunchUIDescription: request.AppConfig.LaunchUIDescription, - OverrideValues: request.AppValues.OverrideValues, - LaunchUIValues: request.AppValues.LaunchUIValues, - TemplateValues: request.AppValues.TemplateValues, - } - - if err := s.serverStore.AddOrUpdateStoreApp(config); err != nil { - s.log.Errorf("failed to update app config in store, %v", err) - return &serverpb.UpdateStoreAppRsponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to update app config in store", - }, nil - } - - s.log.Infof("Update store app [%s:%s] request successful", request.AppConfig.AppName, request.AppConfig.Version) - return &serverpb.UpdateStoreAppRsponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app config is sucessfuly updated", - }, nil -} diff --git a/server/pkg/api/upgrade_store_app.go b/server/pkg/api/upgrade_store_app.go deleted file mode 100644 index 8e75291a..00000000 --- a/server/pkg/api/upgrade_store_app.go +++ /dev/null @@ -1,112 +0,0 @@ -package api - -import ( - "context" - "encoding/hex" - - "github.com/kube-tarian/kad/server/pkg/opentelemetry" - "github.com/kube-tarian/kad/server/pkg/pb/agentpb" - "github.com/kube-tarian/kad/server/pkg/pb/serverpb" - "go.opentelemetry.io/otel/attribute" - "gopkg.in/yaml.v2" -) - -func (s *Server) UpgradeStoreApp(ctx context.Context, request *serverpb.UpgradeStoreAppRequest) ( - *serverpb.UpgradeStoreAppResponse, error) { - - _, span := opentelemetry.GetTracer(request.ClusterID). - Start(opentelemetry.BuildContext(ctx), "CaptenServer") - defer span.End() - - span.SetAttributes(attribute.String("Cluster ID", request.ClusterID)) - span.SetAttributes(attribute.String("App Name", request.AppName)) - - orgId, err := validateOrgWithArgs(ctx, request.ClusterID, request.AppName, request.Version) - if err != nil { - s.log.Infof("request validation failed", err) - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_INVALID_ARGUMENT, - StatusMessage: "request validation failed", - }, nil - } - - s.log.Infof("Upgrade store app [%s:%s] request for cluster %s recieved, [org: %s]", - request.AppName, request.Version, request.ClusterID, orgId) - - config, err := s.serverStore.GetAppFromStore(request.AppName, request.Version) - if err != nil { - s.log.Errorf("failed to get store app values, %v", err) - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to find store app values", - }, nil - } - - marshaledOverride, err := yaml.Marshal(config.OverrideValues) - if err != nil { - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to find store app values", - }, nil - } - - marshaledLaunchUi, err := yaml.Marshal(config.LaunchUIValues) - if err != nil { - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to find store app values", - }, nil - } - - decodedIconBytes, _ := hex.DecodeString(config.Icon) - req := &agentpb.UpgradeAppRequest{ - AppConfig: &agentpb.AppConfig{ - AppName: config.Name, - Version: config.Version, - ReleaseName: config.ReleaseName, - Category: config.Category, - Description: config.Description, - ChartName: config.ChartName, - RepoName: config.RepoName, - RepoURL: config.RepoURL, - Namespace: config.Namespace, - CreateNamespace: config.CreateNamespace, - PrivilegedNamespace: config.PrivilegedNamespace, - Icon: decodedIconBytes, - LaunchURL: config.LaunchURL, - LaunchUIDescription: config.LaunchUIDescription, - DefualtApp: false, - }, - AppValues: &agentpb.AppValues{ - OverrideValues: request.OverrideValues, - LaunchUIValues: decodeBase64StringToBytes(string(marshaledLaunchUi)), - TemplateValues: decodeBase64StringToBytes(string(marshaledOverride)), - }, - } - - agent, err := s.agentHandeler.GetAgent(orgId, request.ClusterID) - if err != nil { - s.log.Errorf("failed to initialize agent, %v", err) - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to deploy the app", - }, nil - } - - _, err = agent.GetClient().UpgradeApp(ctx, req) - if err != nil { - s.log.Errorf("failed to deploy app, %v", err) - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_INTERNRAL_ERROR, - StatusMessage: "failed to deploy the app", - }, nil - } - - s.log.Infof("Upgrade store app [%s:%s] request request triggered for cluster %s, [org: %s]", - request.AppName, request.Version, request.ClusterID, orgId) - - return &serverpb.UpgradeStoreAppResponse{ - Status: serverpb.StatusCode_OK, - StatusMessage: "app is successfully deployed", - }, nil -} From cbc360d7b70339392610e5295324168cec5d69fa Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Wed, 8 May 2024 16:21:40 +0530 Subject: [PATCH 6/7] Updated the rpcs with opentelemetry --- server/go.mod | 7 ------- server/pkg/api/get_cluster.go | 4 ++++ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/server/go.mod b/server/go.mod index 295274d8..bfdd860d 100644 --- a/server/go.mod +++ b/server/go.mod @@ -5,10 +5,7 @@ go 1.21 require ( github.com/go-git/go-git/v5 v5.11.0 github.com/gocql/gocql v1.3.1 -<<<<<<< HEAD github.com/google/uuid v1.6.0 -======= ->>>>>>> main github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 github.com/intelops/go-common v1.0.20 github.com/kelseyhightower/envconfig v1.4.0 @@ -46,11 +43,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect -<<<<<<< HEAD github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect -======= - github.com/google/uuid v1.4.0 // indirect ->>>>>>> main github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect diff --git a/server/pkg/api/get_cluster.go b/server/pkg/api/get_cluster.go index 7f6d8e8f..27bf3de8 100644 --- a/server/pkg/api/get_cluster.go +++ b/server/pkg/api/get_cluster.go @@ -71,6 +71,10 @@ func (s *Server) GetClusterDetails(ctx context.Context, request *serverpb.GetClu func (s *Server) GetCluster(ctx context.Context, request *serverpb.GetClusterRequest) ( *serverpb.GetClusterResponse, error) { + _, span := opentelemetry.GetTracer("Get Cluster"). + Start(opentelemetry.BuildContext(ctx), "CaptenServer") + defer span.End() + orgId, err := validateOrgWithArgs(ctx) if err != nil { s.log.Infof("request validation failed", err) From 8fa5b0e8d8e3309c20b8e0424aaa46fdc0c7aa70 Mon Sep 17 00:00:00 2001 From: ShifnaZarnaz Date: Tue, 14 May 2024 22:42:29 +0530 Subject: [PATCH 7/7] Instrumented opentelemetry in capten server --- server/cmd/server/main.go | 42 ++++++--------------------------------- 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/server/cmd/server/main.go b/server/cmd/server/main.go index 8898dee6..22d84830 100644 --- a/server/cmd/server/main.go +++ b/server/cmd/server/main.go @@ -95,38 +95,29 @@ func main() { log.Fatal("failed to listen: ", err) } - //grpc.NewServer( - // grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor()), - // grpc.StreamInterceptor(otelgrpc.StreamServerInterceptor())) - // authInterceptor := grpc.UnaryInterceptor(rpcServer.AuthInterceptor) - var grpcServer *grpc.Server if (cfg.OptelEnabled) && (cfg.AuthEnabled) { - log.Info("OPtel Enabled", cfg.OptelEnabled) log.Info("Server Authentication and opentelemetry is enabled") interceptor := CombineInterceptors(rpcServer.AuthInterceptor, otelgrpc.UnaryServerInterceptor()) grpcServer = grpc.NewServer(grpc.UnaryInterceptor(interceptor)) - // log.Info("Server Authentication disabled but opentelemetry instrumented") - - // grpcServer = grpc.NewServer() } else if cfg.OptelEnabled { - log.Info("OPtel Enabled", cfg.OptelEnabled) - log.Info("Opentelemetry is enabled") + + log.Info("Opentelemetry is enabled and Server Authentication disabled") grpcServer = grpc.NewServer(grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor())) } else if cfg.AuthEnabled { - log.Info("OPtel Enabled", cfg.OptelEnabled) - log.Info("Server Authentication enabled") + + log.Info("Server Authentication enabled and opentelemetry disabled") grpcServer = grpc.NewServer(grpc.UnaryInterceptor(rpcServer.AuthInterceptor)) } else { - log.Info("OPtel Enabled", cfg.OptelEnabled) - log.Info("Server Authentication disabled") + + log.Info("Server Authentication and opentelemetry instrumentation disabled") grpcServer = grpc.NewServer() } @@ -169,24 +160,3 @@ func chainedInterceptor(a grpc.UnaryServerInterceptor, b grpc.UnaryHandler) grpc return a(ctx, req, nil, b) } } - -// CombineInterceptors combines multiple unary interceptors into one -// func CombineInterceptors(interceptors ...grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor { -// return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { -// // Chain the interceptors -// chained := handler -// for i := len(interceptors) - 1; i >= 0; i-- { -// chained = chainedInterceptor(interceptors[i], info, chained) -// } -// // Call the combined interceptors -// return chained(ctx, req) -// } -// } - -// // chainedInterceptor chains two unary interceptors together -// func chainedInterceptor(a grpc.UnaryServerInterceptor, info *grpc.UnaryServerInfo, b grpc.UnaryHandler) grpc.UnaryHandler { -// return func(ctx context.Context, req interface{}) (interface{}, error) { -// // Call the first interceptor, passing the next handler as the next interceptor -// return a(ctx, req, info, b) -// } -// }