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/cmd/server/main.go b/server/cmd/server/main.go index f0514285..22d84830 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) @@ -85,11 +96,29 @@ func main() { } var grpcServer *grpc.Server - if cfg.AuthEnabled { - log.Info("Server Authentication enabled") + 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)) + + } else if cfg.OptelEnabled { + + log.Info("Opentelemetry is enabled and Server Authentication disabled") + + grpcServer = grpc.NewServer(grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor())) + + } else if cfg.AuthEnabled { + + log.Info("Server Authentication enabled and opentelemetry disabled") + grpcServer = grpc.NewServer(grpc.UnaryInterceptor(rpcServer.AuthInterceptor)) } else { - log.Info("Server Authentication disabled") + + log.Info("Server Authentication and opentelemetry instrumentation disabled") + grpcServer = grpc.NewServer() } @@ -110,3 +139,24 @@ 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) + } +} diff --git a/server/go.mod b/server/go.mod index 1c36b089..bfdd860d 100644 --- a/server/go.mod +++ b/server/go.mod @@ -5,24 +5,28 @@ 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.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 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 @@ -34,10 +38,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/google/uuid v1.4.0 // 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 @@ -70,15 +76,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 1253681b..bfa1547f 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= @@ -199,13 +208,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= @@ -213,14 +238,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= @@ -229,15 +255,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= @@ -260,20 +288,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= @@ -290,16 +319,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/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/get_cluster.go b/server/pkg/api/get_cluster.go index e21f80ea..27bf3de8 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) @@ -65,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) 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_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/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/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..f3f934c5 --- /dev/null +++ b/server/pkg/opentelemetry/opentelemetry.go @@ -0,0 +1,110 @@ +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.awsagent.optimizor.app:80"` + IsInsecure bool `envconfig:"IS_OPTEL_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() + logger.Info("Getting optel config", config.CollectorURL, config.IsEnabled) + 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 +}