diff --git a/agent/container/main.go b/agent/container/main.go index 56b6958a..71a9fc1f 100755 --- a/agent/container/main.go +++ b/agent/container/main.go @@ -14,16 +14,25 @@ import ( func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) - tp, err := opentelemetry.InitTracer() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { - log.Fatal(err) + log.Println("Unable to read open telemetry configurations") } - defer func() { - if err := tp.Shutdown(context.Background()); err != nil { - log.Printf("Error shutting down tracer provider: %v", err) + if opentelconfig.IsEnabled { + tp, err := opentelemetry.InitTracer() + if err != nil { + log.Fatal(err) } - }() - + defer func() { + if err := tp.Shutdown(context.Background()); err != nil { + log.Printf("Error shutting down tracer provider: %v", err) + } + }() + } else { + log.Println("OpenTelemetry is disabled. Tracing will not be enabled.") + } + app := application.New() go app.GithubContainerWatch() go app.Start() diff --git a/agent/container/pkg/application/application.go b/agent/container/pkg/application/application.go index 7cabbbcd..bb43245f 100755 --- a/agent/container/pkg/application/application.go +++ b/agent/container/pkg/application/application.go @@ -46,13 +46,15 @@ func New() *Application { r := gin.Default() - config, err := opentelemetry.GetConfigurations() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { log.Println("Unable to read open telemetry configurations") } + if opentelconfig.IsEnabled { + r.Use(otelgin.Middleware(opentelconfig.ServiceName)) + } - r.Use(otelgin.Middleware(config.ServiceName)) - apiServer.BindRequest(r) httpServer := &http.Server{ diff --git a/agent/container/pkg/application/handlers.go b/agent/container/pkg/application/handlers.go index cca3a95d..a86e703e 100755 --- a/agent/container/pkg/application/handlers.go +++ b/agent/container/pkg/application/handlers.go @@ -1,26 +1,15 @@ package application import ( - "context" "io" "log" "net/http" - - "github.com/intelops/kubviz/pkg/opentelemetry" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" ) -//githubHandler handles the github webhooks post requests. +// githubHandler handles the github webhooks post requests. func (app *Application) localRegistryHandler(w http.ResponseWriter, r *http.Request) { - ctx:=context.Background() - tracer := otel.Tracer("container-gitlab") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "localRegistryHandler") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - event, err := io.ReadAll(r.Body) if err != nil { log.Printf("Event body read failed: %v", err) diff --git a/agent/container/pkg/clients/nats_client.go b/agent/container/pkg/clients/nats_client.go index d087bb6c..cd8188cd 100755 --- a/agent/container/pkg/clients/nats_client.go +++ b/agent/container/pkg/clients/nats_client.go @@ -1,16 +1,12 @@ package clients import ( - "context" "fmt" "log" "time" "github.com/intelops/kubviz/agent/container/pkg/config" "github.com/intelops/kubviz/pkg/mtlsnats" - "github.com/intelops/kubviz/pkg/opentelemetry" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "github.com/nats-io/nats.go" ) @@ -143,12 +139,6 @@ func (n *NATSContext) Close() { // An error is returned if the publishing process fails, such as if the connection is lost or if there are issues with the JetStream. func (n *NATSContext) Publish(event []byte, repo string) error { - ctx := context.Background() - tracer := otel.Tracer("container-nats-client") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "ContainerPublish") - span.SetAttributes(attribute.String("repo-name", repo)) - defer span.End() - msg := nats.NewMsg(eventSubject) msg.Data = event msg.Header.Set("REPO_NAME", repo) diff --git a/agent/container/pkg/handler/api_handler.go b/agent/container/pkg/handler/api_handler.go index 0e6bdd01..b16efd90 100755 --- a/agent/container/pkg/handler/api_handler.go +++ b/agent/container/pkg/handler/api_handler.go @@ -33,13 +33,15 @@ func NewAPIHandler(conn *clients.NATSContext) (*APIHandler, error) { func (ah *APIHandler) BindRequest(r *gin.Engine) { - config, err := opentelemetry.GetConfigurations() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { log.Println("Unable to read open telemetry configurations") } + if opentelconfig.IsEnabled { + r.Use(otelgin.Middleware(opentelconfig.ServiceName)) + } - r.Use(otelgin.Middleware(config.ServiceName)) - apiGroup := r.Group("/") { apiGroup.GET("/api-docs", ah.GetApiDocs) diff --git a/agent/container/pkg/handler/azure_container.go b/agent/container/pkg/handler/azure_container.go index 5e881703..ee28fad4 100644 --- a/agent/container/pkg/handler/azure_container.go +++ b/agent/container/pkg/handler/azure_container.go @@ -9,6 +9,7 @@ import ( "github.com/gin-gonic/gin" "github.com/intelops/kubviz/model" + "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" ) @@ -22,11 +23,18 @@ var ErrInvalidPayload = errors.New("invalid or malformed Azure Container Registr // If the payload is invalid or the publishing process fails, an error response is returned. func (ah *APIHandler) PostEventAzureContainer(c *gin.Context) { - tracer := otel.Tracer("azure-container") - _, span := tracer.Start(c.Request.Context(), "PostEventAzureContainer") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("azure-container") + _, span := tracer.Start(c.Request.Context(), "PostEventAzureContainer") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } + defer func() { _, _ = io.Copy(io.Discard, c.Request.Body) _ = c.Request.Body.Close() diff --git a/agent/container/pkg/handler/docker_event_dockerhub.go b/agent/container/pkg/handler/docker_event_dockerhub.go index 9066c947..f4e99afd 100644 --- a/agent/container/pkg/handler/docker_event_dockerhub.go +++ b/agent/container/pkg/handler/docker_event_dockerhub.go @@ -7,6 +7,7 @@ import ( "net/http" "github.com/gin-gonic/gin" + "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" ) @@ -18,12 +19,18 @@ var ( ) func (ah *APIHandler) PostEventDockerHub(c *gin.Context) { + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("dockerhub-container") + _, span := tracer.Start(c.Request.Context(), "PostEventDockerHub") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } - tracer := otel.Tracer("dockerhub-container") - _, span := tracer.Start(c.Request.Context(), "PostEventDockerHub") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - defer func() { _, _ = io.Copy(io.Discard, c.Request.Body) _ = c.Request.Body.Close() diff --git a/agent/container/pkg/handler/jfrog_container.go b/agent/container/pkg/handler/jfrog_container.go index 77b0451f..ecc0a753 100644 --- a/agent/container/pkg/handler/jfrog_container.go +++ b/agent/container/pkg/handler/jfrog_container.go @@ -9,6 +9,7 @@ import ( "github.com/gin-gonic/gin" "github.com/intelops/kubviz/model" + "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" ) @@ -17,11 +18,18 @@ var ErrInvalidPayloads = errors.New("invalid or malformed jfrog Container Regist func (ah *APIHandler) PostEventJfrogContainer(c *gin.Context) { - tracer := otel.Tracer("jfrog-container") - _, span := tracer.Start(c.Request.Context(), "PostEventJfrogContainer") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("jfrog-container") + _, span := tracer.Start(c.Request.Context(), "PostEventJfrogContainer") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } + defer func() { _, _ = io.Copy(io.Discard, c.Request.Body) _ = c.Request.Body.Close() diff --git a/agent/container/pkg/handler/quay_handler.go b/agent/container/pkg/handler/quay_handler.go index b675658f..26c8545a 100644 --- a/agent/container/pkg/handler/quay_handler.go +++ b/agent/container/pkg/handler/quay_handler.go @@ -8,17 +8,25 @@ import ( "github.com/gin-gonic/gin" "github.com/intelops/kubviz/model" + "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" ) func (ah *APIHandler) PostEventQuayContainer(c *gin.Context) { - tracer := otel.Tracer("quay-container") - _, span := tracer.Start(c.Request.Context(), "PostEventQuayContainer") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("quay-container") + _, span := tracer.Start(c.Request.Context(), "PostEventQuayContainer") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } + defer func() { _, _ = io.Copy(io.Discard, c.Request.Body) _ = c.Request.Body.Close() @@ -45,4 +53,4 @@ func (ah *APIHandler) PostEventQuayContainer(c *gin.Context) { return } c.Status(http.StatusOK) -} \ No newline at end of file +} diff --git a/agent/git/main.go b/agent/git/main.go index c1d22c27..4dae15a1 100644 --- a/agent/git/main.go +++ b/agent/git/main.go @@ -22,15 +22,24 @@ func main() { log.Fatalf("Could not parse env Config: %v", err) } - tp, err := opentelemetry.InitTracer() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { - log.Fatal(err) + log.Println("Unable to read open telemetry configurations") } - defer func() { - if err := tp.Shutdown(context.Background()); err != nil { - log.Printf("Error shutting down tracer provider: %v", err) + if opentelconfig.IsEnabled { + tp, err := opentelemetry.InitTracer() + if err != nil { + log.Fatal(err) } - }() + defer func() { + if err := tp.Shutdown(context.Background()); err != nil { + log.Printf("Error shutting down tracer provider: %v", err) + } + }() + } else { + log.Println("OpenTelemetry is disabled. Tracing will not be enabled.") + } // Connect to NATS natsContext, err := clients.NewNATSContext(cfg) diff --git a/agent/git/pkg/application/application.go b/agent/git/pkg/application/application.go index 0ea3b17e..f7298af7 100644 --- a/agent/git/pkg/application/application.go +++ b/agent/git/pkg/application/application.go @@ -44,13 +44,15 @@ func New(conf *config.Config, conn *clients.NATSContext) *Application { func (app *Application) Routes() *gin.Engine { router := gin.New() - config, err := opentelemetry.GetConfigurations() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { log.Println("Unable to read open telemetry configurations") } + if opentelconfig.IsEnabled { + router.Use(otelgin.Middleware(opentelconfig.ServiceName)) + } - router.Use(otelgin.Middleware(config.ServiceName)) - api.RegisterHandlers(router, app) return router } diff --git a/agent/git/pkg/application/handlers.go b/agent/git/pkg/application/handlers.go index cb2c7cfe..0239661c 100644 --- a/agent/git/pkg/application/handlers.go +++ b/agent/git/pkg/application/handlers.go @@ -9,6 +9,7 @@ import ( "github.com/intelops/kubviz/agent/git/api" "github.com/intelops/kubviz/gitmodels/azuremodel" "github.com/intelops/kubviz/model" + "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" ) @@ -16,11 +17,18 @@ import ( func (app *Application) PostGitea(c *gin.Context) { log.Println("gitea handler called...") - tracer := otel.Tracer("gitea-git") - _, span := tracer.Start(c.Request.Context(), "PostGitea") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("gitea-git") + _, span := tracer.Start(c.Request.Context(), "PostGitea") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } + defer log.Println("gitea handler exited...") event := c.Request.Header.Get(string(model.GiteaHeader)) @@ -39,10 +47,17 @@ func (app *Application) PostGitea(c *gin.Context) { func (app *Application) PostAzure(c *gin.Context) { log.Println("azure handler called...") - tracer := otel.Tracer("azure-git") - _, span := tracer.Start(c.Request.Context(), "PostAzure") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("azure-git") + _, span := tracer.Start(c.Request.Context(), "PostAzure") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } defer log.Println("azure handler exited...") @@ -73,13 +88,20 @@ func (app *Application) PostAzure(c *gin.Context) { func (app *Application) PostGithub(c *gin.Context) { log.Println("github handler called...") - tracer := otel.Tracer("github-git") - _, span := tracer.Start(c.Request.Context(), "PostGithub") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("github-git") + _, span := tracer.Start(c.Request.Context(), "PostGithub") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } defer log.Println("github handler exited...") - + event := c.Request.Header.Get(string(model.GithubHeader)) if len(event) == 0 { log.Println("error getting the github event from header") @@ -100,10 +122,17 @@ func (app *Application) PostGithub(c *gin.Context) { func (app *Application) PostGitlab(c *gin.Context) { log.Println("gitlab handler called...") - tracer := otel.Tracer("gitlab-git") - _, span := tracer.Start(c.Request.Context(), "PostGitlab") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("gitlab-git") + _, span := tracer.Start(c.Request.Context(), "PostGitlab") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } defer log.Println("gitlab handler exited...") @@ -127,11 +156,18 @@ func (app *Application) PostGitlab(c *gin.Context) { func (app *Application) PostBitbucket(c *gin.Context) { log.Println("bitbucket handler called...") - tracer := otel.Tracer("bitbucket-git") - _, span := tracer.Start(c.Request.Context(), "PostBitbucket") - span.SetAttributes(attribute.String("http.method", "POST")) - defer span.End() - + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("bitbucket-git") + _, span := tracer.Start(c.Request.Context(), "PostBitbucket") + span.SetAttributes(attribute.String("http.method", "POST")) + defer span.End() + } + defer log.Println("bitbucket handler exited...") event := c.Request.Header.Get(string(model.BitBucketHeader)) diff --git a/agent/git/pkg/clients/nats_client.go b/agent/git/pkg/clients/nats_client.go index 7d6830b4..87207423 100644 --- a/agent/git/pkg/clients/nats_client.go +++ b/agent/git/pkg/clients/nats_client.go @@ -1,15 +1,11 @@ package clients import ( - "context" "fmt" "github.com/intelops/kubviz/agent/git/pkg/config" "github.com/intelops/kubviz/model" "github.com/intelops/kubviz/pkg/mtlsnats" - "github.com/intelops/kubviz/pkg/opentelemetry" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "log" "time" @@ -123,12 +119,6 @@ func (n *NATSContext) Close() { func (n *NATSContext) Publish(metric []byte, repo string, eventkey model.EventKey, eventvalue model.EventValue) error { - ctx := context.Background() - tracer := otel.Tracer("git-nats-client") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "GitPublish") - span.SetAttributes(attribute.String("repo-name", repo)) - defer span.End() - msg := nats.NewMsg(eventSubject) msg.Data = metric msg.Header.Set("GitProvider", repo) diff --git a/agent/kubviz/k8smetrics_agent.go b/agent/kubviz/k8smetrics_agent.go index 068360eb..709e90bc 100644 --- a/agent/kubviz/k8smetrics_agent.go +++ b/agent/kubviz/k8smetrics_agent.go @@ -121,15 +121,23 @@ func main() { clientset = events.GetK8sClient(config) } - tp, err := opentelemetry.InitTracer() + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { - log.Fatal(err) + log.Println("Unable to read open telemetry configurations") } - defer func() { - if err := tp.Shutdown(context.Background()); err != nil { - log.Printf("Error shutting down tracer provider: %v", err) + if opentelconfig.IsEnabled { + tp, err := opentelemetry.InitTracer() + if err != nil { + log.Fatal(err) } - }() + defer func() { + if err := tp.Shutdown(context.Background()); err != nil { + log.Printf("Error shutting down tracer provider: %v", err) + } + }() + } else { + log.Println("OpenTelemetry is disabled. Tracing will not be enabled.") + } go events.PublishMetrics(clientset, js, clusterMetricsChan) if cfg.KuberHealthyEnable { diff --git a/agent/kubviz/plugins/events/event_metrics_utils.go b/agent/kubviz/plugins/events/event_metrics_utils.go index 17ef114f..2590b01f 100644 --- a/agent/kubviz/plugins/events/event_metrics_utils.go +++ b/agent/kubviz/plugins/events/event_metrics_utils.go @@ -16,7 +16,6 @@ import ( "github.com/intelops/kubviz/pkg/opentelemetry" "github.com/nats-io/nats.go" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" @@ -31,23 +30,23 @@ var ClusterName string = os.Getenv("CLUSTER_NAME") // with subject "METRICS.created" func PublishMetrics(clientset *kubernetes.Clientset, js nats.JetStreamContext, errCh chan error) { - ctx := context.Background() - tracer := otel.Tracer("kubviz-publish-metrics") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "publishMetrics") - span.SetAttributes(attribute.String("kubviz-agent", "publish-metrics")) - defer span.End() - watchK8sEvents(clientset, js) errCh <- nil } func publishK8sMetrics(id string, mtype string, mdata *v1.Event, js nats.JetStreamContext, imageName string) (bool, error) { - ctx := context.Background() - tracer := otel.Tracer("kubviz-publish-k8smetrics") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "publishK8sMetrics") - span.SetAttributes(attribute.String("kubviz-agent", "publish-k8smetrics")) - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("kubviz-publish-k8smetrics") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "publishK8sMetrics") + defer span.End() + } metrics := model.Metrics{ ID: id, @@ -166,12 +165,6 @@ func LogErr(err error) { } func watchK8sEvents(clientset *kubernetes.Clientset, js nats.JetStreamContext) { - ctx := context.Background() - tracer := otel.Tracer("kubviz-watch-k8sevents") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "watchK8sEvents") - span.SetAttributes(attribute.String("kubviz-agent", "watch-k8sevents")) - defer span.End() - watchlist := cache.NewListWatchFromClient( clientset.CoreV1().RESTClient(), "events", diff --git a/agent/kubviz/plugins/ketall/ketall.go b/agent/kubviz/plugins/ketall/ketall.go index 8d91b6ab..89af98a3 100644 --- a/agent/kubviz/plugins/ketall/ketall.go +++ b/agent/kubviz/plugins/ketall/ketall.go @@ -9,7 +9,6 @@ import ( "github.com/intelops/kubviz/constants" "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "github.com/intelops/kubviz/model" "github.com/nats-io/nats.go" @@ -23,6 +22,20 @@ import ( var ClusterName string = os.Getenv("CLUSTER_NAME") func PublishAllResources(result model.Resource, js nats.JetStreamContext) error { + + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + + ctx := context.Background() + tracer := otel.Tracer("ketall") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishAllResources") + defer span.End() + } + metrics := result metrics.ClusterName = ClusterName metricsJson, _ := json.Marshal(metrics) @@ -36,12 +49,6 @@ func PublishAllResources(result model.Resource, js nats.JetStreamContext) error func GetAllResources(config *rest.Config, js nats.JetStreamContext) error { - ctx := context.Background() - tracer := otel.Tracer("ketall") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "GetAllResources") - span.SetAttributes(attribute.String("ketall-plugin-agent", "ketall-output")) - defer span.End() - // TODO: upto this uncomment for production // Create a new discovery client to discover all resources in the cluster dc := discovery.NewDiscoveryClientForConfigOrDie(config) diff --git a/agent/kubviz/plugins/kubepreupgrade/kubePreUpgrade.go b/agent/kubviz/plugins/kubepreupgrade/kubePreUpgrade.go index 4fb00b35..a251a086 100644 --- a/agent/kubviz/plugins/kubepreupgrade/kubePreUpgrade.go +++ b/agent/kubviz/plugins/kubepreupgrade/kubePreUpgrade.go @@ -12,7 +12,6 @@ import ( "github.com/intelops/kubviz/constants" "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -60,6 +59,19 @@ var ( var result *model.Result func publishK8sDepricated_Deleted_Api(result *model.Result, js nats.JetStreamContext) error { + + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("kubepreupgrade") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "publishK8sDepricated_Deleted_Api") + defer span.End() + } + for _, deprecatedAPI := range result.DeprecatedAPIs { deprecatedAPI.ClusterName = ClusterName deprecatedAPIJson, _ := json.Marshal(deprecatedAPI) @@ -85,12 +97,6 @@ func publishK8sDepricated_Deleted_Api(result *model.Result, js nats.JetStreamCon func KubePreUpgradeDetector(config *rest.Config, js nats.JetStreamContext) error { - ctx := context.Background() - tracer := otel.Tracer("kubepreupgrade") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "KubePreUpgradeDetector") - span.SetAttributes(attribute.String("kubepug-plugin-agent", "kubepug-output")) - defer span.End() - pvcMountPath := "/mnt/agent/kbz" uniqueDir := fmt.Sprintf("%s/kubepug", pvcMountPath) err := os.MkdirAll(uniqueDir, 0755) diff --git a/agent/kubviz/plugins/kuberhealthy/kuberhealthy.go b/agent/kubviz/plugins/kuberhealthy/kuberhealthy.go index 2ae66ccd..5c6c98ba 100644 --- a/agent/kubviz/plugins/kuberhealthy/kuberhealthy.go +++ b/agent/kubviz/plugins/kuberhealthy/kuberhealthy.go @@ -53,10 +53,17 @@ func pollAndPublishKuberhealthy(url string, js nats.JetStreamContext) error { } func PublishKuberhealthyMetrics(js nats.JetStreamContext, state health.State) error { - ctx := context.Background() - tracer := otel.Tracer("kuberhealthy") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishKuberhealthyMetrics") - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("kuberhealthy") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishKuberhealthyMetrics") + defer span.End() + } metricsJSON, err := json.Marshal(state) if err != nil { diff --git a/agent/kubviz/plugins/kubescore/kube_score.go b/agent/kubviz/plugins/kubescore/kube_score.go index 660aa175..9361a0f4 100644 --- a/agent/kubviz/plugins/kubescore/kube_score.go +++ b/agent/kubviz/plugins/kubescore/kube_score.go @@ -64,11 +64,17 @@ func publish(ns string, js nats.JetStreamContext) error { func publishKubescoreMetrics(report []json_v2.ScoredObject, js nats.JetStreamContext) error { - ctx := context.Background() - tracer := otel.Tracer("kubescore") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "publishKubescoreMetrics") - span.SetAttributes(attribute.String("kubescore-plugin-agent", "kubescore-output")) - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("kubescore") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "publishKubescoreMetrics") + defer span.End() + } metrics := model.KubeScoreRecommendations{ ID: uuid.New().String(), diff --git a/agent/kubviz/plugins/outdated/outdated.go b/agent/kubviz/plugins/outdated/outdated.go index 975c510f..1e643471 100644 --- a/agent/kubviz/plugins/outdated/outdated.go +++ b/agent/kubviz/plugins/outdated/outdated.go @@ -17,7 +17,6 @@ import ( "github.com/intelops/kubviz/constants" "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "github.com/intelops/kubviz/model" "github.com/nats-io/nats.go" @@ -62,11 +61,18 @@ func truncateTagName(tagName string) string { } func PublishOutdatedImages(out model.CheckResultfinal, js nats.JetStreamContext) error { - ctx := context.Background() - tracer := otel.Tracer("outdated-images") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishOutdatedImages") - span.SetAttributes(attribute.String("outdated-plugin-agent", "outdated-output")) - defer span.End() + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + + ctx := context.Background() + tracer := otel.Tracer("outdated-images") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishOutdatedImages") + defer span.End() + } metrics := out metrics.ClusterName = ClusterName diff --git a/agent/kubviz/plugins/rakkess/rakees_agent.go b/agent/kubviz/plugins/rakkess/rakees_agent.go index 93414db3..42d7a58b 100644 --- a/agent/kubviz/plugins/rakkess/rakees_agent.go +++ b/agent/kubviz/plugins/rakkess/rakees_agent.go @@ -12,7 +12,6 @@ import ( "github.com/intelops/kubviz/constants" "github.com/intelops/kubviz/pkg/opentelemetry" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "github.com/intelops/kubviz/model" "github.com/nats-io/nats.go" @@ -39,11 +38,17 @@ func accessToOutcome(access Access) (Outcome, error) { func RakeesOutput(config *rest.Config, js nats.JetStreamContext) error { - ctx := context.Background() - tracer := otel.Tracer("rakees") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RakeesOutput") - span.SetAttributes(attribute.String("rakees-plugin-agent", "rakees-output")) - defer span.End() + // opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("rakees") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RakeesOutput") + defer span.End() + } // Create a new Kubernetes client client, err := kubernetes.NewForConfig(config) diff --git a/agent/kubviz/plugins/trivy/trivy.go b/agent/kubviz/plugins/trivy/trivy.go index 625b405a..c92874d7 100644 --- a/agent/kubviz/plugins/trivy/trivy.go +++ b/agent/kubviz/plugins/trivy/trivy.go @@ -24,12 +24,6 @@ var ClusterName string = os.Getenv("CLUSTER_NAME") func executeCommandTrivy(command string) ([]byte, error) { - ctx := context.Background() - tracer := otel.Tracer("trivy-cluster") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "executeCommandTrivy") - span.SetAttributes(attribute.String("trivy-k8s-agent", "command-running")) - defer span.End() - cmd := exec.Command("/bin/sh", "-c", command) var outc, errc bytes.Buffer cmd.Stdout = &outc @@ -53,11 +47,18 @@ func RunTrivyK8sClusterScan(js nats.JetStreamContext) error { } var report report.ConsolidatedReport - ctx := context.Background() - tracer := otel.Tracer("trivy-cluster") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RunTrivyK8sClusterScan") - span.SetAttributes(attribute.String("cluster-name", report.ClusterName)) - defer span.End() + // opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("trivy-cluster-agent") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RunTrivyK8sClusterScan") + span.SetAttributes(attribute.String("cluster-name", report.ClusterName)) + defer span.End() + } cmdString := fmt.Sprintf("trivy k8s --report summary cluster --exclude-nodes kubernetes.io/arch:amd64 --timeout 60m -f json --cache-dir %s --debug", trivyCacheDir) // clearCacheCmd := "trivy k8s --clear-cache" @@ -95,6 +96,20 @@ func RunTrivyK8sClusterScan(js nats.JetStreamContext) error { } func PublishTrivyK8sReport(report report.ConsolidatedReport, js nats.JetStreamContext) error { + + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("trivy-cluster-agent") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishTrivyK8sReport") + span.SetAttributes(attribute.String("cluster-name", report.ClusterName)) + defer span.End() + } + metrics := model.Trivy{ ID: uuid.New().String(), ClusterName: ClusterName, diff --git a/agent/kubviz/plugins/trivy/trivy_image.go b/agent/kubviz/plugins/trivy/trivy_image.go index c4919a18..1c79fcd5 100644 --- a/agent/kubviz/plugins/trivy/trivy_image.go +++ b/agent/kubviz/plugins/trivy/trivy_image.go @@ -18,7 +18,6 @@ import ( "github.com/nats-io/nats.go" "github.com/pkg/errors" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" @@ -34,11 +33,17 @@ func RunTrivyImageScans(config *rest.Config, js nats.JetStreamContext) error { } // clearCacheCmd := "trivy image --clear-cache" - ctx := context.Background() - tracer := otel.Tracer("trivy-image") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RunTrivyImageScans") - span.SetAttributes(attribute.String("trivy-image-scan-agent", "image-scan")) - defer span.End() + // opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("trivy-image") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RunTrivyImageScans") + defer span.End() + } images, err := ListImages(config) if err != nil { @@ -85,6 +90,19 @@ func RunTrivyImageScans(config *rest.Config, js nats.JetStreamContext) error { } func PublishImageScanReports(report types.Report, js nats.JetStreamContext) error { + + // opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("trivy-image") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishImageScanReports") + defer span.End() + } + metrics := model.TrivyImage{ ID: uuid.New().String(), ClusterName: ClusterName, @@ -100,12 +118,6 @@ func PublishImageScanReports(report types.Report, js nats.JetStreamContext) erro } func executeTrivyImage(command string) ([]byte, error) { - // ctx := context.Background() - // tracer := otel.Tracer("trivy-image") - // _, span := tracer.Start(opentelemetry.BuildContext(ctx), "executeCommandTrivyImage") - // span.SetAttributes(attribute.String("trivy-image-agent", "trivyimage-command-running")) - // defer span.End() - cmd := exec.Command("/bin/sh", "-c", command) var outc, errc bytes.Buffer cmd.Stdout = &outc diff --git a/agent/kubviz/plugins/trivy/trivy_sbom.go b/agent/kubviz/plugins/trivy/trivy_sbom.go index 08358c32..31870aaf 100644 --- a/agent/kubviz/plugins/trivy/trivy_sbom.go +++ b/agent/kubviz/plugins/trivy/trivy_sbom.go @@ -8,58 +8,54 @@ import ( "log" "os" "os/exec" + "strings" - "github.com/aquasecurity/trivy/pkg/sbom/cyclonedx" "github.com/google/uuid" - "github.com/intelops/kubviz/agent/kubviz/plugins/outdated" "github.com/intelops/kubviz/constants" "github.com/intelops/kubviz/model" "github.com/intelops/kubviz/pkg/opentelemetry" "github.com/nats-io/nats.go" + "github.com/pkg/errors" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" ) -func PublishTrivySbomReport(report cyclonedx.BOM, js nats.JetStreamContext) error { - - for _, packageinfo := range report.Packages { - for _, pkg := range packageinfo.Packages { - - metrics := model.SbomData{ - ID: uuid.New().String(), - ClusterName: ClusterName, - ComponentName: report.CycloneDX.Metadata.Component.Name, - PackageName: pkg.Name, - PackageUrl: report.CycloneDX.Metadata.Component.PackageURL, - BomRef: report.CycloneDX.Metadata.Component.BOMRef, - SerialNumber: report.CycloneDX.SerialNumber, - CycloneDxVersion: report.CycloneDX.Version, - BomFormat: report.CycloneDX.BOMFormat, - } - metricsJson, err := json.Marshal(metrics) - if err != nil { - log.Println("error occurred while marshalling sbom metrics in agent", err.Error()) - return err - } - _, err = js.Publish(constants.TRIVY_SBOM_SUBJECT, metricsJson) - if err != nil { - return err - } - log.Printf("Trivy sbom report with Id %v has been published\n", metrics.ID) - } +func PublishTrivySbomReport(report map[string]interface{}, js nats.JetStreamContext) error { + + // opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("trivy-sbom") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "PublishTrivySbomReport") + defer span.End() + } + + metrics := model.Sbom{ + ID: uuid.New().String(), + ClusterName: ClusterName, + Report: report, + } + metricsJson, err := json.Marshal(metrics) + if err != nil { + log.Println("error occurred while marshalling sbom metrics in agent", err.Error()) + return err } + _, err = js.Publish(constants.TRIVY_SBOM_SUBJECT, metricsJson) + if err != nil { + return err + } + log.Printf("Trivy sbom report with Id %v has been published\n", metrics.ID) return nil } func executeCommandSbom(command string) ([]byte, error) { - ctx := context.Background() - tracer := otel.Tracer("trivy-sbom") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "executeCommandSbom") - span.SetAttributes(attribute.String("trivy-sbom-agent", "sbom-command-running")) - defer span.End() - cmd := exec.Command("/bin/sh", "-c", command) var outc, errc bytes.Buffer cmd.Stdout = &outc @@ -81,19 +77,24 @@ func RunTrivySbomScan(config *rest.Config, js nats.JetStreamContext) error { return err } - ctx := context.Background() - tracer := otel.Tracer("trivy-sbom") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RunTrivySbomScan") - span.SetAttributes(attribute.String("sbom", "sbom-creation")) - defer span.End() - - images, err := outdated.ListImages(config) + // opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("trivy-sbom") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "RunTrivySbomScan") + defer span.End() + } + images, err := ListImagesForSbom(config) if err != nil { log.Printf("failed to list images: %v", err) } - for _, image := range images { + for _, image := range images { sbomcmd := fmt.Sprintf("trivy image --format cyclonedx %s --cache-dir %s", image.PullableImage, trivySbomCacheDir) out, err := executeCommandSbom(sbomcmd) @@ -111,13 +112,79 @@ func RunTrivySbomScan(config *rest.Config, js nats.JetStreamContext) error { continue // Move on to the next image } - var report cyclonedx.BOM + var report map[string]interface{} err = json.Unmarshal(out, &report) if err != nil { log.Printf("Error unmarshaling JSON data for image sbom %s: %v", image.PullableImage, err) continue // Move on to the next image in case of an error } - PublishTrivySbomReport(report, js) + err = PublishTrivySbomReport(report, js) + if err != nil { + log.Printf("Error publishing Trivy SBOM report for image %s: %v", image.PullableImage, err) + continue + } } return nil } + +func ListImagesForSbom(config *rest.Config) ([]model.RunningImage, error) { + var err error + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, errors.Wrap(err, "failed to create clientset") + } + ctx := context.Background() + namespaces, err := clientset.CoreV1().Namespaces().List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, errors.Wrap(err, "failed to list namespaces") + } + + runningImages := []model.RunningImage{} + for _, namespace := range namespaces.Items { + pods, err := clientset.CoreV1().Pods(namespace.Name).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, errors.Wrap(err, "failed to list pods") + } + + for _, pod := range pods.Items { + for _, initContainerStatus := range pod.Status.InitContainerStatuses { + pullable := initContainerStatus.ImageID + pullable = strings.TrimPrefix(pullable, "docker-pullable://") + runningImage := model.RunningImage{ + Pod: pod.Name, + Namespace: pod.Namespace, + InitContainer: &initContainerStatus.Name, + Image: initContainerStatus.Image, + PullableImage: pullable, + } + runningImages = append(runningImages, runningImage) + } + + for _, containerStatus := range pod.Status.ContainerStatuses { + pullable := containerStatus.ImageID + pullable = strings.TrimPrefix(pullable, "docker-pullable://") + + runningImage := model.RunningImage{ + Pod: pod.Name, + Namespace: pod.Namespace, + Container: &containerStatus.Name, + Image: containerStatus.Image, + PullableImage: pullable, + } + runningImages = append(runningImages, runningImage) + } + } + } + + // Remove exact duplicates + cleanedImages := []model.RunningImage{} + seenImages := make(map[string]bool) + for _, runningImage := range runningImages { + if !seenImages[runningImage.PullableImage] { + cleanedImages = append(cleanedImages, runningImage) + seenImages[runningImage.PullableImage] = true + } + } + + return cleanedImages, nil +} diff --git a/agent/server/server.go b/agent/server/server.go index 70eb3b3e..578fd31f 100644 --- a/agent/server/server.go +++ b/agent/server/server.go @@ -35,13 +35,14 @@ func EnableProfile(r *gin.Engine) { func StartServer() { r := gin.Default() - config, err := opentelemetry.GetConfigurations() + opentelconfig, err := opentelemetry.GetConfigurations() if err != nil { log.Println("Unable to read open telemetry configurations") } + if opentelconfig.IsEnabled { + r.Use(otelgin.Middleware(opentelconfig.ServiceName)) + } - r.Use(otelgin.Middleware(config.ServiceName)) - EnableProfile(r) log.Fatal(r.Run(":8080")) } diff --git a/client/pkg/application/application.go b/client/pkg/application/application.go index 6d9c3c99..70944f62 100644 --- a/client/pkg/application/application.go +++ b/client/pkg/application/application.go @@ -1,7 +1,6 @@ package application import ( - "context" "database/sql" "log" "os" @@ -12,11 +11,8 @@ import ( "github.com/intelops/kubviz/client/pkg/clients" "github.com/intelops/kubviz/client/pkg/config" "github.com/intelops/kubviz/client/pkg/storage" - "github.com/intelops/kubviz/pkg/opentelemetry" "github.com/kelseyhightower/envconfig" "github.com/robfig/cron/v3" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" ) type Application struct { @@ -52,12 +48,6 @@ const ( func Start() *Application { log.Println("Client Application started...") - ctx := context.Background() - tracer := otel.Tracer("kubviz-client") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "Start") - span.SetAttributes(attribute.String("start-app-client", "application")) - defer span.End() - cfg := &config.Config{} if err := envconfig.Process("", cfg); err != nil { log.Fatalf("Could not parse env Config: %v", err) diff --git a/client/pkg/clickhouse/db_client.go b/client/pkg/clickhouse/db_client.go index 284b359a..b532d7d8 100644 --- a/client/pkg/clickhouse/db_client.go +++ b/client/pkg/clickhouse/db_client.go @@ -12,7 +12,6 @@ import ( "github.com/ClickHouse/clickhouse-go/v2" "github.com/kuberhealthy/kuberhealthy/v2/pkg/health" "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" @@ -38,7 +37,7 @@ type DBInterface interface { InsertGitEvent(string) InsertKubeScoreMetrics(model.KubeScoreRecommendations) InsertTrivyImageMetrics(metrics model.TrivyImage) - InsertTrivySbomMetrics(metrics model.SbomData) + InsertTrivySbomMetrics(metrics model.Sbom) InsertTrivyMetrics(metrics model.Trivy) RetriveKetallEvent() ([]model.Resource, error) RetriveOutdatedEvent() ([]model.CheckResultfinal, error) @@ -139,11 +138,17 @@ func NewDBClient(conf *config.Config) (DBInterface, *sql.DB, error) { func (c *DBClient) InsertContainerEventAzure(pushEvent model.AzureContainerPushEventPayload) { - ctx := context.Background() - tracer := otel.Tracer("insert-container-azure") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventAzure") - span.SetAttributes(attribute.String("container-azure-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-container-azure") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventAzure") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -195,11 +200,17 @@ func (c *DBClient) InsertContainerEventAzure(pushEvent model.AzureContainerPushE func (c *DBClient) InsertContainerEventQuay(pushEvent model.QuayImagePushPayload) { - ctx := context.Background() - tracer := otel.Tracer("insert-container-quay") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventQuay") - span.SetAttributes(attribute.String("container-quay-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-container-quay") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventQuay") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -253,11 +264,17 @@ func (c *DBClient) InsertContainerEventQuay(pushEvent model.QuayImagePushPayload func (c *DBClient) InsertContainerEventJfrog(pushEvent model.JfrogContainerPushEventPayload) { - ctx := context.Background() - tracer := otel.Tracer("insert-container-jfrog") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventJfrog") - span.SetAttributes(attribute.String("container-jfrog-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-container-jfrog") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventJfrog") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -311,11 +328,17 @@ func (c *DBClient) InsertContainerEventJfrog(pushEvent model.JfrogContainerPushE func (c *DBClient) InsertRakeesMetrics(metrics model.RakeesMetrics) { - ctx := context.Background() - tracer := otel.Tracer("insert-rakees-metrics") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertRakeesMetrics") - span.SetAttributes(attribute.String("rakees-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-rakees-metrics") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertRakeesMetrics") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -348,11 +371,17 @@ func (c *DBClient) InsertRakeesMetrics(metrics model.RakeesMetrics) { func (c *DBClient) InsertKetallEvent(metrics model.Resource) { - ctx := context.Background() - tracer := otel.Tracer("insert-ketall-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKetallEvent") - span.SetAttributes(attribute.String("ketall-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-ketall-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKetallEvent") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -383,11 +412,17 @@ func (c *DBClient) InsertKetallEvent(metrics model.Resource) { } func (c *DBClient) InsertKuberhealthyMetrics(metrics health.State) { - ctx := context.Background() - tracer := otel.Tracer("insert-kuberhealthy") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKuberhealthy") - span.SetAttributes(attribute.String("kuberhealthy-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-kuberhealthy") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKuberhealthy") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -437,12 +472,17 @@ func (c *DBClient) InsertKuberhealthyMetrics(metrics health.State) { } func (c *DBClient) InsertOutdatedEvent(metrics model.CheckResultfinal) { - - ctx := context.Background() - tracer := otel.Tracer("insert-outdated-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertOutdatedEvent") - span.SetAttributes(attribute.String("outdated-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-outdated-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertOutdatedEvent") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -475,12 +515,17 @@ func (c *DBClient) InsertOutdatedEvent(metrics model.CheckResultfinal) { } func (c *DBClient) InsertDeprecatedAPI(deprecatedAPI model.DeprecatedAPI) { - - ctx := context.Background() - tracer := otel.Tracer("insert-depricated-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertDeprecatedAPI") - span.SetAttributes(attribute.String("depricated-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-depricated-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertDeprecatedAPI") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -520,12 +565,17 @@ func (c *DBClient) InsertDeprecatedAPI(deprecatedAPI model.DeprecatedAPI) { } func (c *DBClient) InsertDeletedAPI(deletedAPI model.DeletedAPI) { - - ctx := context.Background() - tracer := otel.Tracer("insert-deletedapi") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertDeletedAPI") - span.SetAttributes(attribute.String("deletedapi-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-deletedapi") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertDeletedAPI") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -566,12 +616,17 @@ func (c *DBClient) InsertDeletedAPI(deletedAPI model.DeletedAPI) { } func (c *DBClient) InsertKubvizEvent(metrics model.Metrics) { - - ctx := context.Background() - tracer := otel.Tracer("insert-kubviz-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKubvizEvent") - span.SetAttributes(attribute.String("kubvizevent-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-kubviz-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKubvizEvent") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -610,12 +665,17 @@ func (c *DBClient) InsertKubvizEvent(metrics model.Metrics) { } } func (c *DBClient) InsertGitEvent(event string) { + //opentelemetry ctx := context.Background() - - tracer := otel.Tracer("insert-git-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertGitEvent") - span.SetAttributes(attribute.String("git-client", "insert")) - defer span.End() + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("insert-git-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertGitEvent") + defer span.End() + } batch, err := c.splconn.PrepareBatch(ctx, "INSERT INTO git_json") if err != nil { @@ -631,12 +691,18 @@ func (c *DBClient) InsertGitEvent(event string) { } } func (c *DBClient) InsertContainerEvent(event string) { - ctx := context.Background() - tracer := otel.Tracer("insert-container-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEvent") - span.SetAttributes(attribute.String("container-client", "insert")) - defer span.End() + //opentelemetry + ctx := context.Background() + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("insert-container-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEvent") + defer span.End() + } batch, err := c.splconn.PrepareBatch(ctx, "INSERT INTO container_bridge") if err != nil { @@ -654,12 +720,17 @@ func (c *DBClient) InsertContainerEvent(event string) { func (c *DBClient) InsertKubeScoreMetrics(metrics model.KubeScoreRecommendations) { + //opentelemetry ctx := context.Background() - - tracer := otel.Tracer("insert-kubescore-event") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKubeScoreMetrics") - span.SetAttributes(attribute.String("kubescore-client", "insert")) - defer span.End() + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + tracer := otel.Tracer("insert-kubescore-event") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertKubeScoreMetrics") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -706,12 +777,17 @@ func (c *DBClient) InsertKubeScoreMetrics(metrics model.KubeScoreRecommendations } func (c *DBClient) InsertTrivyMetrics(metrics model.Trivy) { - - ctx := context.Background() - tracer := otel.Tracer("insert-trivy-metrics") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertTrivyMetrics") - span.SetAttributes(attribute.String("trivy-metrics-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-trivy-metrics") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertTrivyMetrics") + defer span.End() + } for _, finding := range metrics.Report.Findings { for _, result := range finding.Results { @@ -793,12 +869,17 @@ func (c *DBClient) InsertTrivyMetrics(metrics model.Trivy) { } func (c *DBClient) InsertTrivyImageMetrics(metrics model.TrivyImage) { - - ctx := context.Background() - tracer := otel.Tracer("insert-trivy-image") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertTrivyImageMetrics") - span.SetAttributes(attribute.String("trivy-image-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-trivy-image") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertTrivyImageMetrics") + defer span.End() + } for _, result := range metrics.Report.Results { for _, vulnerability := range result.Vulnerabilities { @@ -841,12 +922,18 @@ func (c *DBClient) InsertTrivyImageMetrics(metrics model.TrivyImage) { } } -func (c *DBClient) InsertTrivySbomMetrics(metrics model.SbomData) { - ctx := context.Background() - tracer := otel.Tracer("insert-trivy-sbom") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertTrivySbomMetrics") - span.SetAttributes(attribute.String("trivy-sbom-client", "insert")) - defer span.End() +func (c *DBClient) InsertTrivySbomMetrics(metrics model.Sbom) { + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-trivy-sbom") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertTrivySbomMetrics") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -857,16 +944,88 @@ func (c *DBClient) InsertTrivySbomMetrics(metrics model.SbomData) { log.Fatalf("error preparing statement: %v", err) } + data := metrics.Report + bomFormat, _ := data["bomFormat"].(string) //CycloneDX + serialNumber, _ := data["serialNumber"].(string) // exmplvalue:urn:uuid:146625a5-531a-40fa-a205-174448c6c569 + + // fetching metadata + metadata, ok := data["metadata"].(map[string]interface{}) + if !ok { + log.Println("error: metadata not found or not in expected format") + return + } + // inside metadata + // taking component + component, ok := metadata["component"].(map[string]interface{}) + if !ok { + log.Println("error: component not found or not in expected format") + return + } + //timestamp, _ := metadata["timestamp"].(time.Time) + var timestamp time.Time + rawTimestamp, ok := metadata["timestamp"].(string) + if !ok { + log.Println("error: timestamp not found or not in expected format") + return + } + timestamp, err = time.Parse(time.RFC3339, rawTimestamp) + if err != nil { + log.Println("error parsing timestamp:", err) + return + } + + // inside metadata + // taking component + // inside component taking bomRef, componentType, componentName, packageURL + bomRef, _ := component["bom-ref"].(string) //pkg:oci/redis@sha256:873c49204b64258778a1f34d23a962de526021e9a63b09236d6d7c86e2dd13e9?repository_url=public.ecr.aws%2Fdocker%2Flibrary%2Fredis\u0026arch=amd64 + componentType, _ := component["type"].(string) //container + componentName, _ := component["name"].(string) //public.ecr.aws/docker/library/redis@sha256:873c49204b64258778a1f34d23a962de526021e9a63b09236d6d7c86e2dd13e9 + packageURL, _ := component["purl"].(string) //pkg:oci/redis@sha256:873c49204b64258778a1f34d23a962de526021e9a63b09236d6d7c86e2dd13e9?repository_url=public.ecr.aws%2Fdocker%2Flibrary%2Fredis\u0026arch=amd64 + // fetching other componets + Components, ok := data["components"].([]interface{}) + if !ok { + log.Println("error: components not found or not in expected format") + } + var otherComponentName, otherComponentbomref, otherComponenttype, otherComponentVersion string + // Iterate over the components to find the desired name + for _, otherComponent := range Components { + componentsMap, ok := otherComponent.(map[string]interface{}) + if !ok { + log.Println("error: component not in expected format") + continue + } + if name, ok := componentsMap["name"].(string); ok { + otherComponentName = name // alpine + break + } + if bomref, ok := componentsMap["bom-ref"].(string); ok { + otherComponentbomref = bomref // 92fc3e51-41d6-48da-831e-a1f5f9b6444d + break + } + if types, ok := componentsMap["type"].(string); ok { + otherComponenttype = types // operating-system + break + } + if version, ok := componentsMap["version"].(string); ok { + otherComponentVersion = version // 3.18.4 + break + } + } + if _, err := stmt.Exec( metrics.ID, metrics.ClusterName, - metrics.ComponentName, - metrics.PackageName, - metrics.PackageUrl, - metrics.BomRef, - metrics.SerialNumber, - int32(metrics.CycloneDxVersion), - metrics.BomFormat, + bomFormat, + serialNumber, + bomRef, + componentName, + componentType, + packageURL, + timestamp, + otherComponentName, + otherComponentbomref, + otherComponenttype, + otherComponentVersion, ); err != nil { log.Fatal(err) } @@ -875,6 +1034,7 @@ func (c *DBClient) InsertTrivySbomMetrics(metrics model.SbomData) { } stmt.Close() } + func (c *DBClient) Close() { _ = c.conn.Close() } @@ -976,11 +1136,17 @@ func (c *DBClient) RetrieveKubvizEvent() ([]model.DbEvent, error) { func (c *DBClient) InsertContainerEventDockerHub(build model.DockerHubBuild) { - ctx := context.Background() - tracer := otel.Tracer("insert-container-dockerhub") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventDockerHub") - span.SetAttributes(attribute.String("container-dockerhub-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, err := opentelemetry.GetConfigurations() + if err != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-container-dockerhub") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventDockerHub") + defer span.End() + } tx, err := c.conn.Begin() if err != nil { @@ -1012,12 +1178,17 @@ func (c *DBClient) InsertContainerEventDockerHub(build model.DockerHubBuild) { } func (c *DBClient) InsertContainerEventGithub(event string) { - - ctx := context.Background() - tracer := otel.Tracer("insert-container-github") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventGithub") - span.SetAttributes(attribute.String("container-github-client", "insert")) - defer span.End() + //opentelemetry + opentelconfig, errs := opentelemetry.GetConfigurations() + if errs != nil { + log.Println("Unable to read open telemetry configurations") + } + if opentelconfig.IsEnabled { + ctx := context.Background() + tracer := otel.Tracer("insert-container-github") + _, span := tracer.Start(opentelemetry.BuildContext(ctx), "InsertContainerEventGithub") + defer span.End() + } var image model.GithubImage err := json.Unmarshal([]byte(event), &image) diff --git a/client/pkg/clickhouse/statements.go b/client/pkg/clickhouse/statements.go index a728ceec..7f02e5ac 100644 --- a/client/pkg/clickhouse/statements.go +++ b/client/pkg/clickhouse/statements.go @@ -230,7 +230,7 @@ const InsertTrivyVul string = "INSERT INTO trivy_vul (id, cluster_name, namespac const InsertTrivyImage string = "INSERT INTO trivyimage (id, cluster_name, artifact_name, vul_id, vul_pkg_id, vul_pkg_name, vul_installed_version, vul_fixed_version, vul_title, vul_severity, vul_published_date, vul_last_modified_date) VALUES ( ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" const InsertTrivyMisconfig string = "INSERT INTO trivy_misconfig (id, cluster_name, namespace, kind, name, misconfig_id, misconfig_avdid, misconfig_type, misconfig_title, misconfig_desc, misconfig_msg, misconfig_query, misconfig_resolution, misconfig_severity, misconfig_status, EventTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" const InsertAzureContainerPushEvent DBStatement = "INSERT INTO azurecontainerpush (RegistryURL, RepositoryName, Tag, ImageName, Event, Size, SHAID, EventTime) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?)" -const InsertTrivySbom string = "INSERT INTO trivysbom (id, cluster_name, image_name, package_name, package_url, bom_ref, serial_number, version, bom_format) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" +const InsertTrivySbom string = "INSERT INTO trivysbom (id, cluster_name, bom_format, serial_number, bom_ref, image_name, componet_type, package_url, time_stamp, other_component_name, other_component_bomref, other_component_type, other_component_version) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" const InsertQuayContainerPushEvent DBStatement = "INSERT INTO quaycontainerpush (name, repository, nameSpace, dockerURL, homePage, tag, Event, EventTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" const InsertJfrogContainerPushEvent DBStatement = "INSERT INTO jfrogcontainerpush (Domain, EventType, RegistryURL, RepositoryName, SHAID, Size, ImageName, Tag, Event, EventTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" const InsertKuberhealthy string = "INSERT INTO kuberhealthy (CurrentUUID, CheckName, OK, Errors, RunDuration, Namespace, Node, LastRun, AuthoritativePod) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" \ No newline at end of file diff --git a/client/pkg/clients/bridge_client.go b/client/pkg/clients/bridge_client.go index 999cc07a..32f9ca91 100644 --- a/client/pkg/clients/bridge_client.go +++ b/client/pkg/clients/bridge_client.go @@ -1,7 +1,6 @@ package clients import ( - "context" "encoding/json" "errors" "log" @@ -16,10 +15,7 @@ import ( "github.com/intelops/kubviz/gitmodels/azuremodel" "github.com/intelops/kubviz/gitmodels/dbstatement" "github.com/intelops/kubviz/model" - "github.com/intelops/kubviz/pkg/opentelemetry" "github.com/nats-io/nats.go" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" ) // ErrHeaderEmpty defines an error occur when header is empty in git stream @@ -41,12 +37,6 @@ const ( func (n *NATSContext) SubscribeGitBridgeNats(conn clickhouse.DBInterface) { log.Printf("Creating nats consumer %s with subject: %s \n", bridgeConsumer, bridgeSubject) - ctx:=context.Background() - tracer := otel.Tracer("git-client") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "SubscribeGitBridgeNats") - span.SetAttributes(attribute.String("git-subscribe", "Subscribe")) - defer span.End() - n.stream.Subscribe(string(bridgeSubject), func(msg *nats.Msg) { msg.Ack() gitprovider := msg.Header.Get("GitProvider") diff --git a/client/pkg/clients/container_client.go b/client/pkg/clients/container_client.go index cea17181..bf7ae14b 100644 --- a/client/pkg/clients/container_client.go +++ b/client/pkg/clients/container_client.go @@ -1,7 +1,6 @@ package clients import ( - "context" "encoding/json" "errors" "log" @@ -9,10 +8,7 @@ import ( "github.com/intelops/kubviz/client/pkg/clickhouse" "github.com/intelops/kubviz/model" - "github.com/intelops/kubviz/pkg/opentelemetry" "github.com/nats-io/nats.go" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" ) var ( @@ -31,12 +27,6 @@ const ( func (n *NATSContext) SubscribeContainerNats(conn clickhouse.DBInterface) { - ctx:=context.Background() - tracer := otel.Tracer("container-client") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "SubscribeContainerNats") - span.SetAttributes(attribute.String("container-subscribe", "Subscribe")) - defer span.End() - n.stream.Subscribe(string(containerSubject), func(msg *nats.Msg) { msg.Ack() repoName := msg.Header.Get("REPO_NAME") diff --git a/client/pkg/clients/kubviz_client.go b/client/pkg/clients/kubviz_client.go index b126aaa7..1bc39d22 100644 --- a/client/pkg/clients/kubviz_client.go +++ b/client/pkg/clients/kubviz_client.go @@ -1,17 +1,13 @@ package clients import ( - "context" "encoding/json" "log" "github.com/intelops/kubviz/constants" - "github.com/intelops/kubviz/pkg/opentelemetry" "github.com/kelseyhightower/envconfig" "github.com/kuberhealthy/kuberhealthy/v2/pkg/health" "github.com/nats-io/nats.go" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" "github.com/intelops/kubviz/client/pkg/clickhouse" "github.com/intelops/kubviz/client/pkg/config" @@ -26,11 +22,6 @@ type SubscriptionInfo struct { func (n *NATSContext) SubscribeAllKubvizNats(conn clickhouse.DBInterface) { - ctx := context.Background() - tracer := otel.Tracer("kubviz-client") - _, span := tracer.Start(opentelemetry.BuildContext(ctx), "SubscribeAllKubvizNats") - span.SetAttributes(attribute.String("kubviz-subscribe", "subscribe")) - defer span.End() cfg := &config.Config{} if err := envconfig.Process("", cfg); err != nil { log.Fatalf("Could not parse env Config: %v", err) @@ -151,7 +142,7 @@ func (n *NATSContext) SubscribeAllKubvizNats(conn clickhouse.DBInterface) { Consumer: cfg.TrivySbomConsumer, Handler: func(msg *nats.Msg) { msg.Ack() - var metrics model.SbomData + var metrics model.Sbom err := json.Unmarshal(msg.Data, &metrics) if err != nil { log.Println("failed to unmarshal from nats", err) diff --git a/model/trivy_sbom.go b/model/trivy_sbom.go index 647e34a4..e763418c 100644 --- a/model/trivy_sbom.go +++ b/model/trivy_sbom.go @@ -1,24 +1,7 @@ package model -import ( - "github.com/aquasecurity/trivy/pkg/sbom/cyclonedx" -) - type Sbom struct { - ID string - Report cyclonedx.BOM -} - -type SbomData struct { - ID string + ID string ClusterName string - ComponentName string - PackageName string - PackageUrl string - BomRef string - SerialNumber string - CycloneDxVersion int - BomFormat string + Report map[string]interface{} } - - diff --git a/pkg/opentelemetry/opentelemetry.go b/pkg/opentelemetry/opentelemetry.go index 201587b9..779f68ca 100644 --- a/pkg/opentelemetry/opentelemetry.go +++ b/pkg/opentelemetry/opentelemetry.go @@ -19,7 +19,7 @@ import ( type Configurations struct { ServiceName string `envconfig:"APPLICATION_NAME" default:"Kubviz"` CollectorURL string `envconfig:"OPTEL_URL" default:"otelcollector.azureagent.optimizor.app:80"` - //IsEnabled bool `envconfig:"IS_OPTEL_ENABLED" default:"false"` + IsEnabled bool `envconfig:"IS_OPTEL_ENABLED" default:"false"` } func GetConfigurations() (opteConfig *Configurations, err error) { @@ -39,9 +39,10 @@ func InitTracer() (*sdktrace.TracerProvider, error) { return nil, err } - // if !config.IsEnabled { - // return nil, nil - // } + if !config.IsEnabled { + log.Println("OpenTelemetry is disabled. Skipping initialization.") + return nil, nil + } headers := map[string]string{ "signoz-service-name": config.ServiceName, diff --git a/sql/0000015_trivysbom.up.sql b/sql/0000015_trivysbom.up.sql index 7bc749ac..0d84589d 100644 --- a/sql/0000015_trivysbom.up.sql +++ b/sql/0000015_trivysbom.up.sql @@ -1,13 +1,17 @@ CREATE TABLE IF NOT EXISTS trivysbom ( id UUID, - cluster_name String, + cluster_name String, + bom_format String, + serial_number String, + bom_ref String, image_name String, - package_name String, + componet_type String, package_url String, - bom_ref String, - serial_number String, - version INTEGER, - bom_format String, + time_stamp DateTime('UTC'), + other_component_name String, + other_component_bomref String, + other_component_type String, + other_component_version String, ExpiryDate DateTime DEFAULT now() + INTERVAL {{.TTLValue}} {{.TTLUnit}}, ExportedAt DateTime DEFAULT NULL ) ENGINE = MergeTree()