From b263813bde73323b3056831bf72536e35624982a Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Sun, 16 Feb 2025 10:16:13 +0200 Subject: [PATCH 01/15] refactor: inject device via property on distro mannifest (#2446) This will allow us: - one less thing that depends on the otelsdk notion. - better consistency, as we are using the same value for both the device and the distro - once we merge mount into a single device, the fix will be simpler (only in yaml manifests). I have added the hard-coded logic for dotnet and libc-type into the code as a temporary workaround until the dotnet environemnts will migrate to webhook and we can change the device to the single "mount all" device. --- .vscode/launch.json | 2 +- distros/distro/oteldistribution.go | 4 ++ distros/yamls/dotnet-community.yaml | 5 ++- distros/yamls/dotnet-legacy.yaml | 3 ++ distros/yamls/golang-enterprise.yaml | 2 + distros/yamls/java-community.yaml | 1 + distros/yamls/java-ebpf-instrumentations.yaml | 1 + distros/yamls/java-enterprise.yaml | 1 + distros/yamls/nodejs-community.yaml | 1 + distros/yamls/nodejs-enterprise.yaml | 1 + distros/yamls/python-community.yaml | 1 + distros/yamls/python-enterprise.yaml | 1 + .../controllers/agentenabled/pods_webhook.go | 33 +++++++++------- .../agentenabled/podswebhook/device.go | 20 ++++++++++ .../webhook_device_injector.go | 39 ------------------- 15 files changed, 59 insertions(+), 56 deletions(-) create mode 100644 instrumentor/controllers/agentenabled/podswebhook/device.go delete mode 100644 instrumentor/internal/webhook_device_injector/webhook_device_injector.go diff --git a/.vscode/launch.json b/.vscode/launch.json index 467e774a48..19495fda22 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -17,7 +17,7 @@ "type": "go", "request": "launch", "mode": "debug", - "program": "${workspaceFolder}/instrumentor", + "program": "${workspaceFolder}/instrumentor/cmd", "cwd": "${workspaceFolder}/instrumentor" }, { diff --git a/distros/distro/oteldistribution.go b/distros/distro/oteldistribution.go index 041c1f6d4e..ffb3884de9 100644 --- a/distros/distro/oteldistribution.go +++ b/distros/distro/oteldistribution.go @@ -52,6 +52,10 @@ type RuntimeAgent struct { // For opamp distros, the resource attributes are set in the opamp server. // We will eventually remove this field once all distros upgrade to dynamic resource attributes. K8sAttrsViaEnvVars bool `yaml:"k8sAttrsViaEnvVars,omitempty"` + + // If mounting of agent directory is achieved via k8s virtual device, + // this field specifies the name of the device to inject into the resources part of the pods container spec. + Device *string `yaml:"device,omitempty"` } // OtelDistro (Short for OpenTelemetry Distribution) is a collection of OpenTelemetry components, diff --git a/distros/yamls/dotnet-community.yaml b/distros/yamls/dotnet-community.yaml index 04bbcf0288..2042eb6e81 100644 --- a/distros/yamls/dotnet-community.yaml +++ b/distros/yamls/dotnet-community.yaml @@ -16,10 +16,11 @@ spec: displayName: 'Dotnet Community Native Instrumentation' description: | This distribution is for Dotnet applications using OpenTelemetry Native SDK and instrumentation libraries from the OpenTelemetry community. - tiers: + tiers: - community - onprem runtimeAgent: directoryNames: - - "{{ODIGOS_AGENTS_DIR}}/dotnet" + - '{{ODIGOS_AGENTS_DIR}}/dotnet' k8sAttrsViaEnvVars: true + device: 'instrumentation.odigos.io/{{param.LIBC_TYPE}}dotnet-native-community' diff --git a/distros/yamls/dotnet-legacy.yaml b/distros/yamls/dotnet-legacy.yaml index e95fbb8b51..56740df2fd 100644 --- a/distros/yamls/dotnet-legacy.yaml +++ b/distros/yamls/dotnet-legacy.yaml @@ -5,6 +5,8 @@ metadata: spec: name: dotnet-legacy language: dotnet + requireParameters: + - LIBC_TYPE runtimeEnvironments: - name: dotnet-version supportedVersions: '>=4 <7' @@ -17,3 +19,4 @@ spec: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/legacy-dotnet" k8sAttrsViaEnvVars: true + device: 'instrumentation.odigos.io/{{param.LIBC_TYPE}}dotnet-native-enterprise' diff --git a/distros/yamls/golang-enterprise.yaml b/distros/yamls/golang-enterprise.yaml index 81434a42bd..b5e65a6503 100644 --- a/distros/yamls/golang-enterprise.yaml +++ b/distros/yamls/golang-enterprise.yaml @@ -13,3 +13,5 @@ spec: This distribution is for Golang applications using Odigos enterprise version, with ebpf-based SDK and instrumentation libraries, additional features and libraries coverage. tiers: - onprem + runtimeAgent: + device: 'instrumentation.odigos.io/go-ebpf-enterprise' diff --git a/distros/yamls/java-community.yaml b/distros/yamls/java-community.yaml index 27a6f752d6..8335cd4131 100644 --- a/distros/yamls/java-community.yaml +++ b/distros/yamls/java-community.yaml @@ -24,3 +24,4 @@ spec: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/java" k8sAttrsViaEnvVars: true + device: 'instrumentation.odigos.io/java-native-community' diff --git a/distros/yamls/java-ebpf-instrumentations.yaml b/distros/yamls/java-ebpf-instrumentations.yaml index c79a65cd0b..043ca3d886 100644 --- a/distros/yamls/java-ebpf-instrumentations.yaml +++ b/distros/yamls/java-ebpf-instrumentations.yaml @@ -23,3 +23,4 @@ spec: runtimeAgent: directoryNames: # - "{{ODIGOS_AGENTS_DIR}}/java-ebpf" + device: 'instrumentation.odigos.io/java-ebpf-enterprise' diff --git a/distros/yamls/java-enterprise.yaml b/distros/yamls/java-enterprise.yaml index 129aca1de6..f5ba148c8d 100644 --- a/distros/yamls/java-enterprise.yaml +++ b/distros/yamls/java-enterprise.yaml @@ -23,3 +23,4 @@ spec: runtimeAgent: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/java-ext-ebpf" + device: 'instrumentation.odigos.io/java-native-enterprise' \ No newline at end of file diff --git a/distros/yamls/nodejs-community.yaml b/distros/yamls/nodejs-community.yaml index 2ad3fc79da..29f0da6bb0 100644 --- a/distros/yamls/nodejs-community.yaml +++ b/distros/yamls/nodejs-community.yaml @@ -20,3 +20,4 @@ spec: runtimeAgent: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/nodejs" + device: 'instrumentation.odigos.io/javascript-native-community' diff --git a/distros/yamls/nodejs-enterprise.yaml b/distros/yamls/nodejs-enterprise.yaml index 94d6c1cffe..0c14099f85 100644 --- a/distros/yamls/nodejs-enterprise.yaml +++ b/distros/yamls/nodejs-enterprise.yaml @@ -20,3 +20,4 @@ spec: runtimeAgent: directoryNames: # - "{{ODIGOS_AGENTS_DIR}}/nodejs-ebpf" + device: 'instrumentation.odigos.io/javascript-ebpf-enterprise' diff --git a/distros/yamls/python-community.yaml b/distros/yamls/python-community.yaml index 251e61d3e5..55b914ac0f 100644 --- a/distros/yamls/python-community.yaml +++ b/distros/yamls/python-community.yaml @@ -20,4 +20,5 @@ spec: runtimeAgent: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/python" + device: 'instrumentation.odigos.io/python-native-community' \ No newline at end of file diff --git a/distros/yamls/python-enterprise.yaml b/distros/yamls/python-enterprise.yaml index 23bff0736c..7e9a781856 100644 --- a/distros/yamls/python-enterprise.yaml +++ b/distros/yamls/python-enterprise.yaml @@ -21,3 +21,4 @@ spec: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/python" - "{{ODIGOS_AGENTS_DIR}}/python-ebpf" + device: 'instrumentation.odigos.io/python-ebpf-enterprise' \ No newline at end of file diff --git a/instrumentor/controllers/agentenabled/pods_webhook.go b/instrumentor/controllers/agentenabled/pods_webhook.go index 9141e4b849..6a8626a18e 100644 --- a/instrumentor/controllers/agentenabled/pods_webhook.go +++ b/instrumentor/controllers/agentenabled/pods_webhook.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" "github.com/go-logr/logr" "github.com/odigos-io/odigos/api/k8sconsts" @@ -13,7 +14,6 @@ import ( "github.com/odigos-io/odigos/instrumentor/controllers/agentenabled/podswebhook" "github.com/odigos-io/odigos/instrumentor/controllers/utils" podutils "github.com/odigos-io/odigos/instrumentor/internal/pod" - webhookdeviceinjector "github.com/odigos-io/odigos/instrumentor/internal/webhook_device_injector" webhookenvinjector "github.com/odigos-io/odigos/instrumentor/internal/webhook_env_injector" "github.com/odigos-io/odigos/instrumentor/sdks" sourceutils "github.com/odigos-io/odigos/k8sutils/pkg/source" @@ -174,19 +174,6 @@ func (p *PodsWebhook) injectOdigosInstrumentation(ctx context.Context, pod *core if !found { continue } - - // amir: 07 feb 2025. hard-coded temporary list which is removed once all distros migrate away from device - // amir: 11 feb 2025. reverted java and nodejs enterprise temporarily - if - // (runtimeDetails.Language == common.JavascriptProgrammingLanguage && otelSdk == common.OtelSdkEbpfEnterprise) || - (runtimeDetails.Language == common.GoProgrammingLanguage && otelSdk == common.OtelSdkEbpfCommunity) || - // (runtimeDetails.Language == common.JavaProgrammingLanguage && otelSdk == common.OtelSdkEbpfEnterprise) || - (runtimeDetails.Language == common.MySQLProgrammingLanguage && otelSdk == common.OtelSdkEbpfEnterprise) { - // Skip device injection for distros that no longer use it - } else { - webhookdeviceinjector.InjectOdigosInstrumentationDevice(*pw, container, otelSdk, runtimeDetails) - } - webhookenvinjector.InjectOdigosAgentEnvVars(logger, *pw, container, otelSdk, runtimeDetails) } return nil @@ -216,6 +203,24 @@ func injectOdigosToContainer(containerConfig *odigosv1.ContainerAgentConfig, pod if distroMetadata.RuntimeAgent.K8sAttrsViaEnvVars { podswebhook.InjectOtelResourceAndServerNameEnvVars(&existingEnvNames, podContainerSpec, distroName, pw, serviceName) } + // TODO: once we have a flag to enable/disable device injection, we should check it here. + if distroMetadata.RuntimeAgent.Device != nil { + deviceName := *distroMetadata.RuntimeAgent.Device + // TODO: currently devices are composed with glibc as input for dotnet. + // as devices will soon converge to a single device, I am hardcoding the logic here, + // which will eventually be removed once dotnet specific devices are removed. + if containerConfig.DistroParams != nil { + libcType, ok := containerConfig.DistroParams[common.LibcTypeDistroParameterName] + if ok { + libcPrefix := "" + if libcType == string(common.Musl) { + libcPrefix = "musl-" + } + deviceName = strings.ReplaceAll(deviceName, "{{param.LIBC_TYPE}}", libcPrefix) + } + } + podswebhook.InjectDeviceToContainer(podContainerSpec, deviceName) + } } podswebhook.InjectOdigosK8sEnvVars(&existingEnvNames, podContainerSpec, distroName, pw.Namespace) diff --git a/instrumentor/controllers/agentenabled/podswebhook/device.go b/instrumentor/controllers/agentenabled/podswebhook/device.go new file mode 100644 index 0000000000..758aa74567 --- /dev/null +++ b/instrumentor/controllers/agentenabled/podswebhook/device.go @@ -0,0 +1,20 @@ +package podswebhook + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" +) + +func InjectDeviceToContainer(container *corev1.Container, device string) { + if container.Resources.Limits == nil { + container.Resources.Limits = make(corev1.ResourceList) + } + if container.Resources.Requests == nil { + container.Resources.Requests = make(corev1.ResourceList) + } + + resourceName := corev1.ResourceName(device) + + container.Resources.Limits[resourceName] = resource.MustParse("1") + container.Resources.Requests[resourceName] = resource.MustParse("1") +} diff --git a/instrumentor/internal/webhook_device_injector/webhook_device_injector.go b/instrumentor/internal/webhook_device_injector/webhook_device_injector.go deleted file mode 100644 index 92adeeae38..0000000000 --- a/instrumentor/internal/webhook_device_injector/webhook_device_injector.go +++ /dev/null @@ -1,39 +0,0 @@ -package webhookdeviceinjector - -import ( - "github.com/odigos-io/odigos/api/k8sconsts" - v1alpha1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" - "github.com/odigos-io/odigos/common" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" -) - -func InjectOdigosInstrumentationDevice( - podWorkload k8sconsts.PodWorkload, - container *corev1.Container, - otelSdk common.OtelSdk, - runtimeDetails *v1alpha1.RuntimeDetailsByContainer, -) error { - libcType := runtimeDetails.LibCType - instrumentationDeviceName := common.InstrumentationDeviceName(runtimeDetails.Language, otelSdk, libcType) - - if instrumentationDeviceName == "" { - return nil - } - - ensureResourceListsInitialized(container) - - container.Resources.Limits[corev1.ResourceName(instrumentationDeviceName)] = resource.MustParse("1") - container.Resources.Requests[corev1.ResourceName(instrumentationDeviceName)] = resource.MustParse("1") - - return nil -} - -func ensureResourceListsInitialized(container *corev1.Container) { - if container.Resources.Limits == nil { - container.Resources.Limits = make(corev1.ResourceList) - } - if container.Resources.Requests == nil { - container.Resources.Requests = make(corev1.ResourceList) - } -} From 657ab4aaac2474c9adb65d3d206e6eb805e351c6 Mon Sep 17 00:00:00 2001 From: Ron Federman <73110295+RonFed@users.noreply.github.com> Date: Sun, 16 Feb 2025 11:29:34 +0200 Subject: [PATCH 02/15] refactor: move init code from main to instrumentor package (#2445) This PR mainly refactor the instrumentor main function, and extracts it's code to the `instrumentor` package. * `instrumentor.New` initlizes the manager and all its controllers and webhooks. * `instrumentor.Run` launches the runnables including the manager itself. The telemetry reporter was adjusted to accept a context so we can cancel it once the instrumentor shuts down and exit gracefully. --- instrumentor/cmd/main.go | 255 +----------------- instrumentor/controllers/manager.go | 205 ++++++++++++++ .../{ => controllers}/sources_webhooks.go | 2 +- instrumentor/go.mod | 2 +- instrumentor/instrumentor.go | 96 +++++++ instrumentor/report/events.go | 40 ++- instrumentor/sdks/sdks.go | 6 +- 7 files changed, 344 insertions(+), 262 deletions(-) create mode 100644 instrumentor/controllers/manager.go rename instrumentor/{ => controllers}/sources_webhooks.go (99%) create mode 100644 instrumentor/instrumentor.go diff --git a/instrumentor/cmd/main.go b/instrumentor/cmd/main.go index 22b0d1b4d0..f0afd9f63a 100644 --- a/instrumentor/cmd/main.go +++ b/instrumentor/cmd/main.go @@ -18,82 +18,36 @@ package main import ( "flag" - "fmt" "os" - "time" - "github.com/odigos-io/odigos/common/consts" - "github.com/odigos-io/odigos/k8sutils/pkg/env" - - "github.com/odigos-io/odigos/instrumentor/controllers/agentenabled" - "github.com/odigos-io/odigos/instrumentor/controllers/instrumentationconfig" - "github.com/odigos-io/odigos/instrumentor/controllers/startlangdetection" - "github.com/odigos-io/odigos/instrumentor/controllers/workloadmigrations" + "github.com/odigos-io/odigos/instrumentor/controllers" "github.com/odigos-io/odigos/instrumentor/sdks" - corev1 "k8s.io/api/core/v1" - - runtimemigration "github.com/odigos-io/odigos/instrumentor/runtimemigration" - "sigs.k8s.io/controller-runtime/pkg/builder" - "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager/signals" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "github.com/go-logr/zapr" bridge "github.com/odigos-io/opentelemetry-zap-bridge" - "github.com/odigos-io/odigos/api/k8sconsts" - odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" - "github.com/odigos-io/odigos/common" - - "github.com/odigos-io/odigos/instrumentor/controllers/deleteinstrumentationconfig" - "github.com/odigos-io/odigos/instrumentor/report" "github.com/odigos-io/odigos/instrumentor" - // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) - // to ensure that exec-entrypoint and run can make use of them. - - "k8s.io/apimachinery/pkg/fields" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/selection" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth" ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/healthz" ctrlzap "sigs.k8s.io/controller-runtime/pkg/log/zap" - //+kubebuilder:scaffold:imports - - "net/http" _ "net/http/pprof" ) var ( - scheme = runtime.NewScheme() setupLog = ctrl.Log.WithName("setup") ) -func init() { - utilruntime.Must(clientgoscheme.AddToScheme(scheme)) - - utilruntime.Must(odigosv1.AddToScheme(scheme)) - //+kubebuilder:scaffold:scheme -} - func main() { - var metricsAddr string - var enableLeaderElection bool - var probeAddr string + managerOptions := controllers.KubeManagerOptions{} var telemetryDisabled bool - flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") - flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") - flag.BoolVar(&enableLeaderElection, "leader-elect", false, + flag.StringVar(&managerOptions.MetricsServerBindAddress, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") + flag.StringVar(&managerOptions.HealthProbeBindAddress, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") + flag.BoolVar(&managerOptions.EnableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. "+ "Enabling this will ensure there is only one active controller manager.") flag.BoolVar(&telemetryDisabled, "telemetry-disabled", false, "Disable telemetry") @@ -107,205 +61,18 @@ func main() { zapLogger := ctrlzap.NewRaw(ctrlzap.UseFlagOptions(&opts)) zapLogger = bridge.AttachToZapLogger(zapLogger) logger := zapr.NewLogger(zapLogger) - ctrl.SetLogger(logger) - - odigosNs := env.GetCurrentNamespace() - nsSelector := client.InNamespace(odigosNs).AsSelector() - odigosEffectiveConfigNameSelector := fields.OneTermEqualSelector("metadata.name", consts.OdigosEffectiveConfigName) - odigosEffectiveConfigSelector := fields.AndSelectors(nsSelector, odigosEffectiveConfigNameSelector) - instrumentedPodReq, _ := labels.NewRequirement(k8sconsts.OdigosAgentsMetaHashLabel, selection.Exists, []string{}) - instrumentedPodSelector := labels.NewSelector().Add(*instrumentedPodReq) - - podsTransformFunc := func(obj interface{}) (interface{}, error) { - pod, ok := obj.(*corev1.Pod) - if !ok { - return nil, fmt.Errorf("expected a Pod, got %T", obj) - } - - stripedStatus := corev1.PodStatus{ - Phase: pod.Status.Phase, - ContainerStatuses: pod.Status.ContainerStatuses, // TODO: we don't need all data here - Message: pod.Status.Message, - Reason: pod.Status.Reason, - StartTime: pod.Status.StartTime, - } - strippedPod := corev1.Pod{ - ObjectMeta: pod.ObjectMeta, - Status: stripedStatus, - } - strippedPod.SetManagedFields(nil) // don't store managed fields in the cache - return &strippedPod, nil - } - - mgrOptions := ctrl.Options{ - Scheme: scheme, - Metrics: metricsserver.Options{ - BindAddress: metricsAddr, - }, - HealthProbeBindAddress: probeAddr, - LeaderElection: enableLeaderElection, - LeaderElectionID: "201bdfa0.odigos.io", - /* - Leader Election Parameters: - - LeaseDuration (5s): - - Maximum time a pod can remain the leader after its last successful renewal. - - If the leader pod dies, failover can take up to the LeaseDuration from the last renewal. - The actual failover time depends on how recently the leader renewed the lease. - - Controls when the lease is fully expired and failover can occur. - - RenewDeadline (4s): - - The maximum time the leader pod has to successfully renew its lease before it is - considered unhealthy. Relevant only while the leader is alive and renewing. - - Controls how long the current leader will keep retrying to refresh the lease. - - RetryPeriod (1s): - - How often non-leader pods check and attempt to acquire leadership when the lease is available. - - Lower value means faster failover but adds more load on the Kubernetes API server. + managerOptions.Logger = logger - Relationship: - - RetryPeriod < RenewDeadline < LeaseDuration - - This ensures proper failover timing and system stability. - */ - LeaseDuration: durationPointer(5 * time.Second), - RenewDeadline: durationPointer(4 * time.Second), - RetryPeriod: durationPointer(1 * time.Second), - Cache: cache.Options{ - DefaultTransform: cache.TransformStripManagedFields(), - ByObject: map[client.Object]cache.ByObject{ - &corev1.Pod{}: { - Label: instrumentedPodSelector, - Transform: podsTransformFunc, - }, - &corev1.ConfigMap{}: { - Field: odigosEffectiveConfigSelector, - }, - &odigosv1.CollectorsGroup{}: { - Field: nsSelector, - }, - &odigosv1.Destination{}: { - Field: nsSelector, - }, - &odigosv1.InstrumentationRule{}: { - Field: nsSelector, - }, - &odigosv1.InstrumentationConfig{}: { - // all instrumentation configs are managed by this controller - // and should be pulled into the cache - }, - }, - }, - } - - // Check if the environment variable `LOCAL_WEBHOOK_CERT_DIR` is set. - // If defined, add WebhookServer options with the specified certificate directory. - // This is used primarily for local development environments to provide a custom path for serving TLS certificates. - localCertDir := os.Getenv("LOCAL_MUTATING_WEBHOOK_CERT_DIR") - if localCertDir != "" { - mgrOptions.WebhookServer = webhook.NewServer(webhook.Options{ - CertDir: localCertDir, - }) - } - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), mgrOptions) + sdks.SetDefaultSDKs() + i, err := instrumentor.New(managerOptions) if err != nil { - setupLog.Error(err, "unable to start manager") + setupLog.Error(err, "Failed to initialize instrumentor") os.Exit(1) } ctx := signals.SetupSignalHandler() - // This temporary migration step ensures the runtimeDetails migration in the instrumentationConfig is performed. - // This code can be removed once the migration is confirmed to be successful. - mgr.Add(&runtimemigration.MigrationRunnable{KubeClient: mgr.GetClient(), Logger: setupLog}) - - err = sdks.SetDefaultSDKs(ctx) - - if err != nil { - setupLog.Error(err, "Failed to set default SDKs") - os.Exit(-1) - } - - err = agentenabled.SetupWithManager(mgr) - if err != nil { - setupLog.Error(err, "unable to create controller") - os.Exit(1) - } - - err = deleteinstrumentationconfig.SetupWithManager(mgr) - if err != nil { - setupLog.Error(err, "unable to create controller") - os.Exit(1) - } - - err = startlangdetection.SetupWithManager(mgr) - if err != nil { - setupLog.Error(err, "unable to create controller") - os.Exit(1) - } - - err = instrumentationconfig.SetupWithManager(mgr) - if err != nil { - setupLog.Error(err, "unable to create controller for instrumentation rules") - os.Exit(1) - } - - err = workloadmigrations.SetupWithManager(mgr) - if err != nil { - setupLog.Error(err, "unable to create controller for instrumentation label migration") - os.Exit(1) - } - - err = builder. - WebhookManagedBy(mgr). - For(&odigosv1.Source{}). - WithDefaulter(&instrumentor.SourcesDefaulter{ - Client: mgr.GetClient(), - }). - WithValidator(&instrumentor.SourcesValidator{ - Client: mgr.GetClient(), - }). - Complete() - if err != nil { - setupLog.Error(err, "unable to create Sources webhooks") - os.Exit(1) - } - - //+kubebuilder:scaffold:builder - - err = addHealthAndReadyChecks(mgr) - if err != nil { - setupLog.Error(err, "unable to set up health and ready checks") - os.Exit(1) - } - - go common.StartPprofServer(ctx, setupLog) - - if !telemetryDisabled { - go report.Start(mgr.GetClient()) - } - - setupLog.Info("starting manager") - if err := mgr.Start(ctx); err != nil { - setupLog.Error(err, "problem running manager") - os.Exit(1) - } -} - -func addHealthAndReadyChecks(mgr ctrl.Manager) error { - if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { - return fmt.Errorf("unable to set up health check: %w", err) - } - - if err := mgr.AddReadyzCheck("readyz", func(req *http.Request) error{ - return mgr.GetWebhookServer().StartedChecker()(req) - }); err != nil { - return fmt.Errorf("unable to set up ready check: %w", err) - } - return nil -} - -func durationPointer(d time.Duration) *time.Duration { - return &d + i.Run(ctx, telemetryDisabled) + logger.V(0).Info("instrumentor exiting") } diff --git a/instrumentor/controllers/manager.go b/instrumentor/controllers/manager.go new file mode 100644 index 0000000000..e7f446d32f --- /dev/null +++ b/instrumentor/controllers/manager.go @@ -0,0 +1,205 @@ +package controllers + +import ( + "fmt" + "os" + "time" + + "github.com/go-logr/logr" + + "github.com/odigos-io/odigos/instrumentor/controllers/agentenabled" + "github.com/odigos-io/odigos/instrumentor/controllers/deleteinstrumentationconfig" + "github.com/odigos-io/odigos/instrumentor/controllers/instrumentationconfig" + "github.com/odigos-io/odigos/instrumentor/controllers/startlangdetection" + "github.com/odigos-io/odigos/instrumentor/controllers/workloadmigrations" + + "github.com/odigos-io/odigos/api/k8sconsts" + "github.com/odigos-io/odigos/common/consts" + "github.com/odigos-io/odigos/k8sutils/pkg/env" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/selection" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/builder" + "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/manager" + metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/controller-runtime/pkg/webhook" + + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + + corev1 "k8s.io/api/core/v1" + + odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" +) + +var scheme = runtime.NewScheme() + +func init() { + utilruntime.Must(clientgoscheme.AddToScheme(scheme)) + utilruntime.Must(odigosv1.AddToScheme(scheme)) +} + +type KubeManagerOptions struct { + Logger logr.Logger + MetricsServerBindAddress string + HealthProbeBindAddress string + EnableLeaderElection bool +} + +func CreateManager(opts KubeManagerOptions) (ctrl.Manager, error) { + ctrl.SetLogger(opts.Logger) + + odigosNs := env.GetCurrentNamespace() + nsSelector := client.InNamespace(odigosNs).AsSelector() + odigosEffectiveConfigNameSelector := fields.OneTermEqualSelector("metadata.name", consts.OdigosEffectiveConfigName) + odigosEffectiveConfigSelector := fields.AndSelectors(nsSelector, odigosEffectiveConfigNameSelector) + instrumentedPodReq, _ := labels.NewRequirement(k8sconsts.OdigosAgentsMetaHashLabel, selection.Exists, []string{}) + instrumentedPodSelector := labels.NewSelector().Add(*instrumentedPodReq) + + podsTransformFunc := func(obj interface{}) (interface{}, error) { + pod, ok := obj.(*corev1.Pod) + if !ok { + return nil, fmt.Errorf("expected a Pod, got %T", obj) + } + + stripedStatus := corev1.PodStatus{ + Phase: pod.Status.Phase, + ContainerStatuses: pod.Status.ContainerStatuses, // TODO: we don't need all data here + Message: pod.Status.Message, + Reason: pod.Status.Reason, + StartTime: pod.Status.StartTime, + } + strippedPod := corev1.Pod{ + ObjectMeta: pod.ObjectMeta, + Status: stripedStatus, + } + strippedPod.SetManagedFields(nil) // don't store managed fields in the cache + return &strippedPod, nil + } + + mgrOptions := ctrl.Options{ + Scheme: scheme, + Metrics: metricsserver.Options{ + BindAddress: opts.MetricsServerBindAddress, + }, + HealthProbeBindAddress: opts.HealthProbeBindAddress, + LeaderElection: opts.EnableLeaderElection, + LeaderElectionID: "201bdfa0.odigos.io", + /* + Leader Election Parameters: + + LeaseDuration (5s): + - Maximum time a pod can remain the leader after its last successful renewal. + - If the leader pod dies, failover can take up to the LeaseDuration from the last renewal. + The actual failover time depends on how recently the leader renewed the lease. + - Controls when the lease is fully expired and failover can occur. + + RenewDeadline (4s): + - The maximum time the leader pod has to successfully renew its lease before it is + considered unhealthy. Relevant only while the leader is alive and renewing. + - Controls how long the current leader will keep retrying to refresh the lease. + + RetryPeriod (1s): + - How often non-leader pods check and attempt to acquire leadership when the lease is available. + - Lower value means faster failover but adds more load on the Kubernetes API server. + + Relationship: + - RetryPeriod < RenewDeadline < LeaseDuration + - This ensures proper failover timing and system stability. + */ + LeaseDuration: durationPointer(5 * time.Second), + RenewDeadline: durationPointer(4 * time.Second), + RetryPeriod: durationPointer(1 * time.Second), + Cache: cache.Options{ + DefaultTransform: cache.TransformStripManagedFields(), + ByObject: map[client.Object]cache.ByObject{ + &corev1.Pod{}: { + Label: instrumentedPodSelector, + Transform: podsTransformFunc, + }, + &corev1.ConfigMap{}: { + Field: odigosEffectiveConfigSelector, + }, + &odigosv1.CollectorsGroup{}: { + Field: nsSelector, + }, + &odigosv1.Destination{}: { + Field: nsSelector, + }, + &odigosv1.InstrumentationRule{}: { + Field: nsSelector, + }, + &odigosv1.InstrumentationConfig{}: { + // all instrumentation configs are managed by this controller + // and should be pulled into the cache + }, + }, + }, + } + + // Check if the environment variable `LOCAL_WEBHOOK_CERT_DIR` is set. + // If defined, add WebhookServer options with the specified certificate directory. + // This is used primarily for local development environments to provide a custom path for serving TLS certificates. + localCertDir := os.Getenv("LOCAL_MUTATING_WEBHOOK_CERT_DIR") + if localCertDir != "" { + mgrOptions.WebhookServer = webhook.NewServer(webhook.Options{ + CertDir: localCertDir, + }) + } + + return ctrl.NewManager(ctrl.GetConfigOrDie(), mgrOptions) +} + +func durationPointer(d time.Duration) *time.Duration { + return &d +} + +func SetupWithManager(mgr manager.Manager) error { + err := agentenabled.SetupWithManager(mgr) + if err != nil { + return fmt.Errorf("failed to create controller for agent enabled: %w", err) + } + + err = deleteinstrumentationconfig.SetupWithManager(mgr) + if err != nil { + return fmt.Errorf("failed to create controller for delete instrumentation config: %w", err) + } + + err = startlangdetection.SetupWithManager(mgr) + if err != nil { + return fmt.Errorf("failed to create controller for start language detection: %w", err) + } + + err = instrumentationconfig.SetupWithManager(mgr) + if err != nil { + return fmt.Errorf("failed to create controller for instrumentation config: %w", err) + } + + err = workloadmigrations.SetupWithManager(mgr) + if err != nil { + return fmt.Errorf("failed to create controller for workload migrations: %w", err) + } + + // TODO: this webhook is relevant for both the startlangdetection and deleteinstrumentationconfig controllers + // we are planning to combine these controllers into a single controller in the future, + // so we can move this webhook to that combined controller + err = builder. + WebhookManagedBy(mgr). + For(&odigosv1.Source{}). + WithDefaulter(&SourcesDefaulter{ + Client: mgr.GetClient(), + }). + WithValidator(&SourcesValidator{ + Client: mgr.GetClient(), + }). + Complete() + if err != nil { + return err + } + + return nil +} diff --git a/instrumentor/sources_webhooks.go b/instrumentor/controllers/sources_webhooks.go similarity index 99% rename from instrumentor/sources_webhooks.go rename to instrumentor/controllers/sources_webhooks.go index 35db87dbfe..e40891f372 100644 --- a/instrumentor/sources_webhooks.go +++ b/instrumentor/controllers/sources_webhooks.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package instrumentor +package controllers import ( "context" diff --git a/instrumentor/go.mod b/instrumentor/go.mod index 820764db28..f7c7894e35 100644 --- a/instrumentor/go.mod +++ b/instrumentor/go.mod @@ -13,6 +13,7 @@ require ( github.com/onsi/ginkgo v1.16.5 github.com/onsi/gomega v1.36.2 go.opentelemetry.io/otel v1.34.0 + golang.org/x/sync v0.10.0 k8s.io/api v0.32.1 k8s.io/apimachinery v0.32.1 k8s.io/client-go v0.32.1 @@ -40,7 +41,6 @@ require ( go.opentelemetry.io/otel/sdk v1.34.0 // indirect go.opentelemetry.io/otel/trace v1.34.0 // indirect go.opentelemetry.io/proto/otlp v1.5.0 // indirect - golang.org/x/sync v0.10.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect diff --git a/instrumentor/instrumentor.go b/instrumentor/instrumentor.go new file mode 100644 index 0000000000..bce482fd02 --- /dev/null +++ b/instrumentor/instrumentor.go @@ -0,0 +1,96 @@ +package instrumentor + +import ( + "context" + "fmt" + "net/http" + + "github.com/go-logr/logr" + "github.com/odigos-io/odigos/common" + "github.com/odigos-io/odigos/instrumentor/controllers" + "github.com/odigos-io/odigos/instrumentor/report" + "github.com/odigos-io/odigos/instrumentor/runtimemigration" + "golang.org/x/sync/errgroup" + controllerruntime "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/healthz" +) + +type Instrumentor struct { + mgr controllerruntime.Manager + logger logr.Logger +} + +func New(opts controllers.KubeManagerOptions) (*Instrumentor, error) { + mgr, err := controllers.CreateManager(opts) + if err != nil { + return nil, err + } + + // This temporary migration step ensures the runtimeDetails migration in the instrumentationConfig is performed. + // This code can be removed once the migration is confirmed to be successful. + mgr.Add(&runtimemigration.MigrationRunnable{KubeClient: mgr.GetClient(), Logger: opts.Logger}) + + // wire up the controllers and webhooks + err = controllers.SetupWithManager(mgr) + if err != nil { + return nil, err + } + + // Add health and ready probes + if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { + return nil, fmt.Errorf("unable to set up health check: %w", err) + } + + if err := mgr.AddReadyzCheck("readyz", func(req *http.Request) error{ + return mgr.GetWebhookServer().StartedChecker()(req) + }); err != nil { + return nil, fmt.Errorf("unable to set up ready check: %w", err) + } + + return &Instrumentor{ + mgr: mgr, + logger: opts.Logger, + }, nil +} + +func (i *Instrumentor) Run(ctx context.Context, odigosTelemetryDisabled bool) { + g, groupCtx := errgroup.WithContext(ctx) + + // Start pprof server + g.Go(func() error { + err := common.StartPprofServer(groupCtx, i.logger) + if err != nil { + i.logger.Error(err, "Failed to start pprof server") + } else { + i.logger.V(0).Info("Pprof server exited") + } + // if we fail to start the pprof server, don't return an error as it is not critical + // and we can run the rest of the components + return nil + }) + + if !odigosTelemetryDisabled { + // Start telemetry report + g.Go(func() error { + report.Start(groupCtx, i.mgr.GetClient()) + i.logger.V(0).Info("Telemetry reporting exited") + return nil + }) + } + + // start kube manager + g.Go(func() error { + err := i.mgr.Start(groupCtx) + if err != nil { + i.logger.Error(err, "error starting kube manager") + } else { + i.logger.V(0).Info("Kube manager exited") + } + return err + }) + + err := g.Wait() + if err != nil { + i.logger.Error(err, "Instrumentor exited with error") + } +} diff --git a/instrumentor/report/events.go b/instrumentor/report/events.go index 765b5c1e7e..51746179df 100644 --- a/instrumentor/report/events.go +++ b/instrumentor/report/events.go @@ -19,21 +19,40 @@ const ( endpoint = "https://349trlge22.execute-api.us-east-1.amazonaws.com/default/odigos_events_lambda" ) -func Start(c client.Client) { +func Start(ctx context.Context, c client.Client) { installationId := uuid.New().String() - time.Sleep(1 * time.Minute) - reportEvent(c, installationId) - time.Sleep(5 * time.Minute) - reportEvent(c, installationId) + select { + case <-ctx.Done(): + return + case <-time.After(1 * time.Minute): + } + + reportEvent(ctx, c, installationId) + + select { + case <-ctx.Done(): + return + case <-time.After(5 * time.Minute): + } - for range time.Tick(24 * time.Hour) { - reportEvent(c, installationId) + reportEvent(ctx, c, installationId) + + ticker := time.NewTicker(24 * time.Hour) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + reportEvent(ctx, c, installationId) + } } } -func reportEvent(c client.Client, installationId string) { - err := report(c, installationId) +func reportEvent(ctx context.Context, c client.Client, installationId string) { + err := report(ctx, c, installationId) if err != nil { ctrl.Log.Error(err, "error reporting event") } @@ -54,8 +73,7 @@ type event struct { InstallationID string `json:"installation_id"` } -func report(c client.Client, installationId string) error { - ctx := context.Background() +func report(ctx context.Context, c client.Client, installationId string) error { var dests odigosv1.DestinationList err := c.List(ctx, &dests) if err != nil { diff --git a/instrumentor/sdks/sdks.go b/instrumentor/sdks/sdks.go index b45a0e57d1..a7bcd6e3db 100644 --- a/instrumentor/sdks/sdks.go +++ b/instrumentor/sdks/sdks.go @@ -1,8 +1,6 @@ package sdks import ( - "context" - "github.com/odigos-io/odigos/common" "github.com/odigos-io/odigos/k8sutils/pkg/env" ) @@ -41,7 +39,7 @@ func otelSdkConfigOnPrem() map[common.ProgrammingLanguage]common.OtelSdk { } } -func SetDefaultSDKs(ctx context.Context) error { +func SetDefaultSDKs() { odigosTier := env.GetOdigosTierFromEnv() switch odigosTier { @@ -52,8 +50,6 @@ func SetDefaultSDKs(ctx context.Context) error { case common.OnPremOdigosTier: defaultOtelSdkPerLanguage = otelSdkConfigOnPrem() } - - return nil } func copyOtelSdkMap(m map[common.ProgrammingLanguage]common.OtelSdk) map[common.ProgrammingLanguage]common.OtelSdk { From 85563b03a8f0cd1dd1f6c8fc54e90efc2e488a2b Mon Sep 17 00:00:00 2001 From: Tamir David Date: Sun, 16 Feb 2025 14:12:12 +0200 Subject: [PATCH 03/15] Move python out from device (#2427) --- agents/python/configurator/__init__.py | 7 +--- agents/python/setup.py | 2 +- common/consts/consts.go | 10 ++++++ .../webhook_env_injector.go | 33 +++++++++++++++++++ odiglet/pkg/ebpf/sdks/go.go | 5 +-- odiglet/pkg/instrumentation/consts/consts.go | 7 ---- .../instrumentation/instrumentlang/dotnet.go | 4 +-- .../instrumentation/instrumentlang/java.go | 5 +-- .../instrumentation/instrumentlang/nodejs.go | 6 ++-- .../instrumentation/instrumentlang/python.go | 2 +- opampserver/pkg/connection/types.go | 1 - .../sdkconfig/collectorsgroup_controller.go | 6 +--- .../pkg/sdkconfig/configsections/sdk.go | 15 ++++++++- .../pkg/sdkconfig/configsections/types.go | 24 +++++++++++++- opampserver/pkg/sdkconfig/sdkconfig.go | 5 +-- opampserver/pkg/server/consts.go | 5 --- opampserver/pkg/server/handlers.go | 7 ++-- opampserver/pkg/server/server.go | 12 ++----- 18 files changed, 102 insertions(+), 54 deletions(-) delete mode 100644 odiglet/pkg/instrumentation/consts/consts.go delete mode 100644 opampserver/pkg/server/consts.go diff --git a/agents/python/configurator/__init__.py b/agents/python/configurator/__init__.py index 501dc3ebdd..0299a85c56 100644 --- a/agents/python/configurator/__init__.py +++ b/agents/python/configurator/__init__.py @@ -6,9 +6,4 @@ class OdigosPythonConfigurator(sdk_config._BaseConfigurator): def _configure(self, **kwargs): - trace_exporters, metric_exporters, log_exporters = sdk_config._import_exporters( - ['otlp_proto_http'] if sdk_config._get_exporter_names("traces") else [], - [], - [], - ) - initialize_components(trace_exporters, metric_exporters, log_exporters) \ No newline at end of file + initialize_components(trace_exporters=True) \ No newline at end of file diff --git a/agents/python/setup.py b/agents/python/setup.py index c74e119b10..e374609e16 100644 --- a/agents/python/setup.py +++ b/agents/python/setup.py @@ -6,7 +6,7 @@ # index_url = 'http://host.docker.internal:8081/packages/odigos_opentelemetry_python-0.1.1-py3-none-any.whl' install_requires = [ - f"odigos-opentelemetry-python @ {index_url}" if index_url else "odigos-opentelemetry-python==1.0.26" + f"odigos-opentelemetry-python @ {index_url}" if index_url else "odigos-opentelemetry-python==1.0.27" ] setup( diff --git a/common/consts/consts.go b/common/consts/consts.go index c5b084447e..3fbd014056 100644 --- a/common/consts/consts.go +++ b/common/consts/consts.go @@ -52,3 +52,13 @@ const ( var ( ErrorPodsNotFound = errors.New("could not find a ready pod") ) + +// Agents related consts +var ( + OtelExporterEndpointEnvName = "OTEL_EXPORTER_OTLP_ENDPOINT" + // Python related ones + OtelPythonConfiguratorEnvName = "OTEL_PYTHON_CONFIGURATOR" + OtelPythonConfiguratorEnvValue = "odigos-python-configurator" + OpampServerHostEnvName = "ODIGOS_OPAMP_SERVER_HOST" + OpAMPPort = 4320 +) diff --git a/instrumentor/internal/webhook_env_injector/webhook_env_injector.go b/instrumentor/internal/webhook_env_injector/webhook_env_injector.go index 8834ca16d5..aeddda9553 100644 --- a/instrumentor/internal/webhook_env_injector/webhook_env_injector.go +++ b/instrumentor/internal/webhook_env_injector/webhook_env_injector.go @@ -1,10 +1,12 @@ package webhookenvinjector import ( + "fmt" "strings" "github.com/go-logr/logr" "github.com/odigos-io/odigos/common" + commonconsts "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/common/envOverwrite" corev1 "k8s.io/api/core/v1" @@ -14,6 +16,12 @@ import ( func InjectOdigosAgentEnvVars(logger logr.Logger, podWorkload k8sconsts.PodWorkload, container *corev1.Container, otelsdk common.OtelSdk, runtimeDetails *v1alpha1.RuntimeDetailsByContainer) { + + // This is a temporary and should be migrated to distro + if runtimeDetails.Language == common.PythonProgrammingLanguage && otelsdk == common.OtelSdkNativeCommunity { + InjectPythonNativeEnvVars(container) + } + envVarsPerLanguage := getEnvVarNamesForLanguage(runtimeDetails.Language) if envVarsPerLanguage == nil { return @@ -139,3 +147,28 @@ func getContainerEnvVarPointer(containerEnv *[]corev1.EnvVar, envVarName string) } return nil } + +func InjectPythonNativeEnvVars(container *corev1.Container) { + container.Env = append(container.Env, + corev1.EnvVar{ + Name: "NODE_IP", + ValueFrom: &corev1.EnvVarSource{ + FieldRef: &corev1.ObjectFieldSelector{ + FieldPath: "status.hostIP", + }, + }, + }, + corev1.EnvVar{ + Name: commonconsts.OpampServerHostEnvName, + Value: fmt.Sprintf("$(NODE_IP):%d", commonconsts.OpAMPPort), + }, + corev1.EnvVar{ + Name: commonconsts.OtelExporterEndpointEnvName, + Value: fmt.Sprintf("http://$(NODE_IP):%d", commonconsts.OTLPHttpPort), + }, + corev1.EnvVar{ + Name: commonconsts.OtelPythonConfiguratorEnvName, + Value: commonconsts.OtelPythonConfiguratorEnvValue, + }, + ) +} diff --git a/odiglet/pkg/ebpf/sdks/go.go b/odiglet/pkg/ebpf/sdks/go.go index 72b0aa0a19..47552a09d2 100644 --- a/odiglet/pkg/ebpf/sdks/go.go +++ b/odiglet/pkg/ebpf/sdks/go.go @@ -6,11 +6,12 @@ import ( odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" "github.com/odigos-io/odigos/common" + commonconsts "github.com/odigos-io/odigos/common/consts" + "github.com/odigos-io/odigos/instrumentation" "github.com/odigos-io/odigos/odiglet/pkg/ebpf" "github.com/odigos-io/odigos/odiglet/pkg/env" - "github.com/odigos-io/odigos/odiglet/pkg/instrumentation/consts" "github.com/odigos-io/odigos/odiglet/pkg/log" "go.opentelemetry.io/auto" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" @@ -35,7 +36,7 @@ func (g *GoInstrumentationFactory) CreateInstrumentation(ctx context.Context, pi defaultExporter, err := otlptracegrpc.New( ctx, otlptracegrpc.WithInsecure(), - otlptracegrpc.WithEndpoint(fmt.Sprintf("%s:%d", env.Current.NodeIP, consts.OTLPPort)), + otlptracegrpc.WithEndpoint(fmt.Sprintf("%s:%d", env.Current.NodeIP, commonconsts.OTLPPort)), ) if err != nil { return nil, fmt.Errorf("failed to create exporter: %w", err) diff --git a/odiglet/pkg/instrumentation/consts/consts.go b/odiglet/pkg/instrumentation/consts/consts.go deleted file mode 100644 index b1a5fcac83..0000000000 --- a/odiglet/pkg/instrumentation/consts/consts.go +++ /dev/null @@ -1,7 +0,0 @@ -package consts - -const ( - OTLPPort = 4317 - OTLPHttpPort = 4318 - OpAMPPort = 4320 -) diff --git a/odiglet/pkg/instrumentation/instrumentlang/dotnet.go b/odiglet/pkg/instrumentation/instrumentlang/dotnet.go index a5cf0fafee..9bf74f887a 100644 --- a/odiglet/pkg/instrumentation/instrumentlang/dotnet.go +++ b/odiglet/pkg/instrumentation/instrumentlang/dotnet.go @@ -5,8 +5,8 @@ import ( "runtime" "github.com/odigos-io/odigos/common" + commonconsts "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/odiglet/pkg/env" - "github.com/odigos-io/odigos/odiglet/pkg/instrumentation/consts" "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" ) @@ -37,7 +37,7 @@ func DotNet(deviceId string, uniqueDestinationSignals map[common.ObservabilitySi profilerEndVar: profilerId, profilerPathEnv: fmt.Sprintf(profilerPath, getArch()), tracerHomeEnv: tracerHome, - collectorUrlEnv: fmt.Sprintf("http://%s:%d", env.Current.NodeIP, consts.OTLPHttpPort), + collectorUrlEnv: fmt.Sprintf("http://%s:%d", env.Current.NodeIP, commonconsts.OTLPHttpPort), serviceNameEnv: deviceId, exportTypeEnv: "otlp", resourceAttrEnv: "odigos.device=dotnet", diff --git a/odiglet/pkg/instrumentation/instrumentlang/java.go b/odiglet/pkg/instrumentation/instrumentlang/java.go index e70f2510fc..d2bf961cb1 100644 --- a/odiglet/pkg/instrumentation/instrumentlang/java.go +++ b/odiglet/pkg/instrumentation/instrumentlang/java.go @@ -4,8 +4,9 @@ import ( "fmt" "github.com/odigos-io/odigos/common" + commonconsts "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/odiglet/pkg/env" - "github.com/odigos-io/odigos/odiglet/pkg/instrumentation/consts" + "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" ) @@ -22,7 +23,7 @@ const ( ) func Java(deviceId string, uniqueDestinationSignals map[common.ObservabilitySignal]struct{}) *v1beta1.ContainerAllocateResponse { - otlpEndpoint := fmt.Sprintf("http://%s:%d", env.Current.NodeIP, consts.OTLPPort) + otlpEndpoint := fmt.Sprintf("http://%s:%d", env.Current.NodeIP, commonconsts.OTLPPort) logsExporter := "none" metricsExporter := "none" diff --git a/odiglet/pkg/instrumentation/instrumentlang/nodejs.go b/odiglet/pkg/instrumentation/instrumentlang/nodejs.go index e77cd22dae..ed247db630 100644 --- a/odiglet/pkg/instrumentation/instrumentlang/nodejs.go +++ b/odiglet/pkg/instrumentation/instrumentlang/nodejs.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/odigos-io/odigos/common" + commonconsts "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/odiglet/pkg/env" - "github.com/odigos-io/odigos/odiglet/pkg/instrumentation/consts" "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" ) @@ -18,8 +18,8 @@ const ( ) func NodeJS(deviceId string, uniqueDestinationSignals map[common.ObservabilitySignal]struct{}) *v1beta1.ContainerAllocateResponse { - otlpEndpoint := fmt.Sprintf("http://%s:%d", env.Current.NodeIP, consts.OTLPHttpPort) - opampServerHost := fmt.Sprintf("%s:%d", env.Current.NodeIP, consts.OpAMPPort) + otlpEndpoint := fmt.Sprintf("http://%s:%d", env.Current.NodeIP, commonconsts.OTLPHttpPort) + opampServerHost := fmt.Sprintf("%s:%d", env.Current.NodeIP, commonconsts.OpAMPPort) return &v1beta1.ContainerAllocateResponse{ Envs: map[string]string{ diff --git a/odiglet/pkg/instrumentation/instrumentlang/python.go b/odiglet/pkg/instrumentation/instrumentlang/python.go index d5b4f3fdc7..5d9cf536f3 100644 --- a/odiglet/pkg/instrumentation/instrumentlang/python.go +++ b/odiglet/pkg/instrumentation/instrumentlang/python.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/odigos-io/odigos/common" + "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/odiglet/pkg/env" - "github.com/odigos-io/odigos/odiglet/pkg/instrumentation/consts" "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" ) diff --git a/opampserver/pkg/connection/types.go b/opampserver/pkg/connection/types.go index 703f89327c..339a8de883 100644 --- a/opampserver/pkg/connection/types.go +++ b/opampserver/pkg/connection/types.go @@ -10,7 +10,6 @@ import ( ) type ConnectionInfo struct { - DeviceId string Workload k8sconsts.PodWorkload Pod *corev1.Pod ContainerName string diff --git a/opampserver/pkg/sdkconfig/collectorsgroup_controller.go b/opampserver/pkg/sdkconfig/collectorsgroup_controller.go index c3c1a50c85..8e9aa3dc0a 100644 --- a/opampserver/pkg/sdkconfig/collectorsgroup_controller.go +++ b/opampserver/pkg/sdkconfig/collectorsgroup_controller.go @@ -2,11 +2,9 @@ package sdkconfig import ( "context" - "slices" "github.com/odigos-io/odigos/api/k8sconsts" odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" - "github.com/odigos-io/odigos/common" "github.com/odigos-io/odigos/opampserver/pkg/connection" "github.com/odigos-io/odigos/opampserver/pkg/sdkconfig/configsections" "github.com/odigos-io/odigos/opampserver/protobufs" @@ -38,11 +36,9 @@ func (d *CollectorsGroupReconciler) Reconcile(ctx context.Context, req ctrl.Requ return ctrl.Result{}, client.IgnoreNotFound(err) } - tracesEnabled := slices.Contains(collectorsGroup.Status.ReceiverSignals, common.TracesObservabilitySignal) - d.ConnectionCache.UpdateAllConnectionConfigs(func(connInfo *connection.ConnectionInfo) *protobufs.AgentConfigMap { - remoteConfigSdk := configsections.CalcSdkRemoteConfig(connInfo.RemoteResourceAttributes, tracesEnabled) + remoteConfigSdk := configsections.CalcSdkRemoteConfig(connInfo.RemoteResourceAttributes, collectorsGroup.Status.ReceiverSignals) opampRemoteConfigSdk, sdkSectionName, err := configsections.SdkRemoteConfigToOpamp(remoteConfigSdk) if err != nil { logger.Info("failed to calculate SDK remote config", "error", err) diff --git a/opampserver/pkg/sdkconfig/configsections/sdk.go b/opampserver/pkg/sdkconfig/configsections/sdk.go index fd6aaccee1..823a6188e5 100644 --- a/opampserver/pkg/sdkconfig/configsections/sdk.go +++ b/opampserver/pkg/sdkconfig/configsections/sdk.go @@ -3,12 +3,17 @@ package configsections import ( "encoding/json" "fmt" + "slices" + "github.com/odigos-io/odigos/common" "github.com/odigos-io/odigos/opampserver/pkg/sdkconfig/configresolvers" "github.com/odigos-io/odigos/opampserver/protobufs" ) -func CalcSdkRemoteConfig(remoteResourceAttributes []configresolvers.ResourceAttribute, tracesEnabled bool) *RemoteConfigSdk { +func CalcSdkRemoteConfig(remoteResourceAttributes []configresolvers.ResourceAttribute, signals []common.ObservabilitySignal) *RemoteConfigSdk { + tracesEnabled := slices.Contains(signals, common.TracesObservabilitySignal) + metricsEnabled := slices.Contains(signals, common.MetricsObservabilitySignal) + logsEnabled := slices.Contains(signals, common.LogsObservabilitySignal) remoteConfigSdk := RemoteConfigSdk{ RemoteResourceAttributes: remoteResourceAttributes, @@ -16,6 +21,14 @@ func CalcSdkRemoteConfig(remoteResourceAttributes []configresolvers.ResourceAttr Enabled: tracesEnabled, DefaultEnabledValue: true, // TODO: read from instrumentation config CRD with fallback }, + LogsSignal: LogSignalGeneralConfig{ + Enabled: logsEnabled, + DefaultEnabledValue: true, + }, + MetricsSignal: MetricSignalGeneralConfig{ + Enabled: metricsEnabled, + DefaultEnabledValue: true, + }, } return &remoteConfigSdk diff --git a/opampserver/pkg/sdkconfig/configsections/types.go b/opampserver/pkg/sdkconfig/configsections/types.go index 0c0ad3915c..8237c29555 100644 --- a/opampserver/pkg/sdkconfig/configsections/types.go +++ b/opampserver/pkg/sdkconfig/configsections/types.go @@ -23,11 +23,33 @@ type TraceSignalGeneralConfig struct { DefaultEnabledValue bool `json:"defaultEnabledValue"` } +type LogSignalGeneralConfig struct { + + // reflects if the logs signals is enabled for this SDK. + // if false, the SDK should not produce any logs. + // this is to spare computation on the agent in case the receiver is not setup to receive logs. + Enabled bool `json:"enabled"` + + DefaultEnabledValue bool `json:"defaultEnabledValue"` +} + +type MetricSignalGeneralConfig struct { + + // reflects if the metrics signals is enabled for this SDK. + // if false, the SDK should not produce any metrics. + // this is to spare computation on the agent in case the receiver is not setup to receive metrics. + Enabled bool `json:"enabled"` + + DefaultEnabledValue bool `json:"defaultEnabledValue"` +} + type RemoteConfigSdk struct { RemoteResourceAttributes []configresolvers.ResourceAttribute `json:"remoteResourceAttributes"` // general configuration for trace signals in the SDK level. - TraceSignal TraceSignalGeneralConfig `json:"traceSignal"` + TraceSignal TraceSignalGeneralConfig `json:"traceSignal"` + LogsSignal LogSignalGeneralConfig `json:"logsSignal"` + MetricsSignal MetricSignalGeneralConfig `json:"metricsSignal"` } type RemoteConfigInstrumentationLibrary struct { diff --git a/opampserver/pkg/sdkconfig/sdkconfig.go b/opampserver/pkg/sdkconfig/sdkconfig.go index 7877f1030e..a05aabbe6e 100644 --- a/opampserver/pkg/sdkconfig/sdkconfig.go +++ b/opampserver/pkg/sdkconfig/sdkconfig.go @@ -2,13 +2,11 @@ package sdkconfig import ( "context" - "slices" "github.com/go-logr/logr" "github.com/odigos-io/odigos/api/k8sconsts" odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" - "github.com/odigos-io/odigos/common" "github.com/odigos-io/odigos/opampserver/pkg/connection" "github.com/odigos-io/odigos/opampserver/pkg/sdkconfig/configresolvers" "github.com/odigos-io/odigos/opampserver/pkg/sdkconfig/configsections" @@ -60,9 +58,8 @@ func (m *SdkConfigManager) GetFullConfig(ctx context.Context, remoteResourceAttr if err != nil { return nil, err } - tracesEnabled := slices.Contains(nodeCollectorGroup.Status.ReceiverSignals, common.TracesObservabilitySignal) - sdkRemoteConfig := configsections.CalcSdkRemoteConfig(remoteResourceAttributes, tracesEnabled) + sdkRemoteConfig := configsections.CalcSdkRemoteConfig(remoteResourceAttributes, nodeCollectorGroup.Status.ReceiverSignals) opampRemoteConfigSdk, sdkSectionName, err := configsections.SdkRemoteConfigToOpamp(sdkRemoteConfig) if err != nil { m.logger.Error(err, "failed to marshal server offered resource attributes") diff --git a/opampserver/pkg/server/consts.go b/opampserver/pkg/server/consts.go deleted file mode 100644 index 4460b0e293..0000000000 --- a/opampserver/pkg/server/consts.go +++ /dev/null @@ -1,5 +0,0 @@ -package server - -const ( - OpAmpServerDefaultPort = 4320 -) diff --git a/opampserver/pkg/server/handlers.go b/opampserver/pkg/server/handlers.go index 1fa834d972..172eb156e1 100644 --- a/opampserver/pkg/server/handlers.go +++ b/opampserver/pkg/server/handlers.go @@ -40,13 +40,13 @@ type opampAgentAttributesKeys struct { Namespace string } -func (c *ConnectionHandlers) OnNewConnection(ctx context.Context, deviceId string, firstMessage *protobufs.AgentToServer) (*connection.ConnectionInfo, *protobufs.ServerToAgent, error) { +func (c *ConnectionHandlers) OnNewConnection(ctx context.Context, firstMessage *protobufs.AgentToServer) (*connection.ConnectionInfo, *protobufs.ServerToAgent, error) { if firstMessage.AgentDescription == nil { // first message must be agent description. // it is, however, possible that the OpAMP server restarted, and the agent is trying to reconnect. // in which case we send back flag and request full status update. - c.logger.Info("Agent description is missing in the first OpAMP message, requesting full state update", "deviceId", deviceId) + c.logger.Info("Agent description is missing in the first OpAMP message, requesting full state update") serverToAgent := &protobufs.ServerToAgent{ Flags: uint64(protobufs.ServerToAgentFlags_ServerToAgentFlags_ReportFullState), } @@ -102,10 +102,9 @@ func (c *ConnectionHandlers) OnNewConnection(ctx context.Context, deviceId strin c.logger.Error(err, "failed to get full config", "k8sAttributes", k8sAttributes) return nil, nil, err } - c.logger.Info("new OpAMP client connected", "deviceId", deviceId, "namespace", k8sAttributes.Namespace, "podName", k8sAttributes.PodName, "instrumentedAppName", instrumentedAppName, "workloadKind", k8sAttributes.WorkloadKind, "workloadName", k8sAttributes.WorkloadName, "containerName", k8sAttributes.ContainerName, "otelServiceName", serviceName) + c.logger.Info("new OpAMP client connected", "namespace", k8sAttributes.Namespace, "podName", k8sAttributes.PodName, "instrumentedAppName", instrumentedAppName, "workloadKind", k8sAttributes.WorkloadKind, "workloadName", k8sAttributes.WorkloadName, "containerName", k8sAttributes.ContainerName, "otelServiceName", serviceName) connectionInfo := &connection.ConnectionInfo{ - DeviceId: deviceId, Workload: podWorkload, Pod: pod, ContainerName: k8sAttributes.ContainerName, diff --git a/opampserver/pkg/server/server.go b/opampserver/pkg/server/server.go index fdfd44d277..c676d4bedc 100644 --- a/opampserver/pkg/server/server.go +++ b/opampserver/pkg/server/server.go @@ -9,6 +9,7 @@ import ( "time" "github.com/go-logr/logr" + commonconsts "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/opampserver/pkg/connection" "github.com/odigos-io/odigos/opampserver/pkg/sdkconfig" "github.com/odigos-io/odigos/opampserver/protobufs" @@ -18,7 +19,7 @@ import ( ) func StartOpAmpServer(ctx context.Context, logger logr.Logger, mgr ctrl.Manager, kubeClientSet *kubernetes.Clientset, nodeName string, odigosNs string) error { - listenEndpoint := fmt.Sprintf("0.0.0.0:%d", OpAmpServerDefaultPort) + listenEndpoint := fmt.Sprintf("0.0.0.0:%d", commonconsts.OpAMPPort) logger.Info("Starting opamp server", "listenEndpoint", listenEndpoint) connectionCache := connection.NewConnectionsCache() @@ -66,19 +67,12 @@ func StartOpAmpServer(ctx context.Context, logger logr.Logger, mgr ctrl.Manager, return } - deviceId := req.Header.Get("X-Odigos-DeviceId") - if deviceId == "" { - logger.Error(err, "X-Odigos-DeviceId header is missing") - w.WriteHeader(http.StatusUnauthorized) - return - } - isAgentDisconnect := agentToServer.AgentDisconnect != nil var serverToAgent *protobufs.ServerToAgent connectionInfo, exists := connectionCache.GetConnection(instanceUid) if !exists { - connectionInfo, serverToAgent, err = handlers.OnNewConnection(ctx, deviceId, &agentToServer) + connectionInfo, serverToAgent, err = handlers.OnNewConnection(ctx, &agentToServer) if err != nil { logger.Error(err, "Failed to process new connection") w.WriteHeader(http.StatusInternalServerError) From 79abd92ee2e1fe1fbcc204efd7155477f56968ed Mon Sep 17 00:00:00 2001 From: Tamir David Date: Sun, 16 Feb 2025 17:13:56 +0200 Subject: [PATCH 04/15] Move python out from device enterprise (#2448) --- common/consts/consts.go | 9 ++-- .../webhook_env_injector.go | 52 +++++++++++++------ 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/common/consts/consts.go b/common/consts/consts.go index 3fbd014056..aaac23dc59 100644 --- a/common/consts/consts.go +++ b/common/consts/consts.go @@ -57,8 +57,9 @@ var ( var ( OtelExporterEndpointEnvName = "OTEL_EXPORTER_OTLP_ENDPOINT" // Python related ones - OtelPythonConfiguratorEnvName = "OTEL_PYTHON_CONFIGURATOR" - OtelPythonConfiguratorEnvValue = "odigos-python-configurator" - OpampServerHostEnvName = "ODIGOS_OPAMP_SERVER_HOST" - OpAMPPort = 4320 + OtelPythonConfiguratorEnvName = "OTEL_PYTHON_CONFIGURATOR" + OtelPythonOSSConfiguratorEnvValue = "odigos-python-configurator" + OtelPythonEBPFConfiguratorEnvValue = "ebpf" + OpampServerHostEnvName = "ODIGOS_OPAMP_SERVER_HOST" + OpAMPPort = 4320 ) diff --git a/instrumentor/internal/webhook_env_injector/webhook_env_injector.go b/instrumentor/internal/webhook_env_injector/webhook_env_injector.go index aeddda9553..3e010ee339 100644 --- a/instrumentor/internal/webhook_env_injector/webhook_env_injector.go +++ b/instrumentor/internal/webhook_env_injector/webhook_env_injector.go @@ -8,6 +8,7 @@ import ( "github.com/odigos-io/odigos/common" commonconsts "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/common/envOverwrite" + "github.com/odigos-io/odigos/k8sutils/pkg/env" corev1 "k8s.io/api/core/v1" "github.com/odigos-io/odigos/api/k8sconsts" @@ -18,8 +19,9 @@ func InjectOdigosAgentEnvVars(logger logr.Logger, podWorkload k8sconsts.PodWorkl otelsdk common.OtelSdk, runtimeDetails *v1alpha1.RuntimeDetailsByContainer) { // This is a temporary and should be migrated to distro - if runtimeDetails.Language == common.PythonProgrammingLanguage && otelsdk == common.OtelSdkNativeCommunity { - InjectPythonNativeEnvVars(container) + if runtimeDetails.Language == common.PythonProgrammingLanguage && otelsdk == common.OtelSdkNativeCommunity || + runtimeDetails.Language == common.PythonProgrammingLanguage && otelsdk == common.OtelSdkEbpfEnterprise { + InjectPythonEnvVars(container) } envVarsPerLanguage := getEnvVarNamesForLanguage(runtimeDetails.Language) @@ -148,9 +150,10 @@ func getContainerEnvVarPointer(containerEnv *[]corev1.EnvVar, envVarName string) return nil } -func InjectPythonNativeEnvVars(container *corev1.Container) { - container.Env = append(container.Env, - corev1.EnvVar{ +func InjectPythonEnvVars(container *corev1.Container) { + // Common environment variables for all tiers + commonEnvs := []corev1.EnvVar{ + { Name: "NODE_IP", ValueFrom: &corev1.EnvVarSource{ FieldRef: &corev1.ObjectFieldSelector{ @@ -158,17 +161,36 @@ func InjectPythonNativeEnvVars(container *corev1.Container) { }, }, }, - corev1.EnvVar{ + { Name: commonconsts.OpampServerHostEnvName, Value: fmt.Sprintf("$(NODE_IP):%d", commonconsts.OpAMPPort), }, - corev1.EnvVar{ - Name: commonconsts.OtelExporterEndpointEnvName, - Value: fmt.Sprintf("http://$(NODE_IP):%d", commonconsts.OTLPHttpPort), - }, - corev1.EnvVar{ - Name: commonconsts.OtelPythonConfiguratorEnvName, - Value: commonconsts.OtelPythonConfiguratorEnvValue, - }, - ) + } + + // Determine envs based on the tier + odigosTier := env.GetOdigosTierFromEnv() + + var tierSpecificEnvs []corev1.EnvVar + if odigosTier == common.OnPremOdigosTier { + tierSpecificEnvs = []corev1.EnvVar{ + { + Name: commonconsts.OtelPythonConfiguratorEnvName, + Value: commonconsts.OtelPythonEBPFConfiguratorEnvValue, + }, + } + } else { + tierSpecificEnvs = []corev1.EnvVar{ + { + Name: commonconsts.OtelPythonConfiguratorEnvName, + Value: commonconsts.OtelPythonOSSConfiguratorEnvValue, + }, + { + Name: commonconsts.OtelExporterEndpointEnvName, + Value: fmt.Sprintf("http://$(NODE_IP):%d", commonconsts.OTLPHttpPort), + }, + } + } + + container.Env = append(container.Env, commonEnvs...) + container.Env = append(container.Env, tierSpecificEnvs...) } From 2d1339521434970b79f60f4349fd3c65ae89f919 Mon Sep 17 00:00:00 2001 From: Ben Elferink Date: Sun, 16 Feb 2025 20:54:59 +0200 Subject: [PATCH 05/15] Fix: UI favicon, conditions layout, namespace selection (#2449) --- frontend/graph/generated.go | 69 ++++++++ frontend/graph/model/models_gen.go | 44 +++++ frontend/graph/schema.graphqls | 7 + frontend/services/config.go | 8 + frontend/webapp/@types/config.ts | 3 + .../app/(setup)/choose-destination/page.tsx | 12 +- .../app/(setup)/choose-sources/page.tsx | 16 +- frontend/webapp/app/layout.tsx | 16 +- frontend/webapp/app/overview/page.tsx | 56 +------ frontend/webapp/app/page.tsx | 10 +- .../lib-imports/overview-header.tsx | 4 +- .../components/lib-imports/overview-main.tsx | 59 +++++++ .../overview-modals-and-drawers.tsx | 14 +- .../components/providers/page-container.tsx | 30 ++++ frontend/webapp/components/styled.tsx | 14 -- frontend/webapp/cypress/constants/index.ts | 152 ------------------ frontend/webapp/cypress/e2e/03-sources.cy.ts | 20 +-- .../webapp/cypress/e2e/04-destinations.cy.ts | 1 - frontend/webapp/cypress/e2e/05-actions.cy.ts | 1 - frontend/webapp/cypress/e2e/06-rules.cy.ts | 11 +- frontend/webapp/graphql/queries/config.ts | 1 + .../compute-platform/usePaginatedSources.ts | 1 + frontend/webapp/hooks/config/useConfig.ts | 8 +- .../hooks/describe/useDescribeOdigos.ts | 22 ++- .../hooks/describe/useDescribeSource.ts | 23 +-- .../useInstrumentationRuleCRUD.ts | 2 +- frontend/webapp/package.json | 16 +- frontend/webapp/public/manifest.json | 4 +- frontend/webapp/yarn.lock | 93 ++++++----- 29 files changed, 366 insertions(+), 351 deletions(-) create mode 100644 frontend/webapp/components/lib-imports/overview-main.tsx create mode 100644 frontend/webapp/components/providers/page-container.tsx diff --git a/frontend/graph/generated.go b/frontend/graph/generated.go index f975906525..e3c27515d6 100644 --- a/frontend/graph/generated.go +++ b/frontend/graph/generated.go @@ -217,6 +217,7 @@ type ComplexityRoot struct { GetConfigResponse struct { Installation func(childComplexity int) int Readonly func(childComplexity int) int + Tier func(childComplexity int) int } GetDestinationCategories struct { @@ -1328,6 +1329,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.GetConfigResponse.Readonly(childComplexity), true + case "GetConfigResponse.tier": + if e.complexity.GetConfigResponse.Tier == nil { + break + } + + return e.complexity.GetConfigResponse.Tier(childComplexity), true + case "GetDestinationCategories.categories": if e.complexity.GetDestinationCategories.Categories == nil { break @@ -8143,6 +8151,50 @@ func (ec *executionContext) fieldContext_GetConfigResponse_installation(_ contex return fc, nil } +func (ec *executionContext) _GetConfigResponse_tier(ctx context.Context, field graphql.CollectedField, obj *model.GetConfigResponse) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_GetConfigResponse_tier(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Tier, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(model.Tier) + fc.Result = res + return ec.marshalNTier2githubᚗcomᚋodigosᚑioᚋodigosᚋfrontendᚋgraphᚋmodelᚐTier(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_GetConfigResponse_tier(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "GetConfigResponse", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Tier does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _GetConfigResponse_readonly(ctx context.Context, field graphql.CollectedField, obj *model.GetConfigResponse) (ret graphql.Marshaler) { fc, err := ec.fieldContext_GetConfigResponse_readonly(ctx, field) if err != nil { @@ -14833,6 +14885,8 @@ func (ec *executionContext) fieldContext_Query_config(_ context.Context, field g switch field.Name { case "installation": return ec.fieldContext_GetConfigResponse_installation(ctx, field) + case "tier": + return ec.fieldContext_GetConfigResponse_tier(ctx, field) case "readonly": return ec.fieldContext_GetConfigResponse_readonly(ctx, field) } @@ -21071,6 +21125,11 @@ func (ec *executionContext) _GetConfigResponse(ctx context.Context, sel ast.Sele if out.Values[i] == graphql.Null { out.Invalids++ } + case "tier": + out.Values[i] = ec._GetConfigResponse_tier(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "readonly": out.Values[i] = ec._GetConfigResponse_readonly(ctx, field, obj) if out.Values[i] == graphql.Null { @@ -25304,6 +25363,16 @@ func (ec *executionContext) marshalNTestConnectionResponse2ᚖgithubᚗcomᚋodi return ec._TestConnectionResponse(ctx, sel, v) } +func (ec *executionContext) unmarshalNTier2githubᚗcomᚋodigosᚑioᚋodigosᚋfrontendᚋgraphᚋmodelᚐTier(ctx context.Context, v interface{}) (model.Tier, error) { + var res model.Tier + err := res.UnmarshalGQL(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNTier2githubᚗcomᚋodigosᚑioᚋodigosᚋfrontendᚋgraphᚋmodelᚐTier(ctx context.Context, sel ast.SelectionSet, v model.Tier) graphql.Marshaler { + return v +} + func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler { return ec.___Directive(ctx, sel, &v) } diff --git a/frontend/graph/model/models_gen.go b/frontend/graph/model/models_gen.go index 887f09abfb..e4a07f4d97 100644 --- a/frontend/graph/model/models_gen.go +++ b/frontend/graph/model/models_gen.go @@ -277,6 +277,7 @@ type FieldInput struct { type GetConfigResponse struct { Installation InstallationStatus `json:"installation"` + Tier Tier `json:"tier"` Readonly bool `json:"readonly"` } @@ -1018,3 +1019,46 @@ func (e *SpanKind) UnmarshalGQL(v interface{}) error { func (e SpanKind) MarshalGQL(w io.Writer) { fmt.Fprint(w, strconv.Quote(e.String())) } + +type Tier string + +const ( + TierCommunity Tier = "community" + TierCloud Tier = "cloud" + TierOnprem Tier = "onprem" +) + +var AllTier = []Tier{ + TierCommunity, + TierCloud, + TierOnprem, +} + +func (e Tier) IsValid() bool { + switch e { + case TierCommunity, TierCloud, TierOnprem: + return true + } + return false +} + +func (e Tier) String() string { + return string(e) +} + +func (e *Tier) UnmarshalGQL(v interface{}) error { + str, ok := v.(string) + if !ok { + return fmt.Errorf("enums must be strings") + } + + *e = Tier(str) + if !e.IsValid() { + return fmt.Errorf("%s is not a valid Tier", str) + } + return nil +} + +func (e Tier) MarshalGQL(w io.Writer) { + fmt.Fprint(w, strconv.Quote(e.String())) +} diff --git a/frontend/graph/schema.graphqls b/frontend/graph/schema.graphqls index 38ede1950e..099830268f 100644 --- a/frontend/graph/schema.graphqls +++ b/frontend/graph/schema.graphqls @@ -44,6 +44,12 @@ enum InstallationStatus { FINISHED } +enum Tier { + community + cloud + onprem +} + type SourceContainer { containerName: String! language: String! @@ -296,6 +302,7 @@ type Destination { type GetConfigResponse { installation: InstallationStatus! + tier: Tier! readonly: Boolean! } diff --git a/frontend/services/config.go b/frontend/services/config.go index 762e273ff1..eadae8e379 100644 --- a/frontend/services/config.go +++ b/frontend/services/config.go @@ -9,6 +9,7 @@ import ( "github.com/odigos-io/odigos/common/consts" "github.com/odigos-io/odigos/frontend/graph/model" "github.com/odigos-io/odigos/frontend/kube" + "github.com/odigos-io/odigos/frontend/services/describe/odigos_describe" "github.com/odigos-io/odigos/k8sutils/pkg/env" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -31,6 +32,13 @@ func GetConfig(ctx context.Context) model.GetConfigResponse { response.Readonly = IsReadonlyMode(ctx) + describe, err := odigos_describe.GetOdigosDescription(ctx) + if err != nil { + response.Tier = model.Tier(common.CommunityOdigosTier) + } else { + response.Tier = model.Tier(describe.Tier.Value) + } + if !isSourceCreated(ctx) && !isDestinationConnected(ctx) { response.Installation = model.InstallationStatus(NewInstallation) } else { diff --git a/frontend/webapp/@types/config.ts b/frontend/webapp/@types/config.ts index 3eda59eb98..215f531d9f 100644 --- a/frontend/webapp/@types/config.ts +++ b/frontend/webapp/@types/config.ts @@ -1,3 +1,5 @@ +import { TIER } from '@odigos/ui-utils'; + export enum CONFIG_INSTALLATION { NEW = 'NEW', APPS_SELECTED = 'APPS_SELECTED', @@ -7,6 +9,7 @@ export enum CONFIG_INSTALLATION { export interface FetchedConfig { config: { installation: CONFIG_INSTALLATION; + tier: TIER; readonly: boolean; }; } diff --git a/frontend/webapp/app/(setup)/choose-destination/page.tsx b/frontend/webapp/app/(setup)/choose-destination/page.tsx index e478c95cfb..0511872437 100644 --- a/frontend/webapp/app/(setup)/choose-destination/page.tsx +++ b/frontend/webapp/app/(setup)/choose-destination/page.tsx @@ -6,13 +6,11 @@ import { Stepper } from '@odigos/ui-components'; import { ENTITY_TYPES } from '@odigos/ui-utils'; import { OnboardingStepperWrapper } from '@/components'; import SetupHeader from '@/components/lib-imports/setup-header'; +import PageContainer from '@/components/providers/page-container'; import { DestinationSelectionForm, useSetupStore } from '@odigos/ui-containers'; -import { useDestinationCategories, useDestinationCRUD, usePotentialDestinations, useSSE, useTestConnection } from '@/hooks'; +import { useDestinationCategories, useDestinationCRUD, usePotentialDestinations, useTestConnection } from '@/hooks'; export default function Page() { - // call important hooks that should run on page-mount - useSSE(); - const router = useRouter(); const { configuredSources } = useSetupStore(); @@ -25,9 +23,8 @@ export default function Page() { const [isLoading, setIsLoading] = useState(false); return ( - <> + - - !!sources.length)} goToSources={() => router.push(ROUTES.CHOOSE_SOURCES)} /> - + ); } diff --git a/frontend/webapp/app/(setup)/choose-sources/page.tsx b/frontend/webapp/app/(setup)/choose-sources/page.tsx index 0644f03e33..59810c56cc 100644 --- a/frontend/webapp/app/(setup)/choose-sources/page.tsx +++ b/frontend/webapp/app/(setup)/choose-sources/page.tsx @@ -1,27 +1,24 @@ 'use client'; import React, { useRef, useState } from 'react'; -import { useNamespace, useSSE } from '@/hooks'; +import { useNamespace } from '@/hooks'; import { ENTITY_TYPES } from '@odigos/ui-utils'; import { Stepper } from '@odigos/ui-components'; import { OnboardingStepperWrapper } from '@/components'; import SetupHeader from '@/components/lib-imports/setup-header'; -import { SourceSelectionForm, type SourceSelectionFormRef } from '@odigos/ui-containers'; +import PageContainer from '@/components/providers/page-container'; +import { SourceSelectionForm, ToastList, type SourceSelectionFormRef } from '@odigos/ui-containers'; export default function Page() { - // call important hooks that should run on page-mount - useSSE(); - const [selectedNamespace, setSelectedNamespace] = useState(''); const onSelectNamespace = (ns: string) => setSelectedNamespace((prev) => (prev === ns ? '' : ns)); const { allNamespaces, data: namespace, loading: nsLoad } = useNamespace(selectedNamespace); - const formRef = useRef(null); return ( - <> + + - - - + ); } diff --git a/frontend/webapp/app/layout.tsx b/frontend/webapp/app/layout.tsx index fa26cc1a66..d2cc6226cf 100644 --- a/frontend/webapp/app/layout.tsx +++ b/frontend/webapp/app/layout.tsx @@ -3,9 +3,6 @@ import React, { type PropsWithChildren } from 'react'; import dynamic from 'next/dynamic'; import Theme from '@odigos/ui-theme'; -import { LayoutContainer } from '@/components'; -import { ToastList } from '@odigos/ui-containers'; -import ErrorBoundary from '@/components/providers/error-boundary'; import ApolloProvider from '@/components/providers/apollo-provider'; const ThemeProvider = dynamic(() => import('@/components/providers/theme-provider'), { ssr: false }); @@ -17,7 +14,7 @@ function RootLayout({ children }: PropsWithChildren) { - + Odigos @@ -31,14 +28,9 @@ function RootLayout({ children }: PropsWithChildren) { backgroundColor: darkMode ? '#111111' : '#EEEEEE', }} > - - - - - {children} - - - + + {children} + ); diff --git a/frontend/webapp/app/overview/page.tsx b/frontend/webapp/app/overview/page.tsx index ea0ebd47f4..08ec665ea5 100644 --- a/frontend/webapp/app/overview/page.tsx +++ b/frontend/webapp/app/overview/page.tsx @@ -1,63 +1,17 @@ 'use client'; import React from 'react'; -import { MainContent } from '@/components'; -import { usePaginatedStore } from '@/store'; -import type { Source } from '@odigos/ui-utils'; +import OverviewMain from '@/components/lib-imports/overview-main'; +import PageContainer from '@/components/providers/page-container'; import OverviewHeader from '@/components/lib-imports/overview-header'; import OverviewModalsAndDrawers from '@/components/lib-imports/overview-modals-and-drawers'; -import { DataFlow, DataFlowActionsMenu, MultiSourceControl, type SourceSelectionFormData } from '@odigos/ui-containers'; -import { useActionCRUD, useDestinationCRUD, useInstrumentationRuleCRUD, useMetrics, useNamespace, useSourceCRUD, useSSE, useTokenTracker } from '@/hooks'; export default function Page() { - // call important hooks that should run on page-mount - useSSE(); - useTokenTracker(); - - const { sourcesFetching } = usePaginatedStore(); - - const { metrics } = useMetrics(); - const { allNamespaces } = useNamespace(); - const { actions, filteredActions, loading: actLoad } = useActionCRUD(); - const { sources, filteredSources, loading: srcLoad, persistSources } = useSourceCRUD(); - const { destinations, filteredDestinations, loading: destLoad } = useDestinationCRUD(); - const { instrumentationRules, filteredInstrumentationRules, loading: ruleLoad } = useInstrumentationRuleCRUD(); - return ( - <> + - - - - { - const inp: SourceSelectionFormData = {}; - - Object.entries(payload).forEach(([namespace, sources]: [string, Source[]]) => { - inp[namespace] = sources.map(({ name, kind }) => ({ name, kind, selected: false })); - }); - - persistSources(inp, {}); - }} - /> - + - + ); } diff --git a/frontend/webapp/app/page.tsx b/frontend/webapp/app/page.tsx index 66c62d4967..2702e8dc28 100644 --- a/frontend/webapp/app/page.tsx +++ b/frontend/webapp/app/page.tsx @@ -1,10 +1,12 @@ 'use client'; + import { useEffect } from 'react'; import { ROUTES } from '@/utils'; import { useConfig } from '@/hooks'; import { useRouter } from 'next/navigation'; import { CONFIG_INSTALLATION } from '@/@types'; import { CenterThis, FadeLoader } from '@odigos/ui-components'; +import PageContainer from '@/components/providers/page-container'; export default function App() { const router = useRouter(); @@ -23,8 +25,10 @@ export default function App() { }, [data]); return ( - - - + + + + + ); } diff --git a/frontend/webapp/components/lib-imports/overview-header.tsx b/frontend/webapp/components/lib-imports/overview-header.tsx index 7fdae8ba23..d799516176 100644 --- a/frontend/webapp/components/lib-imports/overview-header.tsx +++ b/frontend/webapp/components/lib-imports/overview-header.tsx @@ -13,7 +13,7 @@ const OverviewHeader = () => { const { data: config } = useConfig(); const { tokens, updateToken } = useTokenCRUD(); - const { data: describeOdigos } = useDescribeOdigos(); + const { fetchDescribeOdigos } = useDescribeOdigos(); return (
{ right={[ , , - , + , window.open(SLACK_LINK, '_blank', 'noopener noreferrer')} tooltip='Join our Slack community'> , diff --git a/frontend/webapp/components/lib-imports/overview-main.tsx b/frontend/webapp/components/lib-imports/overview-main.tsx new file mode 100644 index 0000000000..f53d37f128 --- /dev/null +++ b/frontend/webapp/components/lib-imports/overview-main.tsx @@ -0,0 +1,59 @@ +import React from 'react'; +import styled from 'styled-components'; +import { usePaginatedStore } from '@/store'; +import type { Source } from '@odigos/ui-utils'; +import { DataFlow, DataFlowActionsMenu, MultiSourceControl, type SourceSelectionFormData } from '@odigos/ui-containers'; +import { useActionCRUD, useDestinationCRUD, useInstrumentationRuleCRUD, useMetrics, useNamespace, useSourceCRUD } from '@/hooks'; + +export const MainContent = styled.div` + width: 100%; + height: calc(100vh - 176px); + position: relative; +`; + +const OverviewMain = () => { + const { sourcesFetching } = usePaginatedStore(); + + const { metrics } = useMetrics(); + const { allNamespaces } = useNamespace(); + const { actions, filteredActions, loading: actLoad } = useActionCRUD(); + const { sources, filteredSources, loading: srcLoad, persistSources } = useSourceCRUD(); + const { destinations, filteredDestinations, loading: destLoad } = useDestinationCRUD(); + const { instrumentationRules, filteredInstrumentationRules, loading: ruleLoad } = useInstrumentationRuleCRUD(); + + return ( + + + + { + const inp: SourceSelectionFormData = {}; + + Object.entries(payload).forEach(([namespace, sources]: [string, Source[]]) => { + inp[namespace] = sources.map(({ name, kind }) => ({ name, kind, selected: false })); + }); + + persistSources(inp, {}); + }} + /> + + ); +}; + +export default OverviewMain; diff --git a/frontend/webapp/components/lib-imports/overview-modals-and-drawers.tsx b/frontend/webapp/components/lib-imports/overview-modals-and-drawers.tsx index 25df7b7880..7b6a4127b1 100644 --- a/frontend/webapp/components/lib-imports/overview-modals-and-drawers.tsx +++ b/frontend/webapp/components/lib-imports/overview-modals-and-drawers.tsx @@ -1,9 +1,8 @@ import React, { useState } from 'react'; -import { type WorkloadId } from '@odigos/ui-utils'; -import { ActionDrawer, ActionModal, DestinationDrawer, DestinationModal, InstrumentationRuleDrawer, InstrumentationRuleModal, SourceDrawer, SourceModal, useDrawerStore } from '@odigos/ui-containers'; +import { ActionDrawer, ActionModal, DestinationDrawer, DestinationModal, InstrumentationRuleDrawer, InstrumentationRuleModal, SourceDrawer, SourceModal } from '@odigos/ui-containers'; import { useActionCRUD, - useDescribeOdigos, + useConfig, useDescribeSource, useDestinationCategories, useDestinationCRUD, @@ -15,7 +14,7 @@ import { } from '@/hooks'; const OverviewModalsAndDrawers = () => { - const { drawerEntityId } = useDrawerStore(); + const { isEnterprise } = useConfig(); const { sources, persistSources, updateSource } = useSourceCRUD(); const { actions, createAction, updateAction, deleteAction } = useActionCRUD(); @@ -25,11 +24,10 @@ const OverviewModalsAndDrawers = () => { const [selectedNamespace, setSelectedNamespace] = useState(''); const { allNamespaces, data: namespace, loading: nsLoad } = useNamespace(selectedNamespace); - const { isPro } = useDescribeOdigos(); const { categories } = useDestinationCategories(); + const { fetchDescribeSource } = useDescribeSource(); const { potentialDestinations } = usePotentialDestinations(); const { data: testResult, loading: testLoading, testConnection } = useTestConnection(); - const { data: describeSource } = useDescribeSource(typeof drawerEntityId === 'object' ? (drawerEntityId as WorkloadId) : undefined); return ( <> @@ -51,11 +49,11 @@ const OverviewModalsAndDrawers = () => { testLoading={testLoading} testResult={testResult} /> - + {/* drawers */} - + theme.colors.primary}; + align-items: center; +`; + +const PageContainer: FC = ({ children }) => { + // call important hooks that should run on page-mount + useSSE(); + useTokenTracker(); + + return ( + + + + {children} + + + ); +}; + +export default PageContainer; diff --git a/frontend/webapp/components/styled.tsx b/frontend/webapp/components/styled.tsx index 1eb0cbfebc..68924a457e 100644 --- a/frontend/webapp/components/styled.tsx +++ b/frontend/webapp/components/styled.tsx @@ -1,18 +1,4 @@ import styled from 'styled-components'; -import { FlexColumn } from '@odigos/ui-components'; - -export const LayoutContainer = styled(FlexColumn)` - width: 100%; - height: 100vh; - background-color: ${({ theme }) => theme.colors.primary}; - align-items: center; -`; - -export const MainContent = styled.div` - width: 100%; - height: calc(100vh - 176px); - position: relative; -`; export const OnboardingStepperWrapper = styled.div` position: absolute; diff --git a/frontend/webapp/cypress/constants/index.ts b/frontend/webapp/cypress/constants/index.ts index 39aeea6204..c2aeb1f7a3 100644 --- a/frontend/webapp/cypress/constants/index.ts +++ b/frontend/webapp/cypress/constants/index.ts @@ -43,7 +43,6 @@ export const DATA_IDS = { SELECT_DESTINATION: `[data-id=select-potential-destination-${SELECTED_ENTITIES.DESTINATION_TYPE}]`, SELECT_DESTINATION_AUTOFILL_FIELD: `[data-id=${SELECTED_ENTITIES.DESTINATION_AUTOFILL_FIELD}]`, - ADD_ENTITY: '[data-id=add-entity]', ADD_SOURCE: '[data-id=add-source]', ADD_DESTINATION: '[data-id=add-destination]', ADD_ACTION: '[data-id=add-action]', @@ -127,154 +126,3 @@ export const TEXTS = { NOTIF_INSTRUMENTATION_RULE_UPDATED: (crdId: string) => `Rule "${crdId}" updated`, NOTIF_INSTRUMENTATION_RULE_DELETED: (crdId: string) => `Rule "${crdId}" delete`, }; - -export const MOCKED_DESCRIBE = { - describeOdigos: { - isSettled: false, - hasErrors: false, - numberOfDestinations: 0, - numberOfSources: 0, - odigosVersion: { - name: 'Odigos Version', - value: 'e2e-test', - status: '', - explain: '', - }, - tier: { - name: '', - value: 'onprem', - status: '', - explain: '', - }, - installationMethod: { - name: '', - value: '', - status: '', - explain: '', - }, - clusterCollector: { - enabled: { - name: '', - value: '', - status: '', - explain: '', - }, - collectorGroup: { - name: '', - value: '', - status: '', - explain: '', - }, - deployed: { - name: '', - value: '', - status: '', - explain: '', - }, - deployedError: { - name: '', - value: '', - status: '', - explain: '', - }, - collectorReady: { - name: '', - value: '', - status: '', - explain: '', - }, - deploymentCreated: { - name: '', - value: '', - status: '', - explain: '', - }, - expectedReplicas: { - name: '', - value: '', - status: '', - explain: '', - }, - healthyReplicas: { - name: '', - value: '', - status: '', - explain: '', - }, - failedReplicas: { - name: '', - value: '', - status: '', - explain: '', - }, - failedReplicasReason: { - name: '', - value: '', - status: '', - explain: '', - }, - }, - nodeCollector: { - enabled: { - name: '', - value: '', - status: '', - explain: '', - }, - collectorGroup: { - name: '', - value: '', - status: '', - explain: '', - }, - deployed: { - name: '', - value: '', - status: '', - explain: '', - }, - deployedError: { - name: '', - value: '', - status: '', - explain: '', - }, - collectorReady: { - name: '', - value: '', - status: '', - explain: '', - }, - daemonSet: { - name: '', - value: '', - status: '', - explain: '', - }, - desiredNodes: { - name: '', - value: '', - status: '', - explain: '', - }, - currentNodes: { - name: '', - value: '', - status: '', - explain: '', - }, - updatedNodes: { - name: '', - value: '', - status: '', - explain: '', - }, - availableNodes: { - name: '', - value: '', - status: '', - explain: '', - }, - }, - }, -}; diff --git a/frontend/webapp/cypress/e2e/03-sources.cy.ts b/frontend/webapp/cypress/e2e/03-sources.cy.ts index ad96fd897f..2331701ff3 100644 --- a/frontend/webapp/cypress/e2e/03-sources.cy.ts +++ b/frontend/webapp/cypress/e2e/03-sources.cy.ts @@ -15,20 +15,20 @@ describe('Sources CRUD', () => { cy.visit(ROUTES.OVERVIEW); getCrdIds({ namespace, crdName, expectedError: TEXTS.NO_RESOURCES(namespace), expectedLength: 0 }, () => { - cy.get(DATA_IDS.ADD_ENTITY).click(); cy.get(DATA_IDS.ADD_SOURCE).click(); cy.get(DATA_IDS.MODAL_ADD_SOURCE).should('exist'); - cy.get(DATA_IDS.SELECT_NAMESPACE).find(DATA_IDS.CHECKBOX).click(); - - SELECTED_ENTITIES.NAMESPACE_SOURCES.forEach((sourceName) => { - cy.get(DATA_IDS.SELECT_NAMESPACE).get(DATA_IDS.SELECT_SOURCE(sourceName)).contains(sourceName).should('exist'); - }); - - cy.contains('button', BUTTONS.DONE).click(); + cy.get(DATA_IDS.SELECT_NAMESPACE).find(DATA_IDS.CHECKBOX).click({ force: true }); + // await namespace sources cy.wait('@gql').then(() => { - awaitToast({ withSSE: true, message: TEXTS.NOTIF_SOURCES_CREATED(5) }, () => { - getCrdIds({ namespace, crdName, expectedError: '', expectedLength: 5 }); + SELECTED_ENTITIES.NAMESPACE_SOURCES.forEach((sourceName) => cy.get(DATA_IDS.SELECT_NAMESPACE).get(DATA_IDS.SELECT_SOURCE(sourceName)).contains(sourceName).should('exist')); + cy.contains('button', BUTTONS.DONE).click(); + + // await instrumentation + cy.wait('@gql').then(() => { + awaitToast({ withSSE: true, message: TEXTS.NOTIF_SOURCES_CREATED(5) }, () => { + getCrdIds({ namespace, crdName, expectedError: '', expectedLength: 5 }); + }); }); }); }); diff --git a/frontend/webapp/cypress/e2e/04-destinations.cy.ts b/frontend/webapp/cypress/e2e/04-destinations.cy.ts index 0588a8bc8e..0ab607d9a5 100644 --- a/frontend/webapp/cypress/e2e/04-destinations.cy.ts +++ b/frontend/webapp/cypress/e2e/04-destinations.cy.ts @@ -15,7 +15,6 @@ describe('Destinations CRUD', () => { cy.visit(ROUTES.OVERVIEW); getCrdIds({ namespace, crdName, expectedError: TEXTS.NO_RESOURCES(namespace), expectedLength: 0 }, () => { - cy.get(DATA_IDS.ADD_ENTITY).click(); cy.get(DATA_IDS.ADD_DESTINATION).click(); cy.get(DATA_IDS.MODAL_ADD_DESTINATION).should('exist'); cy.get(DATA_IDS.SELECT_DESTINATION).contains(SELECTED_ENTITIES.DESTINATION_DISPLAY_NAME).should('exist').click(); diff --git a/frontend/webapp/cypress/e2e/05-actions.cy.ts b/frontend/webapp/cypress/e2e/05-actions.cy.ts index ad6817fe47..a0cf18e4e0 100644 --- a/frontend/webapp/cypress/e2e/05-actions.cy.ts +++ b/frontend/webapp/cypress/e2e/05-actions.cy.ts @@ -15,7 +15,6 @@ describe('Actions CRUD', () => { cy.visit(ROUTES.OVERVIEW); getCrdIds({ namespace, crdName, expectedError: TEXTS.NO_RESOURCES(namespace), expectedLength: 0 }, () => { - cy.get(DATA_IDS.ADD_ENTITY).click(); cy.get(DATA_IDS.ADD_ACTION).click(); cy.get(DATA_IDS.MODAL_ADD_ACTION).should('exist'); cy.get(DATA_IDS.MODAL_ADD_ACTION).find('input').should('have.attr', 'placeholder', INPUTS.ACTION_DROPDOWN).click(); diff --git a/frontend/webapp/cypress/e2e/06-rules.cy.ts b/frontend/webapp/cypress/e2e/06-rules.cy.ts index dd0d43a562..50d2bd48f7 100644 --- a/frontend/webapp/cypress/e2e/06-rules.cy.ts +++ b/frontend/webapp/cypress/e2e/06-rules.cy.ts @@ -1,5 +1,5 @@ +import { BUTTONS, CRD_NAMES, DATA_IDS, INPUTS, NAMESPACES, ROUTES, SELECTED_ENTITIES, TEXTS } from '../constants'; import { aliasMutation, awaitToast, deleteEntity, getCrdById, getCrdIds, hasOperationName, updateEntity } from '../functions'; -import { BUTTONS, CRD_NAMES, DATA_IDS, INPUTS, MOCKED_DESCRIBE, NAMESPACES, ROUTES, SELECTED_ENTITIES, TEXTS } from '../constants'; // The number of CRDs that exist in the cluster before running any tests should be 0. // Tests will fail if you have existing CRDs in the cluster. @@ -12,13 +12,13 @@ describe('Instrumentation Rules CRUD', () => { beforeEach(() => cy .intercept('/graphql', (req) => { - aliasMutation(req, 'DescribeOdigos'); + aliasMutation(req, 'GetConfig'); - if (hasOperationName(req, 'DescribeOdigos')) { - req.alias = 'describeOdigos'; + if (hasOperationName(req, 'GetConfig')) { + req.alias = 'config'; req.reply((res) => { // This is to make the test think this is enterprise/onprem - which will allow us to create rules - res.body.data = MOCKED_DESCRIBE; + res.body.data = { config: { tier: 'onprem' } }; }); } }) @@ -29,7 +29,6 @@ describe('Instrumentation Rules CRUD', () => { cy.visit(ROUTES.OVERVIEW); getCrdIds({ namespace, crdName, expectedError: TEXTS.NO_RESOURCES(namespace), expectedLength: 0 }, () => { - cy.get(DATA_IDS.ADD_ENTITY).click(); cy.get(DATA_IDS.ADD_INSTRUMENTATION_RULE).click(); cy.get(DATA_IDS.MODAL_ADD_INSTRUMENTATION_RULE).should('exist'); cy.get(DATA_IDS.MODAL_ADD_INSTRUMENTATION_RULE).find('input').should('have.attr', 'placeholder', INPUTS.RULE_DROPDOWN).click(); diff --git a/frontend/webapp/graphql/queries/config.ts b/frontend/webapp/graphql/queries/config.ts index c272982f78..03fa0a7a80 100644 --- a/frontend/webapp/graphql/queries/config.ts +++ b/frontend/webapp/graphql/queries/config.ts @@ -5,6 +5,7 @@ export const GET_CONFIG = gql` query GetConfig { config { installation + tier readonly } } diff --git a/frontend/webapp/hooks/compute-platform/usePaginatedSources.ts b/frontend/webapp/hooks/compute-platform/usePaginatedSources.ts index 467232ae40..37b29fd159 100644 --- a/frontend/webapp/hooks/compute-platform/usePaginatedSources.ts +++ b/frontend/webapp/hooks/compute-platform/usePaginatedSources.ts @@ -11,6 +11,7 @@ export const usePaginatedSources = () => { const { sources, addSources, setSources, sourcesNotFinished, setSourcesNotFinished, sourcesFetching, setSourcesFetching } = usePaginatedStore(); const [getSources] = useLazyQuery<{ computePlatform: { sources: ComputePlatform['computePlatform']['sources'] } }>(GET_SOURCES, { + fetchPolicy: 'no-cache', onError: (error) => addNotification({ type: NOTIFICATION_TYPE.ERROR, diff --git a/frontend/webapp/hooks/config/useConfig.ts b/frontend/webapp/hooks/config/useConfig.ts index 5b731f2648..d745ddb495 100644 --- a/frontend/webapp/hooks/config/useConfig.ts +++ b/frontend/webapp/hooks/config/useConfig.ts @@ -3,8 +3,8 @@ import { useEffect } from 'react'; import { GET_CONFIG } from '@/graphql'; import { type FetchedConfig } from '@/@types'; import { useSuspenseQuery } from '@apollo/client'; -import { CRUD, NOTIFICATION_TYPE } from '@odigos/ui-utils'; import { useNotificationStore } from '@odigos/ui-containers'; +import { CRUD, NOTIFICATION_TYPE, TIER } from '@odigos/ui-utils'; export const useConfig = () => { const { addNotification } = useNotificationStore(); @@ -23,5 +23,9 @@ export const useConfig = () => { } }, [error]); - return { data: data?.config }; + const cfg = data?.config; + const isCommunity = !!cfg?.tier && [TIER.COMMUNITY].includes(cfg.tier); + const isEnterprise = !!cfg?.tier && [TIER.ONPREM].includes(cfg.tier); + + return { data: cfg, isCommunity, isEnterprise }; }; diff --git a/frontend/webapp/hooks/describe/useDescribeOdigos.ts b/frontend/webapp/hooks/describe/useDescribeOdigos.ts index b055bc406e..a8be57ab39 100644 --- a/frontend/webapp/hooks/describe/useDescribeOdigos.ts +++ b/frontend/webapp/hooks/describe/useDescribeOdigos.ts @@ -1,19 +1,25 @@ -import { useQuery } from '@apollo/client'; +import { useLazyQuery } from '@apollo/client'; import { DESCRIBE_ODIGOS } from '@/graphql'; -import type { DescribeOdigos } from '@odigos/ui-utils'; +import { useNotificationStore } from '@odigos/ui-containers'; +import { CRUD, NOTIFICATION_TYPE, type DescribeOdigos } from '@odigos/ui-utils'; export const useDescribeOdigos = () => { - // TODO: change query, to lazy query - const { data, loading, error } = useQuery<{ describeOdigos: DescribeOdigos }>(DESCRIBE_ODIGOS, { - pollInterval: 5000, - }); + const { addNotification } = useNotificationStore(); - const isPro = ['onprem', 'enterprise'].includes(data?.describeOdigos.tier.value || ''); + const [fetchDescribeOdigos, { data, loading, error }] = useLazyQuery<{ describeOdigos: DescribeOdigos }>(DESCRIBE_ODIGOS, { + fetchPolicy: 'no-cache', + onError: (error) => + addNotification({ + type: NOTIFICATION_TYPE.ERROR, + title: error.name || CRUD.READ, + message: error.cause?.message || error.message, + }), + }); return { loading, error, data: data?.describeOdigos, - isPro, + fetchDescribeOdigos, }; }; diff --git a/frontend/webapp/hooks/describe/useDescribeSource.ts b/frontend/webapp/hooks/describe/useDescribeSource.ts index 507019a5ec..06e6bcf495 100644 --- a/frontend/webapp/hooks/describe/useDescribeSource.ts +++ b/frontend/webapp/hooks/describe/useDescribeSource.ts @@ -1,20 +1,25 @@ -import { useQuery } from '@apollo/client'; +import { useLazyQuery } from '@apollo/client'; import { DESCRIBE_SOURCE } from '@/graphql'; -import type { DescribeSource, WorkloadId } from '@odigos/ui-utils'; +import { useNotificationStore } from '@odigos/ui-containers'; +import { CRUD, NOTIFICATION_TYPE, type DescribeSource, type WorkloadId } from '@odigos/ui-utils'; -export const useDescribeSource = (params?: WorkloadId) => { - const { namespace, name, kind } = params || {}; +export const useDescribeSource = () => { + const { addNotification } = useNotificationStore(); - // TODO: change query, to lazy query - const { data, loading, error } = useQuery<{ describeSource: DescribeSource }>(DESCRIBE_SOURCE, { - skip: !namespace || !name || !kind, - variables: { namespace, name, kind }, - pollInterval: 5000, + const [fetchDescribeSource, { data, loading, error }] = useLazyQuery<{ describeSource: DescribeSource }, WorkloadId>(DESCRIBE_SOURCE, { + fetchPolicy: 'no-cache', + onError: (error) => + addNotification({ + type: NOTIFICATION_TYPE.ERROR, + title: error.name || CRUD.READ, + message: error.cause?.message || error.message, + }), }); return { loading, error, data: data?.describeSource, + fetchDescribeSource, }; }; diff --git a/frontend/webapp/hooks/instrumentation-rules/useInstrumentationRuleCRUD.ts b/frontend/webapp/hooks/instrumentation-rules/useInstrumentationRuleCRUD.ts index b25f2baa53..4f6ff8ac5d 100644 --- a/frontend/webapp/hooks/instrumentation-rules/useInstrumentationRuleCRUD.ts +++ b/frontend/webapp/hooks/instrumentation-rules/useInstrumentationRuleCRUD.ts @@ -34,7 +34,7 @@ export const useInstrumentationRuleCRUD = (params?: Params) => { const handleComplete = (actionType: string, message: string, id?: string) => { notifyUser(NOTIFICATION_TYPE.SUCCESS, actionType, message, id); - // refetch(); + refetch(); params?.onSuccess?.(actionType); }; diff --git a/frontend/webapp/package.json b/frontend/webapp/package.json index 4868a49f3b..7e906a3a12 100644 --- a/frontend/webapp/package.json +++ b/frontend/webapp/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "back:build": "cd .. && go build -o odigos-backend", "back:start": "cd .. && ./odigos-backend --port 8085 --debug --address 0.0.0.0", @@ -12,13 +12,13 @@ "lint:fix": "next lint --fix" }, "dependencies": { - "@apollo/client": "^3.12.11", - "@apollo/experimental-nextjs-app-support": "^0.11.8", - "@odigos/ui-components": "^0.0.63", - "@odigos/ui-containers": "^0.0.39", + "@apollo/client": "^3.13.1", + "@apollo/experimental-nextjs-app-support": "^0.11.9", + "@odigos/ui-components": "^0.0.68", + "@odigos/ui-containers": "^0.0.44", "@odigos/ui-icons": "^0.0.12", "@odigos/ui-theme": "^0.0.16", - "@odigos/ui-utils": "^0.0.28", + "@odigos/ui-utils": "^0.0.29", "graphql": "^16.10.0", "next": "15.1.7", "react": "19.0.0", @@ -28,8 +28,8 @@ "zustand": "^5.0.3" }, "devDependencies": { - "@types/node": "22.13.1", - "@types/react": "19.0.8", + "@types/node": "22.13.4", + "@types/react": "19.0.9", "@types/react-dom": "19.0.3", "autoprefixer": "^10.4.20", "cypress": "^14.0.3", diff --git a/frontend/webapp/public/manifest.json b/frontend/webapp/public/manifest.json index 67890970ad..e79458aa98 100644 --- a/frontend/webapp/public/manifest.json +++ b/frontend/webapp/public/manifest.json @@ -4,8 +4,8 @@ "icons": [ { "src": "/favicon.svg", - "sizes": "64x64 32x32 24x24 16x16 192x192 512x512", - "type": "image/svg+xml" + "sizes": "16x16 24x24 32x32 64x64 192x192 512x512", + "type": "image/x-icon" } ], "theme_color": "#FFFFFF", diff --git a/frontend/webapp/yarn.lock b/frontend/webapp/yarn.lock index b0058b5cc8..c5831cd8f7 100644 --- a/frontend/webapp/yarn.lock +++ b/frontend/webapp/yarn.lock @@ -2,17 +2,17 @@ # yarn lockfile v1 -"@apollo/client-react-streaming@0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@apollo/client-react-streaming/-/client-react-streaming-0.11.8.tgz#9d4ffc683f6f7eb1006474659d73dbb9375eb74d" - integrity sha512-BEAHvAMSEt+dEMBY39hIoTDcOkjGJX473tlRudt3KnLE/R8eR0dKMtsaIAfWep1F9kvxv4oYR8MWUg20wj3qiA== +"@apollo/client-react-streaming@0.11.9": + version "0.11.9" + resolved "https://registry.yarnpkg.com/@apollo/client-react-streaming/-/client-react-streaming-0.11.9.tgz#f8f8fc3df090d2c2efe3bcdaa0bf81bafb8de6c8" + integrity sha512-jK/P+3cV48My3qbpnwV7mFNlMD+AUUudXk9t3AIdogvpx/O3V9Hl8jay5fmHC1BFJDHpBWcxEWM1kHH3uFyZwA== dependencies: ts-invariant "^0.10.3" -"@apollo/client@^3.12.11": - version "3.12.11" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.12.11.tgz#250301155a86c59e2915637fd19c9a2c42f878a8" - integrity sha512-1RppV9U3E6Uusl/33yGkZa+rXpkGU5iCstcYltwWjdTjoA/YBD2Yyu0aHy8J4uKfIExUgnMW1HJWn4A0E0rRsw== +"@apollo/client@^3.13.1": + version "3.13.1" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.13.1.tgz#c0633c69c5446967b0e517a590595eeea61dd176" + integrity sha512-HaAt62h3jNUXpJ1v5HNgUiCzPP1c5zc2Q/FeTb2cTk/v09YlhoqKKHQFJI7St50VCJ5q8JVIc03I5bRcBrQxsg== dependencies: "@graphql-typed-document-node/core" "^3.1.1" "@wry/caches" "^1.0.0" @@ -28,12 +28,12 @@ tslib "^2.3.0" zen-observable-ts "^1.2.5" -"@apollo/experimental-nextjs-app-support@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@apollo/experimental-nextjs-app-support/-/experimental-nextjs-app-support-0.11.8.tgz#92a404f41c874e28bbe631f5a175fd66bd17ed77" - integrity sha512-p+dbOKu3Qas0knlPVOKwc4vCwYOUgCJcmyxHGIVZAjoCRk8XVVFInLIiS6WrES8yL69QTRw1Dn2BtDymyFLofw== +"@apollo/experimental-nextjs-app-support@^0.11.9": + version "0.11.9" + resolved "https://registry.yarnpkg.com/@apollo/experimental-nextjs-app-support/-/experimental-nextjs-app-support-0.11.9.tgz#ceac77f221d482a160e1b6a8ed66d214ea7954ec" + integrity sha512-RAGAuPxbNnUVLULa/AiAtGEClENmLm4bLWXVeLsmtkHTjhv+mQgHO4sdHAxo8HqtZowPQP73Mnw4K8CbQVm20Q== dependencies: - "@apollo/client-react-streaming" "0.11.8" + "@apollo/client-react-streaming" "0.11.9" "@babel/runtime@^7.12.5": version "7.26.7" @@ -395,30 +395,30 @@ resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== -"@odigos/ui-components@^0.0.63": - version "0.0.63" - resolved "https://registry.yarnpkg.com/@odigos/ui-components/-/ui-components-0.0.63.tgz#f2d27398fce0eaf9e15180a9fbfd153f887501df" - integrity sha512-P/Gy9jCtDZGzjbeWwN9ZhvYgRw0+QiA8iYVlcxiJ3iN7SwFeDEvmE3949A0GZ3QX5uJxWJMqYsn34R7hiR/oKQ== +"@odigos/ui-components@^0.0.68": + version "0.0.68" + resolved "https://registry.yarnpkg.com/@odigos/ui-components/-/ui-components-0.0.68.tgz#467cbe28aaac74ddf81f681ba82c489128957327" + integrity sha512-dq4Qo5xrMmm0B4I8pke6EgMyw1i4lHI2ruO+CrOJtDLDlkFNNdGBTpbhn29ScZv7VLfb222F7+unR9jysMtNPg== dependencies: "@odigos/ui-icons" "^0.0.12" "@odigos/ui-theme" "^0.0.16" - "@odigos/ui-utils" "^0.0.28" + "@odigos/ui-utils" "^0.0.29" prism-react-renderer "^2.4.1" react "^19.0.0" react-dom "^19.0.0" react-lottie "^1.2.10" styled-components "^6.1.15" -"@odigos/ui-containers@^0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@odigos/ui-containers/-/ui-containers-0.0.39.tgz#a5f3d2853c450d480755667739e8dd56178fbcfb" - integrity sha512-qxlN1mSg9EhF2ic796dlMjdP68OJS2lj9iGMVXXH9eCzuYSokxM4g69F1Edt9euXvA887ul2O/W5/R0g9XsEQw== +"@odigos/ui-containers@^0.0.44": + version "0.0.44" + resolved "https://registry.yarnpkg.com/@odigos/ui-containers/-/ui-containers-0.0.44.tgz#068fc2a10229a4b11dadd485ed4ef0e1e7b8c041" + integrity sha512-lgy01FWdA67vSQZ71P56N7IfPSeI9jVGoSK06LItlaZR7fUmYqX+aJYjP6o98/h0+4QZBvb5T5QVGhFGvazmHw== dependencies: - "@odigos/ui-components" "^0.0.63" + "@odigos/ui-components" "^0.0.68" "@odigos/ui-icons" "^0.0.12" "@odigos/ui-theme" "^0.0.16" - "@odigos/ui-utils" "^0.0.28" - "@xyflow/react" "^12.4.2" + "@odigos/ui-utils" "^0.0.29" + "@xyflow/react" "^12.4.3" react "^19.0.0" react-dom "^19.0.0" styled-components "^6.1.15" @@ -444,10 +444,10 @@ styled-components "^6.1.15" zustand "^5.0.3" -"@odigos/ui-utils@^0.0.28": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@odigos/ui-utils/-/ui-utils-0.0.28.tgz#1bae955b4f95cae0d915876af2bcfe885950a4a3" - integrity sha512-y4pL/RGD9S2j42QDxTXLCHHdGhcbkNCZQvD0H55RXvotAnNegZGFtl00Oltaobc6AHpS9cbcN4rzCxJimuVLrQ== +"@odigos/ui-utils@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@odigos/ui-utils/-/ui-utils-0.0.29.tgz#40adfa217f398b2845b3c23124fa676a2c9122bd" + integrity sha512-l92jgZhiKTLjQp/GN4Yol2zRlVmKXv9WaCCjRGXjELujFZ4kiK68M42KkZ8hh2ipPvxDahHEdqUwlqKRibx3GQ== dependencies: "@odigos/ui-icons" "^0.0.12" "@odigos/ui-theme" "^0.0.16" @@ -532,13 +532,20 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@*", "@types/node@22.13.1": +"@types/node@*": version "22.13.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew== dependencies: undici-types "~6.20.0" +"@types/node@22.13.4": + version "22.13.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.4.tgz#3fe454d77cd4a2d73c214008b3e331bfaaf5038a" + integrity sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg== + dependencies: + undici-types "~6.20.0" + "@types/prismjs@^1.26.0": version "1.26.5" resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" @@ -549,10 +556,10 @@ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.3.tgz#0804dfd279a165d5a0ad8b53a5b9e65f338050a4" integrity sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA== -"@types/react@19.0.8": - version "19.0.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.8.tgz#7098e6159f2a61e4f4cef2c1223c044a9bec590e" - integrity sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw== +"@types/react@19.0.9": + version "19.0.9" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.9.tgz#675255eb7d978bdaf71f9d08f6b740d41b0b7f32" + integrity sha512-FedNTYgmMwSZmD1Sru/W1gJKuiYCN/3SuBkmZkcxX+FpO5zL76B22A9YNfAKg4HQO3Neh/30AiynP6BELdU0qQ== dependencies: csstype "^3.0.2" @@ -687,19 +694,19 @@ dependencies: tslib "^2.3.0" -"@xyflow/react@^12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@xyflow/react/-/react-12.4.2.tgz#669ab18923d93a8d8fb526241a2affc0d50abf9d" - integrity sha512-AFJKVc/fCPtgSOnRst3xdYJwiEcUN9lDY7EO/YiRvFHYCJGgfzg+jpvZjkTOnBLGyrMJre9378pRxAc3fsR06A== +"@xyflow/react@^12.4.3": + version "12.4.3" + resolved "https://registry.yarnpkg.com/@xyflow/react/-/react-12.4.3.tgz#0943fca8ff64e5360b0f8c8f46da2e3dc1a64c6b" + integrity sha512-oO50TIY4rbgOURK5pmvL4LwLOQdh6YkvrvOBZPBedltJ1TINCRp0FiyYKfYhLnaDcW8/aayvGtFpUcSkPQxpGg== dependencies: - "@xyflow/system" "0.0.50" + "@xyflow/system" "0.0.51" classcat "^5.0.3" zustand "^4.4.0" -"@xyflow/system@0.0.50": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@xyflow/system/-/system-0.0.50.tgz#8517cb46e1523cc6abe620f3ad18f5a94315d7e3" - integrity sha512-HVUZd4LlY88XAaldFh2nwVxDOcdIBxGpQ5txzwfJPf+CAjj2BfYug1fHs2p4yS7YO8H6A3EFJQovBE8YuHkAdg== +"@xyflow/system@0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@xyflow/system/-/system-0.0.51.tgz#3816c75edc8b43f1c9554bccda92afc6bbe79658" + integrity sha512-cYnuM3oWQQjx2Rdz0LdZCnbUaWZdZDiik20kPDYsa5SIlq++ZDIcKiDF6a93ncfMv9Ej5GWfDkouE7bObrdRqQ== dependencies: "@types/d3-drag" "^3.0.7" "@types/d3-selection" "^3.0.10" From 2c2c5546da33f91b79500f06e2b37d5cda15bc1d Mon Sep 17 00:00:00 2001 From: Ben Elferink Date: Sun, 16 Feb 2025 21:30:08 +0200 Subject: [PATCH 06/15] fix: destinations doc script - image sizes, and custom content demo text (#2443) This pull request includes changes to various backend documentation files, primarily focusing on updating image tags and adding detailed instructions for creating accounts and obtaining access tokens. The most important changes include updating the image tags to use a consistent class and height, and adding detailed instructions for user actions. Updates to image tags: * [`docs/backends-overview.mdx`](diffhunk://#diff-26115b197a8b9dd8ee351f05b2cade47da5acd788d74b9f962a325d3e1b919a2L15-R59): Updated image tags for all backends to use a consistent class and height. * [`docs/backends/appdynamics.mdx`](diffhunk://#diff-124c6f9b4d97583e112af5cf15db37c29ee22d49b620a9ea8baf810ad6dca8a2L10-R21): Updated the image tag for AppDynamics to use a consistent class and height. * [`docs/backends/awss3.mdx`](diffhunk://#diff-3a7ce85354b4b2eadec523fe8235cd31349580d1b3946e99bcf557b9d464abc6L10-R21): Updated the image tag for AWS S3 to use a consistent class and height. * [`docs/backends/axiom.mdx`](diffhunk://#diff-183441861a9543c5648da503820d9b0c10a344e08138820fa4849f81a85beb00L10-R21): Updated the image tag for Axiom to use a consistent class and height. * [`docs/backends/azureblob.mdx`](diffhunk://#diff-292b9c877fdd83df881a11992affe06aa78e14fbb1cac9449a266bdd4a0576e9L10-R21): Updated the image tag for Azure Blob Storage to use a consistent class and height. Addition of detailed instructions: * [`docs/backends/appdynamics.mdx`](diffhunk://#diff-124c6f9b4d97583e112af5cf15db37c29ee22d49b620a9ea8baf810ad6dca8a2L10-R21): Added detailed instructions for creating an account and obtaining an access token. * [`docs/backends/awss3.mdx`](diffhunk://#diff-3a7ce85354b4b2eadec523fe8235cd31349580d1b3946e99bcf557b9d464abc6L10-R21): Added detailed instructions for creating an account and obtaining an access token. * [`docs/backends/axiom.mdx`](diffhunk://#diff-183441861a9543c5648da503820d9b0c10a344e08138820fa4849f81a85beb00L10-R21): Added detailed instructions for creating an account and obtaining an access token. * [`docs/backends/azureblob.mdx`](diffhunk://#diff-292b9c877fdd83df881a11992affe06aa78e14fbb1cac9449a266bdd4a0576e9L10-R21): Added detailed instructions for creating an account and obtaining an access token. * [`docs/backends/betterstack.mdx`](diffhunk://#diff-a37c129f12237e3b2bc3c543bc80c3440805bef299e2f27834df2e65935a0950L10-R21): Added detailed instructions for creating an account and obtaining an access token. --- docs/backends-overview.mdx | 90 ++++++++++++------------ docs/backends/appdynamics.mdx | 11 ++- docs/backends/awss3.mdx | 11 ++- docs/backends/axiom.mdx | 11 ++- docs/backends/azureblob.mdx | 11 ++- docs/backends/betterstack.mdx | 11 ++- docs/backends/causely.mdx | 11 ++- docs/backends/chronosphere.mdx | 11 ++- docs/backends/clickhouse.mdx | 11 ++- docs/backends/coralogix.mdx | 11 ++- docs/backends/dash0.mdx | 11 ++- docs/backends/datadog.mdx | 11 ++- docs/backends/dynatrace.mdx | 11 ++- docs/backends/elasticapm.mdx | 11 ++- docs/backends/elasticsearch.mdx | 11 ++- docs/backends/gigapipe.mdx | 11 ++- docs/backends/googlecloudmonitoring.mdx | 11 ++- docs/backends/grafanacloudloki.mdx | 11 ++- docs/backends/grafanacloudprometheus.mdx | 11 ++- docs/backends/grafanacloudtempo.mdx | 11 ++- docs/backends/groundcover.mdx | 11 ++- docs/backends/honeycomb.mdx | 11 ++- docs/backends/hyperdx.mdx | 11 ++- docs/backends/instana.mdx | 11 ++- docs/backends/jaeger.mdx | 11 ++- docs/backends/kafka.mdx | 11 ++- docs/backends/kloudmate.mdx | 11 ++- docs/backends/last9.mdx | 11 ++- docs/backends/lightstep.mdx | 11 ++- docs/backends/logzio.mdx | 11 ++- docs/backends/loki.mdx | 11 ++- docs/backends/lumigo.mdx | 11 ++- docs/backends/middleware.mdx | 11 ++- docs/backends/newrelic.mdx | 11 ++- docs/backends/opsverse.mdx | 11 ++- docs/backends/otlp.mdx | 11 ++- docs/backends/otlphttp.mdx | 11 ++- docs/backends/prometheus.mdx | 11 ++- docs/backends/qryn.mdx | 11 ++- docs/backends/quickwit.mdx | 11 ++- docs/backends/signoz.mdx | 11 ++- docs/backends/splunk.mdx | 11 ++- docs/backends/sumologic.mdx | 11 ++- docs/backends/tempo.mdx | 11 ++- docs/backends/traceloop.mdx | 11 ++- docs/backends/uptrace.mdx | 11 ++- docs/sync-dest-doc.py | 23 +++--- 47 files changed, 416 insertions(+), 192 deletions(-) diff --git a/docs/backends-overview.mdx b/docs/backends-overview.mdx index 6cabfce889..8e8d135184 100644 --- a/docs/backends-overview.mdx +++ b/docs/backends-overview.mdx @@ -12,48 +12,48 @@ icon: 'house' | | | | Traces | Metrics | Logs | |---|---|---|:---:|:---:|:---:| -appdynamics | [AppDynamics](/backends/appdynamics) | Managed | ✅ | ✅ | ✅ | -s3 | [AWS S3](/backends/awss3) | Managed | ✅ | ✅ | ✅ | -axiom | [Axiom](/backends/axiom) | Managed | ✅ | | ✅ | -azureblob | [Azure Blob Storage](/backends/azureblob) | Managed | ✅ | | ✅ | -betterstack | [Better Stack](/backends/betterstack) | Managed | | ✅ | ✅ | -causely | [Causely](/backends/causely) | Managed | ✅ | ✅ | | -chronosphere | [Chronosphere](/backends/chronosphere) | Managed | ✅ | ✅ | | -clickhouse | [Clickhouse](/backends/clickhouse) | Self-Hosted | ✅ | ✅ | ✅ | -coralogix | [Coralogix](/backends/coralogix) | Managed | ✅ | ✅ | ✅ | -dash0 | [Dash0](/backends/dash0) | Managed | ✅ | ✅ | ✅ | -datadog | [Datadog](/backends/datadog) | Managed | ✅ | ✅ | ✅ | -dynatrace | [Dynatrace](/backends/dynatrace) | Managed | ✅ | ✅ | ✅ | -elasticapm | [Elastic APM](/backends/elasticapm) | Managed | ✅ | ✅ | ✅ | -elasticsearch | [Elasticsearch](/backends/elasticsearch) | Self-Hosted | ✅ | | ✅ | -qryn | [Gigapipe](/backends/gigapipe) | Managed | ✅ | ✅ | ✅ | -googlecloud | [Google Cloud Monitoring](/backends/googlecloudmonitoring) | Managed | ✅ | | ✅ | -grafanacloudloki | [Grafana Cloud Loki](/backends/grafanacloudloki) | Managed | | | ✅ | -grafanacloudprometheus | [Grafana Cloud Prometheus](/backends/grafanacloudprometheus) | Managed | | ✅ | | -grafanacloudtempo | [Grafana Cloud Tempo](/backends/grafanacloudtempo) | Managed | ✅ | | | -groundcover | [Groundcover inCloud](/backends/groundcover) | Managed | ✅ | ✅ | ✅ | -honeycomb | [Honeycomb](/backends/honeycomb) | Managed | ✅ | ✅ | ✅ | -hyperdx | [HyperDX](/backends/hyperdx) | Managed | ✅ | ✅ | ✅ | -instana | [IBM Instana](/backends/instana) | Managed | ✅ | ✅ | ✅ | -jaeger | [Jaeger](/backends/jaeger) | Self-Hosted | ✅ | | | -kafka | [Kafka](/backends/kafka) | Self-Hosted | ✅ | ✅ | ✅ | -kloudmate | [KloudMate](/backends/kloudmate) | Managed | ✅ | ✅ | ✅ | -last9 | [Last9](/backends/last9) | Managed | ✅ | ✅ | ✅ | -lightstep | [Lightstep](/backends/lightstep) | Managed | ✅ | | | -logzio | [Logz.io](/backends/logzio) | Managed | ✅ | ✅ | ✅ | -loki | [Loki](/backends/loki) | Self-Hosted | | | ✅ | -lumigo | [Lumigo](/backends/lumigo) | Managed | ✅ | ✅ | ✅ | -middleware | [Middleware](/backends/middleware) | Managed | ✅ | ✅ | ✅ | -newrelic | [New Relic](/backends/newrelic) | Managed | ✅ | ✅ | ✅ | -opsverse | [OpsVerse](/backends/opsverse) | Managed | ✅ | ✅ | ✅ | -otlp | [OTLP gRPC](/backends/otlp) | Self-Hosted | ✅ | ✅ | ✅ | -otlphttp | [OTLP http](/backends/otlphttp) | Self-Hosted | ✅ | ✅ | ✅ | -prometheus | [Prometheus](/backends/prometheus) | Self-Hosted | | ✅ | | -qryn-oss | [qryn](/backends/qryn) | Self-Hosted | ✅ | ✅ | ✅ | -quickwit | [Quickwit](/backends/quickwit) | Self-Hosted | ✅ | | ✅ | -signoz | [SigNoz](/backends/signoz) | Self-Hosted | ✅ | ✅ | ✅ | -splunk | [Splunk](/backends/splunk) | Managed | ✅ | | | -sumologic | [Sumo Logic](/backends/sumologic) | Managed | ✅ | ✅ | ✅ | -tempo | [Tempo](/backends/tempo) | Self-Hosted | ✅ | | | -traceloop | [Traceloop](/backends/traceloop) | Managed | ✅ | ✅ | | -uptrace | [Uptrace](/backends/uptrace) | Managed | ✅ | ✅ | ✅ | \ No newline at end of file +appdynamics | [AppDynamics](/backends/appdynamics) | Managed | ✅ | ✅ | ✅ | +s3 | [AWS S3](/backends/awss3) | Managed | ✅ | ✅ | ✅ | +axiom | [Axiom](/backends/axiom) | Managed | ✅ | | ✅ | +azureblob | [Azure Blob Storage](/backends/azureblob) | Managed | ✅ | | ✅ | +betterstack | [Better Stack](/backends/betterstack) | Managed | | ✅ | ✅ | +causely | [Causely](/backends/causely) | Managed | ✅ | ✅ | | +chronosphere | [Chronosphere](/backends/chronosphere) | Managed | ✅ | ✅ | | +clickhouse | [Clickhouse](/backends/clickhouse) | Self-Hosted | ✅ | ✅ | ✅ | +coralogix | [Coralogix](/backends/coralogix) | Managed | ✅ | ✅ | ✅ | +dash0 | [Dash0](/backends/dash0) | Managed | ✅ | ✅ | ✅ | +datadog | [Datadog](/backends/datadog) | Managed | ✅ | ✅ | ✅ | +dynatrace | [Dynatrace](/backends/dynatrace) | Managed | ✅ | ✅ | ✅ | +elasticapm | [Elastic APM](/backends/elasticapm) | Managed | ✅ | ✅ | ✅ | +elasticsearch | [Elasticsearch](/backends/elasticsearch) | Self-Hosted | ✅ | | ✅ | +qryn | [Gigapipe](/backends/gigapipe) | Managed | ✅ | ✅ | ✅ | +googlecloud | [Google Cloud Monitoring](/backends/googlecloudmonitoring) | Managed | ✅ | | ✅ | +grafanacloudloki | [Grafana Cloud Loki](/backends/grafanacloudloki) | Managed | | | ✅ | +grafanacloudprometheus | [Grafana Cloud Prometheus](/backends/grafanacloudprometheus) | Managed | | ✅ | | +grafanacloudtempo | [Grafana Cloud Tempo](/backends/grafanacloudtempo) | Managed | ✅ | | | +groundcover | [Groundcover inCloud](/backends/groundcover) | Managed | ✅ | ✅ | ✅ | +honeycomb | [Honeycomb](/backends/honeycomb) | Managed | ✅ | ✅ | ✅ | +hyperdx | [HyperDX](/backends/hyperdx) | Managed | ✅ | ✅ | ✅ | +instana | [IBM Instana](/backends/instana) | Managed | ✅ | ✅ | ✅ | +jaeger | [Jaeger](/backends/jaeger) | Self-Hosted | ✅ | | | +kafka | [Kafka](/backends/kafka) | Self-Hosted | ✅ | ✅ | ✅ | +kloudmate | [KloudMate](/backends/kloudmate) | Managed | ✅ | ✅ | ✅ | +last9 | [Last9](/backends/last9) | Managed | ✅ | ✅ | ✅ | +lightstep | [Lightstep](/backends/lightstep) | Managed | ✅ | | | +logzio | [Logz.io](/backends/logzio) | Managed | ✅ | ✅ | ✅ | +loki | [Loki](/backends/loki) | Self-Hosted | | | ✅ | +lumigo | [Lumigo](/backends/lumigo) | Managed | ✅ | ✅ | ✅ | +middleware | [Middleware](/backends/middleware) | Managed | ✅ | ✅ | ✅ | +newrelic | [New Relic](/backends/newrelic) | Managed | ✅ | ✅ | ✅ | +opsverse | [OpsVerse](/backends/opsverse) | Managed | ✅ | ✅ | ✅ | +otlp | [OTLP gRPC](/backends/otlp) | Self-Hosted | ✅ | ✅ | ✅ | +otlphttp | [OTLP http](/backends/otlphttp) | Self-Hosted | ✅ | ✅ | ✅ | +prometheus | [Prometheus](/backends/prometheus) | Self-Hosted | | ✅ | | +qryn-oss | [qryn](/backends/qryn) | Self-Hosted | ✅ | ✅ | ✅ | +quickwit | [Quickwit](/backends/quickwit) | Self-Hosted | ✅ | | ✅ | +signoz | [SigNoz](/backends/signoz) | Self-Hosted | ✅ | ✅ | ✅ | +splunk | [Splunk](/backends/splunk) | Managed | ✅ | | | +sumologic | [Sumo Logic](/backends/sumologic) | Managed | ✅ | ✅ | ✅ | +tempo | [Tempo](/backends/tempo) | Self-Hosted | ✅ | | | +traceloop | [Traceloop](/backends/traceloop) | Managed | ✅ | ✅ | | +uptrace | [Uptrace](/backends/uptrace) | Managed | ✅ | ✅ | ✅ | \ No newline at end of file diff --git a/docs/backends/appdynamics.mdx b/docs/backends/appdynamics.mdx index 1b5616b579..22513130a6 100644 --- a/docs/backends/appdynamics.mdx +++ b/docs/backends/appdynamics.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -appdynamics +appdynamics {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/awss3.mdx b/docs/backends/awss3.mdx index 7db33853fd..a2a1ace2d1 100644 --- a/docs/backends/awss3.mdx +++ b/docs/backends/awss3.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -s3 +s3 {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/axiom.mdx b/docs/backends/axiom.mdx index 948d40ee5e..bb5118ae5c 100644 --- a/docs/backends/axiom.mdx +++ b/docs/backends/axiom.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -axiom +axiom {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/azureblob.mdx b/docs/backends/azureblob.mdx index e32464d543..18db828629 100644 --- a/docs/backends/azureblob.mdx +++ b/docs/backends/azureblob.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -azureblob +azureblob {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/betterstack.mdx b/docs/backends/betterstack.mdx index f01165c0da..763793aabe 100644 --- a/docs/backends/betterstack.mdx +++ b/docs/backends/betterstack.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -betterstack +betterstack {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/causely.mdx b/docs/backends/causely.mdx index f97f92f080..6205181fa6 100644 --- a/docs/backends/causely.mdx +++ b/docs/backends/causely.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -causely +causely {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/chronosphere.mdx b/docs/backends/chronosphere.mdx index 2d887a0335..f2b569504d 100644 --- a/docs/backends/chronosphere.mdx +++ b/docs/backends/chronosphere.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -chronosphere +chronosphere {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/clickhouse.mdx b/docs/backends/clickhouse.mdx index a6ce46a65a..334c12c55b 100644 --- a/docs/backends/clickhouse.mdx +++ b/docs/backends/clickhouse.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -clickhouse +clickhouse {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/coralogix.mdx b/docs/backends/coralogix.mdx index 65b301343d..3bccae6373 100644 --- a/docs/backends/coralogix.mdx +++ b/docs/backends/coralogix.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -coralogix +coralogix {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/dash0.mdx b/docs/backends/dash0.mdx index 4b0fa44212..c61ccf45cb 100644 --- a/docs/backends/dash0.mdx +++ b/docs/backends/dash0.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -dash0 +dash0 {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/datadog.mdx b/docs/backends/datadog.mdx index fc33ed7785..ea8240fb4d 100644 --- a/docs/backends/datadog.mdx +++ b/docs/backends/datadog.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -datadog +datadog {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/dynatrace.mdx b/docs/backends/dynatrace.mdx index 764632aec4..e1b1d2847f 100644 --- a/docs/backends/dynatrace.mdx +++ b/docs/backends/dynatrace.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -dynatrace +dynatrace {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/elasticapm.mdx b/docs/backends/elasticapm.mdx index 0d64a2fa63..dddddb9257 100644 --- a/docs/backends/elasticapm.mdx +++ b/docs/backends/elasticapm.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -elasticapm +elasticapm {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/elasticsearch.mdx b/docs/backends/elasticsearch.mdx index 7627300d19..f82cadbd4f 100644 --- a/docs/backends/elasticsearch.mdx +++ b/docs/backends/elasticsearch.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -elasticsearch +elasticsearch {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/gigapipe.mdx b/docs/backends/gigapipe.mdx index df39407dd0..7ba0d33885 100644 --- a/docs/backends/gigapipe.mdx +++ b/docs/backends/gigapipe.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -qryn +qryn {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/googlecloudmonitoring.mdx b/docs/backends/googlecloudmonitoring.mdx index 8ac577ec62..cfd9d4ca84 100644 --- a/docs/backends/googlecloudmonitoring.mdx +++ b/docs/backends/googlecloudmonitoring.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -googlecloud +googlecloud {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/grafanacloudloki.mdx b/docs/backends/grafanacloudloki.mdx index c766dd5c46..9c0a63e26d 100644 --- a/docs/backends/grafanacloudloki.mdx +++ b/docs/backends/grafanacloudloki.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -grafanacloudloki +grafanacloudloki {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/grafanacloudprometheus.mdx b/docs/backends/grafanacloudprometheus.mdx index 93cdcc26a5..b958e1ff57 100644 --- a/docs/backends/grafanacloudprometheus.mdx +++ b/docs/backends/grafanacloudprometheus.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -grafanacloudprometheus +grafanacloudprometheus {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/grafanacloudtempo.mdx b/docs/backends/grafanacloudtempo.mdx index e979eeae5f..1fe7d2f1d9 100644 --- a/docs/backends/grafanacloudtempo.mdx +++ b/docs/backends/grafanacloudtempo.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -grafanacloudtempo +grafanacloudtempo {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/groundcover.mdx b/docs/backends/groundcover.mdx index a109f42fc4..c784553816 100644 --- a/docs/backends/groundcover.mdx +++ b/docs/backends/groundcover.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -groundcover +groundcover {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/honeycomb.mdx b/docs/backends/honeycomb.mdx index 12d2e7e676..f0a08a63b9 100644 --- a/docs/backends/honeycomb.mdx +++ b/docs/backends/honeycomb.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -honeycomb +honeycomb {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/hyperdx.mdx b/docs/backends/hyperdx.mdx index f9cf4d8580..9d70b402b2 100644 --- a/docs/backends/hyperdx.mdx +++ b/docs/backends/hyperdx.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -hyperdx +hyperdx {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/instana.mdx b/docs/backends/instana.mdx index c5b9a9952b..e01e769131 100644 --- a/docs/backends/instana.mdx +++ b/docs/backends/instana.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -instana +instana {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/jaeger.mdx b/docs/backends/jaeger.mdx index d66c4d8b84..89a3d201c9 100644 --- a/docs/backends/jaeger.mdx +++ b/docs/backends/jaeger.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -jaeger +jaeger {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/kafka.mdx b/docs/backends/kafka.mdx index ef85d12a7e..d6d1c7f652 100644 --- a/docs/backends/kafka.mdx +++ b/docs/backends/kafka.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -kafka +kafka {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/kloudmate.mdx b/docs/backends/kloudmate.mdx index 98d77216fc..704d15ef3e 100644 --- a/docs/backends/kloudmate.mdx +++ b/docs/backends/kloudmate.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -kloudmate +kloudmate {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/last9.mdx b/docs/backends/last9.mdx index 020be0e7f9..643c9875d0 100644 --- a/docs/backends/last9.mdx +++ b/docs/backends/last9.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -last9 +last9 {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/lightstep.mdx b/docs/backends/lightstep.mdx index 5a30e11151..f23e780631 100644 --- a/docs/backends/lightstep.mdx +++ b/docs/backends/lightstep.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -lightstep +lightstep {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/logzio.mdx b/docs/backends/logzio.mdx index 2e88560a77..9d38ec2ba2 100644 --- a/docs/backends/logzio.mdx +++ b/docs/backends/logzio.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -logzio +logzio {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/loki.mdx b/docs/backends/loki.mdx index 46f4b04dea..451ab7fde2 100644 --- a/docs/backends/loki.mdx +++ b/docs/backends/loki.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -loki +loki {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/lumigo.mdx b/docs/backends/lumigo.mdx index 95b3f81edf..f833b12e41 100644 --- a/docs/backends/lumigo.mdx +++ b/docs/backends/lumigo.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -lumigo +lumigo {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/middleware.mdx b/docs/backends/middleware.mdx index 4a6cbb9aad..f140d6fd62 100644 --- a/docs/backends/middleware.mdx +++ b/docs/backends/middleware.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -middleware +middleware {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/newrelic.mdx b/docs/backends/newrelic.mdx index 47ec8334c1..a41cb76e4d 100644 --- a/docs/backends/newrelic.mdx +++ b/docs/backends/newrelic.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -newrelic +newrelic {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/opsverse.mdx b/docs/backends/opsverse.mdx index 50010a2654..8d9eb93ba6 100644 --- a/docs/backends/opsverse.mdx +++ b/docs/backends/opsverse.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -opsverse +opsverse {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/otlp.mdx b/docs/backends/otlp.mdx index 1ec572d666..bc88a6a673 100644 --- a/docs/backends/otlp.mdx +++ b/docs/backends/otlp.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -otlp +otlp {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/otlphttp.mdx b/docs/backends/otlphttp.mdx index b2b89e0285..ae7c5775dc 100644 --- a/docs/backends/otlphttp.mdx +++ b/docs/backends/otlphttp.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -otlphttp +otlphttp {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/prometheus.mdx b/docs/backends/prometheus.mdx index b32873810c..7f157f969b 100644 --- a/docs/backends/prometheus.mdx +++ b/docs/backends/prometheus.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -prometheus +prometheus {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/qryn.mdx b/docs/backends/qryn.mdx index c8c393e5fb..7fde3a8585 100644 --- a/docs/backends/qryn.mdx +++ b/docs/backends/qryn.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -qryn-oss +qryn-oss {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/quickwit.mdx b/docs/backends/quickwit.mdx index 5fbeb74bba..796f14f2bf 100644 --- a/docs/backends/quickwit.mdx +++ b/docs/backends/quickwit.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -quickwit +quickwit {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/signoz.mdx b/docs/backends/signoz.mdx index 8c065f3b88..d98d35c320 100644 --- a/docs/backends/signoz.mdx +++ b/docs/backends/signoz.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -signoz +signoz {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/splunk.mdx b/docs/backends/splunk.mdx index 15575a8c62..5754b6dea4 100644 --- a/docs/backends/splunk.mdx +++ b/docs/backends/splunk.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -splunk +splunk {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/sumologic.mdx b/docs/backends/sumologic.mdx index 0f8ad2ec2f..86d6cdafb6 100644 --- a/docs/backends/sumologic.mdx +++ b/docs/backends/sumologic.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -sumologic +sumologic {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/tempo.mdx b/docs/backends/tempo.mdx index 91d44db76f..32628d1a41 100644 --- a/docs/backends/tempo.mdx +++ b/docs/backends/tempo.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -tempo +tempo {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/traceloop.mdx b/docs/backends/traceloop.mdx index 0cd4a23cbb..4e467919b4 100644 --- a/docs/backends/traceloop.mdx +++ b/docs/backends/traceloop.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -traceloop +traceloop {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/backends/uptrace.mdx b/docs/backends/uptrace.mdx index 67c99b37a6..cd4b5947f9 100644 --- a/docs/backends/uptrace.mdx +++ b/docs/backends/uptrace.mdx @@ -7,13 +7,18 @@ icon: 'signal-stream' ### Getting Started -uptrace +uptrace {/* Add custom content here (under this comment)... - e.g: - [🔗 website](https://odigos.io) + e.g. + + **Creating Account**
+ Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up** + + **Obtaining Access Token**
+ Go to **⚙️ > Access Tokens** and click **Create New** !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !! !! START CUSTOM EDIT !! diff --git a/docs/sync-dest-doc.py b/docs/sync-dest-doc.py index 8c396e9a41..64ec121a6c 100644 --- a/docs/sync-dest-doc.py +++ b/docs/sync-dest-doc.py @@ -63,14 +63,14 @@ def replace_section(mdx_content, start_block, end_block, new_content, default_ap # Generate functions # (generate content from within YAML files) -def generate_logo(yaml_content, img_tag=False, img_size=16): +def generate_logo(yaml_content, img_tag=False, img_size=4): """ Function to generate the logo for the destination. Args: yaml_content (dict): Destination YAML content. img_tag (bool): If True, return the image tag; otherwise, return the markdown link. - img_size (int): Size of the image. + img_size (int): Size of the image (in Tailwind format). Returns: str: Logo content. @@ -79,7 +79,7 @@ def generate_logo(yaml_content, img_tag=False, img_size=16): dest_image = yaml_content.get("spec", {}).get("image", "") if img_tag: - return f"{dest_type}" + return f"\"{dest_type}\"" return f"[![logo with clickable link](https://d15jtxgb40qetw.cloudfront.net/{dest_image})](https://www.google.com/search?q={dest_type})" @@ -373,12 +373,15 @@ def get_documenation(yaml_content): + "\nicon: 'signal-stream'" + "\n---" + "\n\n### Getting Started" - + f"\n\n{generate_logo(yaml_content, True, 100)}" + + f"\n\n{generate_logo(yaml_content, True, 20)}" + "\n\n{/*" + "\n Add custom content here (under this comment)..." + "\n" - + "\n e.g:" - + "\n [🔗 website](https://odigos.io)" + + "\n e.g." + + "\n\n **Creating Account**
" + + "\n Go to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up**" + + "\n\n **Obtaining Access Token**
" + + "\n Go to **⚙️ > Access Tokens** and click **Create New**" + "\n" + "\n !! Do not remove this comment, this acts as a key indicator in `docs/sync-dest-doc.py` !!" + "\n !! START CUSTOM EDIT !!" @@ -493,13 +496,9 @@ def create_mdx(mdx_path, yaml_content): """ documenation = get_documenation(yaml_content) content_before = documenation.get("content_before_custom") - content_after = documenation.get("content_after_custom") + content_after = documenation.get("content_after_custom") mdx_content = ( f"{content_before}" - + "\n\n**Creating Account**
" - + "\nGo to the **[🔗 website](https://odigos.io) > Account** and click **Sign Up**" - + "\n\n**Obtaining Access Token**
" - + "\nGo to **⚙️ > Access Tokens** and click **Create New**" + f"\n\n{content_after}" ) @@ -566,7 +565,7 @@ def process_overview(backend_yaml_dir, docs_dir): signals = yaml_content.get("spec", {}).get("signals", {}) rows.append( - f"{generate_logo(yaml_content, True)} | " + f"{generate_logo(yaml_content, True, 4)} | " f"[{name}](/backends/{file.replace('.yaml', '')}) | " f"{'Managed' if category == 'managed' else 'Self-Hosted'} | " f"{'✅' if signals.get('traces', {}).get('supported', False) else ''} | " From 4abac477141e2658d63e766006ef5beb000cb08d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Feb 2025 20:29:35 +0000 Subject: [PATCH 07/15] chore(deps): bump golang.org/x/sync from 0.10.0 to 0.11.0 in /instrumentor (#2456) Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.10.0 to 0.11.0.
Commits
  • fe3591b sync/errgroup: improve documentation for semaphore limit behavior
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang.org/x/sync&package-manager=go_modules&previous-version=0.10.0&new-version=0.11.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- instrumentor/go.mod | 2 +- instrumentor/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentor/go.mod b/instrumentor/go.mod index f7c7894e35..e9c78cd35e 100644 --- a/instrumentor/go.mod +++ b/instrumentor/go.mod @@ -13,7 +13,7 @@ require ( github.com/onsi/ginkgo v1.16.5 github.com/onsi/gomega v1.36.2 go.opentelemetry.io/otel v1.34.0 - golang.org/x/sync v0.10.0 + golang.org/x/sync v0.11.0 k8s.io/api v0.32.1 k8s.io/apimachinery v0.32.1 k8s.io/client-go v0.32.1 diff --git a/instrumentor/go.sum b/instrumentor/go.sum index c4ace3bed1..12b5178194 100644 --- a/instrumentor/go.sum +++ b/instrumentor/go.sum @@ -206,8 +206,8 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From 83179b5f63079b7b9c9ebac254c2650148c5f5d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Feb 2025 21:07:24 +0000 Subject: [PATCH 08/15] chore(deps): bump the k8s-dependencies group in /instrumentor with 4 updates (#2454) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the k8s-dependencies group in /instrumentor with 4 updates: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery), [k8s.io/client-go](https://github.com/kubernetes/client-go) and [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime). Updates `k8s.io/api` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/apimachinery` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/client-go` from 0.32.1 to 0.32.2
Commits

Updates `sigs.k8s.io/controller-runtime` from 0.20.1 to 0.20.2
Release notes

Sourced from sigs.k8s.io/controller-runtime's releases.

v0.20.2

What's Changed

Full Changelog: https://github.com/kubernetes-sigs/controller-runtime/compare/v0.20.1...v0.20.2

Commits
  • 52b1791 [release-0.20] 🌱 Update dependencies, k8s 1.32.1 (#3108)
  • ed7d2a4 Merge pull request #3106 from k8s-infra-cherrypick-robot/cherry-pick-3103-to-...
  • cad72fa Fix behavior of rate limit option in priorityqueue.AddWithOpts
  • fc48583 [release-0.20] ✨ Expose all Go runtime metrics (#3100)
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- instrumentor/go.mod | 12 ++++++------ instrumentor/go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/instrumentor/go.mod b/instrumentor/go.mod index e9c78cd35e..7cfae1f8c7 100644 --- a/instrumentor/go.mod +++ b/instrumentor/go.mod @@ -14,10 +14,10 @@ require ( github.com/onsi/gomega v1.36.2 go.opentelemetry.io/otel v1.34.0 golang.org/x/sync v0.11.0 - k8s.io/api v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 - sigs.k8s.io/controller-runtime v0.20.1 + k8s.io/api v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 + sigs.k8s.io/controller-runtime v0.20.2 ) require ( @@ -54,7 +54,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-logr/zapr v1.3.0 github.com/go-openapi/jsonpointer v0.21.0 // indirect @@ -91,7 +91,7 @@ require ( google.golang.org/protobuf v1.36.4 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.32.0 // indirect + k8s.io/apiextensions-apiserver v0.32.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect diff --git a/instrumentor/go.sum b/instrumentor/go.sum index 12b5178194..d5c5acc90c 100644 --- a/instrumentor/go.sum +++ b/instrumentor/go.sum @@ -15,8 +15,8 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= -github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -274,22 +274,22 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.0 h1:S0Xlqt51qzzqjKPxfgX1xh4HBZE+p8KKBq+k2SWNOE0= -k8s.io/apiextensions-apiserver v0.32.0/go.mod h1:86hblMvN5yxMvZrZFX2OhIHAuFIMJIZ19bTvzkP+Fmw= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= +k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.20.1 h1:JbGMAG/X94NeM3xvjenVUaBjy6Ui4Ogd/J5ZtjZnHaE= -sigs.k8s.io/controller-runtime v0.20.1/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk= From 3b6721e17d7827dbc4f824dc0c3bd58b88121947 Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Mon, 17 Feb 2025 06:50:48 +0200 Subject: [PATCH 09/15] feat: add generic device only for mounts (#2447) Co-authored-by: Tamir David --- distros/yamls/java-ebpf-instrumentations.yaml | 2 +- distros/yamls/nodejs-enterprise.yaml | 2 +- distros/yamls/python-community.yaml | 2 +- k8sutils/pkg/container/container.go | 18 ++++++++++++++++++ odiglet/pkg/instrumentation/lister.go | 17 +++++++++++++++++ .../assert/simple-demo-instrumented.yaml | 4 ++-- 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/distros/yamls/java-ebpf-instrumentations.yaml b/distros/yamls/java-ebpf-instrumentations.yaml index 043ca3d886..1a46648564 100644 --- a/distros/yamls/java-ebpf-instrumentations.yaml +++ b/distros/yamls/java-ebpf-instrumentations.yaml @@ -23,4 +23,4 @@ spec: runtimeAgent: directoryNames: # - "{{ODIGOS_AGENTS_DIR}}/java-ebpf" - device: 'instrumentation.odigos.io/java-ebpf-enterprise' + device: 'instrumentation.odigos.io/generic' diff --git a/distros/yamls/nodejs-enterprise.yaml b/distros/yamls/nodejs-enterprise.yaml index 0c14099f85..ad42200860 100644 --- a/distros/yamls/nodejs-enterprise.yaml +++ b/distros/yamls/nodejs-enterprise.yaml @@ -20,4 +20,4 @@ spec: runtimeAgent: directoryNames: # - "{{ODIGOS_AGENTS_DIR}}/nodejs-ebpf" - device: 'instrumentation.odigos.io/javascript-ebpf-enterprise' + device: 'instrumentation.odigos.io/generic' diff --git a/distros/yamls/python-community.yaml b/distros/yamls/python-community.yaml index 55b914ac0f..46f6c74870 100644 --- a/distros/yamls/python-community.yaml +++ b/distros/yamls/python-community.yaml @@ -20,5 +20,5 @@ spec: runtimeAgent: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/python" - device: 'instrumentation.odigos.io/python-native-community' + device: 'instrumentation.odigos.io/generic' \ No newline at end of file diff --git a/k8sutils/pkg/container/container.go b/k8sutils/pkg/container/container.go index 3d176a2393..2e5abb0034 100644 --- a/k8sutils/pkg/container/container.go +++ b/k8sutils/pkg/container/container.go @@ -34,6 +34,18 @@ func LanguageAndSdk(pod *v1.Pod, containerName string, distroName string) (commo return common.JavascriptProgrammingLanguage, common.OtelSdkEbpfEnterprise, nil case "mysql-enterprise": return common.MySQLProgrammingLanguage, common.OtelSdkEbpfEnterprise, nil + + // None ebpf distros here only to avoid error when parsing the generic device + case "python-community": + return common.PythonProgrammingLanguage, common.OtelSdkNativeCommunity, nil + case "nodejs-community": + return common.JavascriptProgrammingLanguage, common.OtelSdkNativeCommunity, nil + case "java-community": + return common.JavaProgrammingLanguage, common.OtelSdkNativeCommunity, nil + case "dotnet-community": + return common.DotNetProgrammingLanguage, common.OtelSdkNativeCommunity, nil + case "dotnet-legacy": + return common.DotNetProgrammingLanguage, common.OtelSdkNativeEnterprise, nil } } @@ -64,6 +76,12 @@ func GetLanguageAndOtelSdk(container *v1.Container) (common.ProgrammingLanguage, return common.UnknownProgrammingLanguage, common.OtelSdk{}, false } + // temporary workaround for the "generic" device until we git rid of the other devices + // and it is the only one left + if *deviceName == "instrumentation.odigos.io/generic" { + return common.UnknownProgrammingLanguage, common.OtelSdk{}, false + } + language, sdk := common.InstrumentationDeviceNameToComponents(*deviceName) return language, sdk, true } diff --git a/odiglet/pkg/instrumentation/lister.go b/odiglet/pkg/instrumentation/lister.go index 2eb8900722..cb415ecf9b 100644 --- a/odiglet/pkg/instrumentation/lister.go +++ b/odiglet/pkg/instrumentation/lister.go @@ -4,7 +4,9 @@ import ( "context" odigosclientset "github.com/odigos-io/odigos/api/generated/odigos/clientset/versioned" + "github.com/odigos-io/odigos/api/k8sconsts" "k8s.io/client-go/rest" + "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" "github.com/odigos-io/odigos/procdiscovery/pkg/libc" @@ -80,6 +82,21 @@ func NewLister(ctx context.Context, clientset *kubernetes.Clientset, otelSdksLsf } } + // device that only mounts the odigos agent directory. + // always present regardless of the otelSdksLsf + mountDeviceFunc := func(deviceId string, uniqueDestinationSignals map[common.ObservabilitySignal]struct{}) *v1beta1.ContainerAllocateResponse { + return &v1beta1.ContainerAllocateResponse{ + Mounts: []*v1beta1.Mount{ + { + ContainerPath: k8sconsts.OdigosAgentsDirectory, + HostPath: k8sconsts.OdigosAgentsDirectory, + ReadOnly: true, + }, + }, + } + } + availablePlugins["generic"] = NewPlugin(maxPods, mountDeviceFunc, odigosKubeClient) + return &lister{ plugins: availablePlugins, }, nil diff --git a/tests/common/assert/simple-demo-instrumented.yaml b/tests/common/assert/simple-demo-instrumented.yaml index c7878190fb..d046ec2b44 100644 --- a/tests/common/assert/simple-demo-instrumented.yaml +++ b/tests/common/assert/simple-demo-instrumented.yaml @@ -81,9 +81,9 @@ spec: - name: inventory resources: limits: - instrumentation.odigos.io/python-native-community: "1" + instrumentation.odigos.io/generic: "1" requests: - instrumentation.odigos.io/python-native-community: "1" + instrumentation.odigos.io/generic: "1" status: containerStatuses: - name: inventory From 3938355f9050ae6dfa9a4cb33ab77c6f56fa1eb3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 08:29:41 +0000 Subject: [PATCH 10/15] chore(deps): bump the k8s-dependencies group in /scheduler with 4 updates (#2453) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the k8s-dependencies group in /scheduler with 4 updates: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery), [k8s.io/client-go](https://github.com/kubernetes/client-go) and [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime). Updates `k8s.io/api` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/apimachinery` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/client-go` from 0.32.1 to 0.32.2
Commits

Updates `sigs.k8s.io/controller-runtime` from 0.20.1 to 0.20.2
Release notes

Sourced from sigs.k8s.io/controller-runtime's releases.

v0.20.2

What's Changed

Full Changelog: https://github.com/kubernetes-sigs/controller-runtime/compare/v0.20.1...v0.20.2

Commits
  • 52b1791 [release-0.20] 🌱 Update dependencies, k8s 1.32.1 (#3108)
  • ed7d2a4 Merge pull request #3106 from k8s-infra-cherrypick-robot/cherry-pick-3103-to-...
  • cad72fa Fix behavior of rate limit option in priorityqueue.AddWithOpts
  • fc48583 [release-0.20] ✨ Expose all Go runtime metrics (#3100)
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- scheduler/go.mod | 12 ++++++------ scheduler/go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/scheduler/go.mod b/scheduler/go.mod index c68044122b..a76a769a99 100644 --- a/scheduler/go.mod +++ b/scheduler/go.mod @@ -12,10 +12,10 @@ require ( github.com/odigos-io/opentelemetry-zap-bridge v0.0.5 github.com/onsi/ginkgo v1.16.5 github.com/onsi/gomega v1.36.2 - k8s.io/api v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 - sigs.k8s.io/controller-runtime v0.20.1 + k8s.io/api v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 + sigs.k8s.io/controller-runtime v0.20.2 sigs.k8s.io/yaml v1.4.0 ) @@ -27,7 +27,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch v4.9.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/fatih/color v1.10.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect @@ -88,7 +88,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.32.0 // indirect + k8s.io/apiextensions-apiserver v0.32.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect diff --git a/scheduler/go.sum b/scheduler/go.sum index eeb741dc6d..102fe2e40d 100644 --- a/scheduler/go.sum +++ b/scheduler/go.sum @@ -15,8 +15,8 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= -github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -274,22 +274,22 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.0 h1:S0Xlqt51qzzqjKPxfgX1xh4HBZE+p8KKBq+k2SWNOE0= -k8s.io/apiextensions-apiserver v0.32.0/go.mod h1:86hblMvN5yxMvZrZFX2OhIHAuFIMJIZ19bTvzkP+Fmw= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= +k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.20.1 h1:JbGMAG/X94NeM3xvjenVUaBjy6Ui4Ogd/J5ZtjZnHaE= -sigs.k8s.io/controller-runtime v0.20.1/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk= From 13e132188a183fc8745972538266796f01ec7f89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 09:30:15 +0000 Subject: [PATCH 11/15] chore(deps): bump the k8s-dependencies group in /autoscaler with 4 updates (#2455) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the k8s-dependencies group in /autoscaler with 4 updates: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery), [k8s.io/client-go](https://github.com/kubernetes/client-go) and [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime). Updates `k8s.io/api` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/apimachinery` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/client-go` from 0.32.1 to 0.32.2
Commits

Updates `sigs.k8s.io/controller-runtime` from 0.20.1 to 0.20.2
Release notes

Sourced from sigs.k8s.io/controller-runtime's releases.

v0.20.2

What's Changed

Full Changelog: https://github.com/kubernetes-sigs/controller-runtime/compare/v0.20.1...v0.20.2

Commits
  • 52b1791 [release-0.20] 🌱 Update dependencies, k8s 1.32.1 (#3108)
  • ed7d2a4 Merge pull request #3106 from k8s-infra-cherrypick-robot/cherry-pick-3103-to-...
  • cad72fa Fix behavior of rate limit option in priorityqueue.AddWithOpts
  • fc48583 [release-0.20] ✨ Expose all Go runtime metrics (#3100)
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- autoscaler/go.mod | 12 ++++++------ autoscaler/go.sum | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/autoscaler/go.mod b/autoscaler/go.mod index 3185ff31b0..e47131f596 100644 --- a/autoscaler/go.mod +++ b/autoscaler/go.mod @@ -12,11 +12,11 @@ require ( github.com/odigos-io/opentelemetry-zap-bridge v0.0.5 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/otel v1.34.0 - k8s.io/api v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 + k8s.io/api v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 k8s.io/utils v0.0.0-20241210054802-24370beab758 - sigs.k8s.io/controller-runtime v0.20.1 + sigs.k8s.io/controller-runtime v0.20.2 ) require ( @@ -27,7 +27,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/evanphx/json-patch v4.9.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/fatih/color v1.16.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect @@ -86,7 +86,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.32.0 // indirect + k8s.io/apiextensions-apiserver v0.32.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect diff --git a/autoscaler/go.sum b/autoscaler/go.sum index 22e8b28650..818c84e3af 100644 --- a/autoscaler/go.sum +++ b/autoscaler/go.sum @@ -14,8 +14,8 @@ github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapw github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= -github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= @@ -101,10 +101,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/odigos-io/opentelemetry-zap-bridge v0.0.5 h1:UDEKtgab42nGVSvA/F3lLKUYFPETtpl7kpxM9BKBlWk= github.com/odigos-io/opentelemetry-zap-bridge v0.0.5/go.mod h1:K98wHhktQ6vCTqeFztcpBDtPTe88vxVgZFlbeGobt24= -github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= -github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4= -github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= +github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw= +github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -220,22 +220,22 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.0 h1:S0Xlqt51qzzqjKPxfgX1xh4HBZE+p8KKBq+k2SWNOE0= -k8s.io/apiextensions-apiserver v0.32.0/go.mod h1:86hblMvN5yxMvZrZFX2OhIHAuFIMJIZ19bTvzkP+Fmw= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= +k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.20.1 h1:JbGMAG/X94NeM3xvjenVUaBjy6Ui4Ogd/J5ZtjZnHaE= -sigs.k8s.io/controller-runtime v0.20.1/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk= From dc78e9ac404f83f2c13ee251bdbce3c826732239 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 10:06:19 +0000 Subject: [PATCH 12/15] chore(deps): bump the k8s-dependencies group in /odiglet with 5 updates (#2457) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the k8s-dependencies group in /odiglet with 5 updates: | Package | From | To | | --- | --- | --- | | [k8s.io/api](https://github.com/kubernetes/api) | `0.32.1` | `0.32.2` | | [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.32.1` | `0.32.2` | | [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.32.1` | `0.32.2` | | [k8s.io/kubelet](https://github.com/kubernetes/kubelet) | `0.32.1` | `0.32.2` | | [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) | `0.20.1` | `0.20.2` | Updates `k8s.io/api` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/apimachinery` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/client-go` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/kubelet` from 0.32.1 to 0.32.2
Commits

Updates `sigs.k8s.io/controller-runtime` from 0.20.1 to 0.20.2
Release notes

Sourced from sigs.k8s.io/controller-runtime's releases.

v0.20.2

What's Changed

Full Changelog: https://github.com/kubernetes-sigs/controller-runtime/compare/v0.20.1...v0.20.2

Commits
  • 52b1791 [release-0.20] 🌱 Update dependencies, k8s 1.32.1 (#3108)
  • ed7d2a4 Merge pull request #3106 from k8s-infra-cherrypick-robot/cherry-pick-3103-to-...
  • cad72fa Fix behavior of rate limit option in priorityqueue.AddWithOpts
  • fc48583 [release-0.20] ✨ Expose all Go runtime metrics (#3100)
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- odiglet/go.mod | 16 ++++++++-------- odiglet/go.sum | 40 ++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/odiglet/go.mod b/odiglet/go.mod index 66a2ea5311..419bb20681 100644 --- a/odiglet/go.mod +++ b/odiglet/go.mod @@ -22,11 +22,11 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 go.uber.org/zap v1.27.0 golang.org/x/sync v0.11.0 - k8s.io/api v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 - k8s.io/kubelet v0.32.1 - sigs.k8s.io/controller-runtime v0.20.1 + k8s.io/api v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 + k8s.io/kubelet v0.32.2 + sigs.k8s.io/controller-runtime v0.20.2 ) require ( @@ -37,7 +37,7 @@ require ( github.com/cilium/ebpf v0.17.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.12.1 // indirect - github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -107,8 +107,8 @@ require ( gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.32.0 // indirect - k8s.io/cri-api v0.32.1 // indirect + k8s.io/apiextensions-apiserver v0.32.1 // indirect + k8s.io/cri-api v0.32.2 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect diff --git a/odiglet/go.sum b/odiglet/go.sum index 823c5197f6..e45ae069e5 100644 --- a/odiglet/go.sum +++ b/odiglet/go.sum @@ -69,8 +69,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= -github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= @@ -244,15 +244,15 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= -github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= +github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4= -github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw= +github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -582,19 +582,19 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.0 h1:S0Xlqt51qzzqjKPxfgX1xh4HBZE+p8KKBq+k2SWNOE0= -k8s.io/apiextensions-apiserver v0.32.0/go.mod h1:86hblMvN5yxMvZrZFX2OhIHAuFIMJIZ19bTvzkP+Fmw= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= +k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= -k8s.io/cri-api v0.32.1 h1:XWDw70IJV0GmExhQBYz7H+6iFEaKXcUOpnj5MHQ/JXY= -k8s.io/cri-api v0.32.1/go.mod h1:DCzMuTh2padoinefWME0G678Mc3QFbLMF2vEweGzBAI= +k8s.io/cri-api v0.32.2 h1:7DuaOHpOcXweZeBUbRdK0iCroxctGp73VwgrA0u7kho= +k8s.io/cri-api v0.32.2/go.mod h1:DCzMuTh2padoinefWME0G678Mc3QFbLMF2vEweGzBAI= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= @@ -604,14 +604,14 @@ k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg= k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas= k8s.io/kubelet v0.19.2/go.mod h1:FHHoByVWzh6kNaarXaDPAa751Oz6REcOVRyFT84L1Is= -k8s.io/kubelet v0.32.1 h1:bB91GvMsZb+LfzBxnjPEr1Fal/sdxZtYphlfwAaRJGw= -k8s.io/kubelet v0.32.1/go.mod h1:4sAEZ6PlewD0GroV3zscY7llym6kmNNTVmUI/Qshm6w= +k8s.io/kubelet v0.32.2 h1:WFTSYdt3BB1aTApDuKNI16x/4MYqqX8WBBBBh3KupDg= +k8s.io/kubelet v0.32.2/go.mod h1:cC1ms5RS+lu0ckVr6AviCQXHLSPKEBC3D5oaCBdTGkI= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -sigs.k8s.io/controller-runtime v0.20.1 h1:JbGMAG/X94NeM3xvjenVUaBjy6Ui4Ogd/J5ZtjZnHaE= -sigs.k8s.io/controller-runtime v0.20.1/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= From b95886ed4d083953373cad59a31f872efac82cf1 Mon Sep 17 00:00:00 2001 From: Ron Federman <73110295+RonFed@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:07:17 +0200 Subject: [PATCH 13/15] refactor: pass distros provider as configuration for the instrumentor (#2450) --- distros/distro/oteldistribution.go | 3 - distros/oteldistributions.go | 169 ++++++++++++++---- distros/yamls/dotnet-community.yaml | 3 - distros/yamls/dotnet-legacy.yaml | 2 - distros/yamls/golang-community.yaml | 2 - distros/yamls/golang-enterprise.yaml | 2 - distros/yamls/java-community.yaml | 2 - distros/yamls/java-ebpf-instrumentations.yaml | 2 - distros/yamls/java-enterprise.yaml | 2 - distros/yamls/mysql-enterprise.yaml | 3 +- distros/yamls/nodejs-community.yaml | 2 - distros/yamls/nodejs-enterprise.yaml | 2 - distros/yamls/python-community.yaml | 2 - distros/yamls/python-enterprise.yaml | 2 - distros/yamls/render.go | 48 +---- instrumentor/cmd/main.go | 31 +++- .../collectorsgroup_controller.go | 4 +- .../effectiveconfig_controller.go | 4 +- .../instrumentationconfig_controller.go | 4 +- .../instrumentationrule_controller.go | 4 +- .../controllers/agentenabled/manager.go | 8 +- .../controllers/agentenabled/pods_webhook.go | 7 +- instrumentor/controllers/agentenabled/sync.go | 27 ++- instrumentor/controllers/manager.go | 5 +- instrumentor/instrumentor.go | 5 +- 25 files changed, 211 insertions(+), 134 deletions(-) diff --git a/distros/distro/oteldistribution.go b/distros/distro/oteldistribution.go index ffb3884de9..8a616e6c39 100644 --- a/distros/distro/oteldistribution.go +++ b/distros/distro/oteldistribution.go @@ -92,9 +92,6 @@ type OtelDistro struct { // Free text description of the distribution, what it includes, it's use cases, etc. Description string `yaml:"description"` - // Specifies the odigos tiers which includes this distribution - Tiers []common.OdigosTier `yaml:"tiers"` - // a list of environment variables that needs to be set in the application runtime // to enable the distribution. EnvironmentVariables []EnvironmentVariable `yaml:"environmentVariables,omitempty"` diff --git a/distros/oteldistributions.go b/distros/oteldistributions.go index 9c1a3b6067..8fbf64c59d 100644 --- a/distros/oteldistributions.go +++ b/distros/oteldistributions.go @@ -1,53 +1,156 @@ package distros import ( + "embed" + "errors" + "fmt" + "github.com/odigos-io/odigos/common" "github.com/odigos-io/odigos/distros/distro" "github.com/odigos-io/odigos/distros/yamls" + + "gopkg.in/yaml.v3" ) -func GetDefaultDistroNames(tier common.OdigosTier) map[common.ProgrammingLanguage]string { - switch tier { - case common.CommunityOdigosTier: - return map[common.ProgrammingLanguage]string{ - common.JavascriptProgrammingLanguage: "nodejs-community", - common.PythonProgrammingLanguage: "python-community", - common.DotNetProgrammingLanguage: "dotnet-community", - common.JavaProgrammingLanguage: "java-community", - common.GoProgrammingLanguage: "golang-community", +type Defaulter interface { + GetDefaultDistroNames() map[common.ProgrammingLanguage]string +} + +type communityDefaulter struct{} + +var _ Defaulter = &communityDefaulter{} + +// TODO: remove/rename this once we have an enterprise instrumentor +func NewCommunityDefaulter() *communityDefaulter { + return &communityDefaulter{} +} + +// TODO: remove this once we have an enterprise instrumentor +func NewOnPremDefaulter() *onPremDefaulter { + return &onPremDefaulter{} +} + +// TODO: once we split the distros package this should be renamed +func NewGetter() (*Getter, error) { + g := Getter{} + + distrosByName, err := getDistrosMap(yamls.GetFS()) + if err != nil { + return nil, err + } + + g.distrosByName = distrosByName + + return &g, nil +} + +func (c *communityDefaulter) GetDefaultDistroNames() map[common.ProgrammingLanguage]string { + return map[common.ProgrammingLanguage]string{ + common.JavascriptProgrammingLanguage: "nodejs-community", + common.PythonProgrammingLanguage: "python-community", + common.DotNetProgrammingLanguage: "dotnet-community", + common.JavaProgrammingLanguage: "java-community", + common.GoProgrammingLanguage: "golang-community", + } +} + +// TODO: remove this once we have an enterprise instrumentor +type onPremDefaulter struct{} + +var _ Defaulter = &onPremDefaulter{} + +func (o *onPremDefaulter) GetDefaultDistroNames() map[common.ProgrammingLanguage]string { + return map[common.ProgrammingLanguage]string{ + common.JavascriptProgrammingLanguage: "nodejs-enterprise", + common.PythonProgrammingLanguage: "python-enterprise", + common.DotNetProgrammingLanguage: "dotnet-community", + common.JavaProgrammingLanguage: "java-enterprise", + common.GoProgrammingLanguage: "golang-enterprise", + common.MySQLProgrammingLanguage: "mysql-enterprise", + } +} + +type Getter struct { + distrosByName map[string]*distro.OtelDistro +} + +func (g *Getter) GetDistroByName(distroName string) *distro.OtelDistro { + return g.distrosByName[distroName] +} + +type Provider struct { + Defaulter + *Getter +} + +// NewProvider creates a new distributions provider. +// A provider is a combination of a defaulter and a getter. +// The defaulter is used to get the default distro names for each programming language. +// The getter is used to get the distro object itself from the available distros. +// +// A provider is constructed from a single defaulter and one or more getters. +// The getters are unioned together to create a single getter for the provider. +// +// Each default distribution must be provided by at least one of the getters. +func NewProvider(defaulter Defaulter, getters ...*Getter) (*Provider, error) { + if len(getters) == 0 { + return nil, errors.New("at least one getter must be provided") + } + + distros := make(map[string]*distro.OtelDistro) + for _, g := range getters { + for k, v := range g.distrosByName { + distros[k] = v } - case common.OnPremOdigosTier: - return map[common.ProgrammingLanguage]string{ - common.JavascriptProgrammingLanguage: "nodejs-enterprise", - common.PythonProgrammingLanguage: "python-enterprise", - common.DotNetProgrammingLanguage: "dotnet-community", - common.JavaProgrammingLanguage: "java-enterprise", - common.GoProgrammingLanguage: "golang-enterprise", - common.MySQLProgrammingLanguage: "mysql-enterprise", + } + + // make sure the default distributions are provided by at least one of the getters + defaultDistroNames := defaulter.GetDefaultDistroNames() + for _, distroName := range defaultDistroNames { + if _, ok := distros[distroName]; !ok { + return nil, fmt.Errorf("default distribution %s not found in any getter", distroName) } - default: - return nil } + + return &Provider{ + Defaulter: defaulter, + Getter: &Getter{ + distrosByName: distros, + }, + }, nil +} + +type distroResource struct { + ApiVersion string `json:"apiVersion"` + Spec distro.OtelDistro `json:"spec"` } -var allDistros = []distro.OtelDistro{} +func getDistrosMap(fs embed.FS) (map[string]*distro.OtelDistro, error) { + files, err := fs.ReadDir(".") + if err != nil { + return nil, err + } -func init() { - distroNames := yamls.GetAllDistroNames() - for _, distroName := range distroNames { - distro, err := yamls.ReadDistroFromYamlManifest(distroName) - if err != nil { + distrosByName := make(map[string]*distro.OtelDistro) + + for _, file := range files { + if file.IsDir() { continue } - allDistros = append(allDistros, *distro) - } -} -func GetDistroByName(distroName string) *distro.OtelDistro { - for i := range allDistros { - if allDistros[i].Name == distroName { - return &allDistros[i] + yamlBytes, err := fs.ReadFile(file.Name()) + if err != nil { + return nil, err + } + + otelDistro := distroResource{} + err = yaml.Unmarshal(yamlBytes, &otelDistro) + if err != nil { + return nil, err } + + distrosByName[otelDistro.Spec.Name] = &otelDistro.Spec } - return nil + + return distrosByName, nil } diff --git a/distros/yamls/dotnet-community.yaml b/distros/yamls/dotnet-community.yaml index 2042eb6e81..8f1814caa1 100644 --- a/distros/yamls/dotnet-community.yaml +++ b/distros/yamls/dotnet-community.yaml @@ -16,9 +16,6 @@ spec: displayName: 'Dotnet Community Native Instrumentation' description: | This distribution is for Dotnet applications using OpenTelemetry Native SDK and instrumentation libraries from the OpenTelemetry community. - tiers: - - community - - onprem runtimeAgent: directoryNames: - '{{ODIGOS_AGENTS_DIR}}/dotnet' diff --git a/distros/yamls/dotnet-legacy.yaml b/distros/yamls/dotnet-legacy.yaml index 56740df2fd..d72aec7032 100644 --- a/distros/yamls/dotnet-legacy.yaml +++ b/distros/yamls/dotnet-legacy.yaml @@ -13,8 +13,6 @@ spec: displayName: 'Dotnet Community Native Instrumentation for Legacy Versions' description: | This distribution is for Dotnet applications running on old runtimes, using OpenTelemetry Native SDK and instrumentation libraries from the OpenTelemetry community. - tiers: - - onprem runtimeAgent: directoryNames: - "{{ODIGOS_AGENTS_DIR}}/legacy-dotnet" diff --git a/distros/yamls/golang-community.yaml b/distros/yamls/golang-community.yaml index e4ead4b70f..619042b1b6 100644 --- a/distros/yamls/golang-community.yaml +++ b/distros/yamls/golang-community.yaml @@ -11,5 +11,3 @@ spec: displayName: Golang Community eBPF Instrumentation description: | This distribution is for Golang applications using OpenTelemetry eBPF-based SDK and eBPF-based instrumentation libraries from the OpenTelemetry community. - tiers: - - community diff --git a/distros/yamls/golang-enterprise.yaml b/distros/yamls/golang-enterprise.yaml index b5e65a6503..af7d270333 100644 --- a/distros/yamls/golang-enterprise.yaml +++ b/distros/yamls/golang-enterprise.yaml @@ -11,7 +11,5 @@ spec: displayName: Golang Enterprise eBPF Instrumentation description: | This distribution is for Golang applications using Odigos enterprise version, with ebpf-based SDK and instrumentation libraries, additional features and libraries coverage. - tiers: - - onprem runtimeAgent: device: 'instrumentation.odigos.io/go-ebpf-enterprise' diff --git a/distros/yamls/java-community.yaml b/distros/yamls/java-community.yaml index 8335cd4131..574a929094 100644 --- a/distros/yamls/java-community.yaml +++ b/distros/yamls/java-community.yaml @@ -11,8 +11,6 @@ spec: displayName: Java Community Native Instrumentation description: | This distribution is for JVM-based applications (Java, Scala, Kotlin, etc.) using OpenTelemetry Native SDK and instrumentation libraries from the OpenTelemetry community. - tiers: - - community environmentVariables: - envName: JAVA_OPTS envValue: '-javaagent:{{ODIGOS_AGENTS_DIR}}/java/javaagent.jar' diff --git a/distros/yamls/java-ebpf-instrumentations.yaml b/distros/yamls/java-ebpf-instrumentations.yaml index 1a46648564..b5863d5594 100644 --- a/distros/yamls/java-ebpf-instrumentations.yaml +++ b/distros/yamls/java-ebpf-instrumentations.yaml @@ -11,8 +11,6 @@ spec: displayName: Java Enterprise eBPF Instrumentation description: | This distribution is for JVM-based applications (Java, Scala, Kotlin, etc.) using eBPF based SDK and eBPF enterprise instrumentation libraries. - tiers: - - onprem environmentVariables: - envName: JAVA_OPTS envValue: '-javaagent:{{ODIGOS_AGENTS_DIR}}/java-ebpf/dtrace-injector.jar' diff --git a/distros/yamls/java-enterprise.yaml b/distros/yamls/java-enterprise.yaml index f5ba148c8d..37867a6a3a 100644 --- a/distros/yamls/java-enterprise.yaml +++ b/distros/yamls/java-enterprise.yaml @@ -11,8 +11,6 @@ spec: displayName: Java Enterprise eBPF Processing description: | This distribution is for JVM-based applications (Java, Scala, Kotlin, etc.) using eBPF based SDK and native instrumentation libraries from the OpenTelemetry community. - tiers: - - onprem environmentVariables: - envName: JAVA_OPTS envValue: "-javaagent:{{ODIGOS_AGENTS_DIR}}/java-ext-ebpf/javaagent.jar -Dotel.javaagent.extensions={{ODIGOS_AGENTS_DIR}}/java-ext-ebpf/otel_agent_extension.jar" diff --git a/distros/yamls/mysql-enterprise.yaml b/distros/yamls/mysql-enterprise.yaml index 7d87b1c0be..4570cc3c54 100644 --- a/distros/yamls/mysql-enterprise.yaml +++ b/distros/yamls/mysql-enterprise.yaml @@ -10,5 +10,4 @@ spec: displayName: 'Mysql Server Internals Enterprise Instrumentation' description: | Instrumentation for the internals of MySQL server using eBPF - tiers: - - onprem + diff --git a/distros/yamls/nodejs-community.yaml b/distros/yamls/nodejs-community.yaml index 29f0da6bb0..7ad97b5b82 100644 --- a/distros/yamls/nodejs-community.yaml +++ b/distros/yamls/nodejs-community.yaml @@ -11,8 +11,6 @@ spec: displayName: 'Node.js Community Native Instrumentation' description: | This distribution is for Node.js applications using OpenTelemetry Native SDK and instrumentation libraries from the OpenTelemetry community. - tiers: - - community environmentVariables: - envName: NODE_OPTIONS envValue: '--require {{ODIGOS_AGENTS_DIR}}/nodejs/autoinstrumentation.js' diff --git a/distros/yamls/nodejs-enterprise.yaml b/distros/yamls/nodejs-enterprise.yaml index ad42200860..f77596a42b 100644 --- a/distros/yamls/nodejs-enterprise.yaml +++ b/distros/yamls/nodejs-enterprise.yaml @@ -11,8 +11,6 @@ spec: displayName: Node.js Enterprise eBPF Processing description: | This distribution is for Node.js applications using an efficient eBPF-based SDK, and native instrumentation libraries from the OpenTelemetry community. - tiers: - - onprem environmentVariables: - envName: NODE_OPTIONS envValue: '--require {{ODIGOS_AGENTS_DIR}}/nodejs-ebpf/autoinstrumentation.js' diff --git a/distros/yamls/python-community.yaml b/distros/yamls/python-community.yaml index 46f6c74870..08a6fa0395 100644 --- a/distros/yamls/python-community.yaml +++ b/distros/yamls/python-community.yaml @@ -11,8 +11,6 @@ spec: displayName: Python Community Native Instrumentation description: | This distribution is for Python applications using OpenTelemetry Native SDK and instrumentation libraries from the OpenTelemetry community. - tiers: - - community environmentVariables: - envName: PYTHONPATH envValue: '{{ODIGOS_AGENTS_DIR}}/python:{{ODIGOS_AGENTS_DIR}}/python/opentelemetry/instrumentation/auto_instrumentation' diff --git a/distros/yamls/python-enterprise.yaml b/distros/yamls/python-enterprise.yaml index 7e9a781856..fc8b929752 100644 --- a/distros/yamls/python-enterprise.yaml +++ b/distros/yamls/python-enterprise.yaml @@ -11,8 +11,6 @@ spec: displayName: Python Enterprise eBPF Processing description: | This distribution is for Python applications using OpenTelemetry native instrumentation libraries and eBPF SDK with enterprise features and capabilities. - tiers: - - onprem environmentVariables: - envName: PYTHONPATH envValue: '{{ODIGOS_AGENTS_DIR}}/python-ebpf:{{ODIGOS_AGENTS_DIR}}/python/opentelemetry/instrumentation/auto_instrumentation:{{ODIGOS_AGENTS_DIR}}/python' diff --git a/distros/yamls/render.go b/distros/yamls/render.go index be7bb50136..1dc63d76e5 100644 --- a/distros/yamls/render.go +++ b/distros/yamls/render.go @@ -2,55 +2,11 @@ package yamls import ( "embed" - "fmt" - "strings" - - "github.com/odigos-io/odigos/distros/distro" - "gopkg.in/yaml.v3" ) //go:embed *.yaml var embeddedFiles embed.FS -func GetAllDistroNames() []string { - files, err := embeddedFiles.ReadDir(".") - if err != nil { - return nil - } - - distroNames := make([]string, 0, len(files)) - for _, file := range files { - if file.IsDir() { - continue - } - fileName := file.Name() - fileParts := strings.Split(fileName, ".") - if len(fileParts) != 2 || fileParts[1] != "yaml" { - continue - } - distroNames = append(distroNames, fileParts[0]) - } - - return distroNames -} - -type distroResource struct { - ApiVersion string `json:"apiVersion"` - Spec distro.OtelDistro `json:"spec"` -} - -func ReadDistroFromYamlManifest(distroName string) (*distro.OtelDistro, error) { - filename := fmt.Sprintf("%s.yaml", distroName) - yamlBytes, err := embeddedFiles.ReadFile(filename) - if err != nil { - return nil, err - } - - otelDistro := distroResource{} - err = yaml.Unmarshal(yamlBytes, &otelDistro) - if err != nil { - return nil, err - } - - return &otelDistro.Spec, nil +func GetFS() embed.FS { + return embeddedFiles } diff --git a/instrumentor/cmd/main.go b/instrumentor/cmd/main.go index f0afd9f63a..6ff7c58486 100644 --- a/instrumentor/cmd/main.go +++ b/instrumentor/cmd/main.go @@ -20,8 +20,12 @@ import ( "flag" "os" + "github.com/odigos-io/odigos/common" + "github.com/odigos-io/odigos/distros" + "github.com/odigos-io/odigos/instrumentor/controllers" "github.com/odigos-io/odigos/instrumentor/sdks" + "github.com/odigos-io/odigos/k8sutils/pkg/env" "sigs.k8s.io/controller-runtime/pkg/manager/signals" @@ -63,9 +67,34 @@ func main() { logger := zapr.NewLogger(zapLogger) managerOptions.Logger = logger + // TODO: remove once the webhook stops using the default SDKs from the sdks package sdks.SetDefaultSDKs() - i, err := instrumentor.New(managerOptions) + // TODO: remove once we create an enterprise instrumentor + tier := env.GetOdigosTierFromEnv() + var defaulter distros.Defaulter + switch tier { + case common.CommunityOdigosTier: + defaulter = distros.NewCommunityDefaulter() + case common.OnPremOdigosTier: + defaulter = distros.NewOnPremDefaulter() + default: + setupLog.Error(nil, "Invalid tier", "tier", tier) + os.Exit(1) + } + + distrosGetter, err := distros.NewGetter() + if err != nil { + setupLog.Error(err, "Failed to initialize distro getter") + os.Exit(1) + } + dp, err := distros.NewProvider(defaulter, distrosGetter) + if err != nil { + setupLog.Error(err, "Failed to initialize distro provider") + os.Exit(1) + } + + i, err := instrumentor.New(managerOptions, dp) if err != nil { setupLog.Error(err, "Failed to initialize instrumentor") os.Exit(1) diff --git a/instrumentor/controllers/agentenabled/collectorsgroup_controller.go b/instrumentor/controllers/agentenabled/collectorsgroup_controller.go index 16b65ef5c3..96b85f2886 100644 --- a/instrumentor/controllers/agentenabled/collectorsgroup_controller.go +++ b/instrumentor/controllers/agentenabled/collectorsgroup_controller.go @@ -3,14 +3,16 @@ package agentenabled import ( "context" + "github.com/odigos-io/odigos/distros" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) type CollectorsGroupReconciler struct { client.Client + DistrosProvider *distros.Provider } func (r *CollectorsGroupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - return reconcileAll(ctx, r.Client) + return reconcileAll(ctx, r.Client, r.DistrosProvider) } diff --git a/instrumentor/controllers/agentenabled/effectiveconfig_controller.go b/instrumentor/controllers/agentenabled/effectiveconfig_controller.go index d39656e0f2..81e5ff9819 100644 --- a/instrumentor/controllers/agentenabled/effectiveconfig_controller.go +++ b/instrumentor/controllers/agentenabled/effectiveconfig_controller.go @@ -3,14 +3,16 @@ package agentenabled import ( "context" + "github.com/odigos-io/odigos/distros" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) type EffectiveConfigReconciler struct { client.Client + DistrosProvider *distros.Provider } func (r *EffectiveConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - return reconcileAll(ctx, r.Client) + return reconcileAll(ctx, r.Client, r.DistrosProvider) } diff --git a/instrumentor/controllers/agentenabled/instrumentationconfig_controller.go b/instrumentor/controllers/agentenabled/instrumentationconfig_controller.go index b7fbbdb183..7d5a97cb7f 100644 --- a/instrumentor/controllers/agentenabled/instrumentationconfig_controller.go +++ b/instrumentor/controllers/agentenabled/instrumentationconfig_controller.go @@ -3,14 +3,16 @@ package agentenabled import ( "context" + "github.com/odigos-io/odigos/distros" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) type InstrumentationConfigReconciler struct { client.Client + DistrosProvider *distros.Provider } func (r *InstrumentationConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - return reconcileWorkload(ctx, r.Client, req.Name, req.Namespace) + return reconcileWorkload(ctx, r.Client, req.Name, req.Namespace, r.DistrosProvider) } diff --git a/instrumentor/controllers/agentenabled/instrumentationrule_controller.go b/instrumentor/controllers/agentenabled/instrumentationrule_controller.go index 4be262bcbe..081ac98b91 100644 --- a/instrumentor/controllers/agentenabled/instrumentationrule_controller.go +++ b/instrumentor/controllers/agentenabled/instrumentationrule_controller.go @@ -4,12 +4,14 @@ import ( "context" odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" + "github.com/odigos-io/odigos/distros" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) type InstrumentationRuleReconciler struct { client.Client + DistrosProvider *distros.Provider } func (r *InstrumentationRuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { @@ -26,5 +28,5 @@ func (r *InstrumentationRuleReconciler) Reconcile(ctx context.Context, req ctrl. return ctrl.Result{}, nil } - return reconcileAll(ctx, r.Client) + return reconcileAll(ctx, r.Client, r.DistrosProvider) } diff --git a/instrumentor/controllers/agentenabled/manager.go b/instrumentor/controllers/agentenabled/manager.go index 5333955d69..d0376162e4 100644 --- a/instrumentor/controllers/agentenabled/manager.go +++ b/instrumentor/controllers/agentenabled/manager.go @@ -2,6 +2,7 @@ package agentenabled import ( odigosv1 "github.com/odigos-io/odigos/api/odigos/v1alpha1" + "github.com/odigos-io/odigos/distros" instrumentorpredicate "github.com/odigos-io/odigos/instrumentor/controllers/utils/predicates" odigospredicate "github.com/odigos-io/odigos/k8sutils/pkg/predicate" corev1 "k8s.io/api/core/v1" @@ -10,7 +11,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/predicate" ) -func SetupWithManager(mgr ctrl.Manager) error { +func SetupWithManager(mgr ctrl.Manager, dp *distros.Provider) error { err := builder. ControllerManagedBy(mgr). Named("agentenabled-collectorsgroup"). @@ -18,6 +19,7 @@ func SetupWithManager(mgr ctrl.Manager) error { WithEventFilter(predicate.And(&odigospredicate.OdigosCollectorsGroupNodePredicate, &odigospredicate.CgBecomesReadyPredicate{})). Complete(&CollectorsGroupReconciler{ Client: mgr.GetClient(), + DistrosProvider: dp, }) if err != nil { return err @@ -32,6 +34,7 @@ func SetupWithManager(mgr ctrl.Manager) error { WithEventFilter(predicate.Or(&instrumentorpredicate.RuntimeDetailsChangedPredicate{}, odigospredicate.DeletionPredicate{})). Complete(&InstrumentationConfigReconciler{ Client: mgr.GetClient(), + DistrosProvider: dp, }) if err != nil { return err @@ -44,6 +47,7 @@ func SetupWithManager(mgr ctrl.Manager) error { WithEventFilter(&instrumentorpredicate.OtelSdkInstrumentationRulePredicate{}). Complete(&InstrumentationRuleReconciler{ Client: mgr.GetClient(), + DistrosProvider: dp, }) if err != nil { return err @@ -56,6 +60,7 @@ func SetupWithManager(mgr ctrl.Manager) error { WithEventFilter(odigospredicate.OdigosEffectiveConfigMapPredicate). Complete(&EffectiveConfigReconciler{ Client: mgr.GetClient(), + DistrosProvider: dp, }) if err != nil { return err @@ -66,6 +71,7 @@ func SetupWithManager(mgr ctrl.Manager) error { For(&corev1.Pod{}). WithDefaulter(&PodsWebhook{ Client: mgr.GetClient(), + DistrosGetter: dp.Getter, }). Complete() if err != nil { diff --git a/instrumentor/controllers/agentenabled/pods_webhook.go b/instrumentor/controllers/agentenabled/pods_webhook.go index 6a8626a18e..3319aa8119 100644 --- a/instrumentor/controllers/agentenabled/pods_webhook.go +++ b/instrumentor/controllers/agentenabled/pods_webhook.go @@ -29,6 +29,7 @@ import ( type PodsWebhook struct { client.Client + DistrosGetter *distros.Getter } var _ webhook.CustomDefaulter = &PodsWebhook{} @@ -93,7 +94,7 @@ func (p *PodsWebhook) Default(ctx context.Context, obj runtime.Object) error { continue } - containerVolumeMounted, err := injectOdigosToContainer(containerConfig, podContainerSpec, *pw, *serviceName) + containerVolumeMounted, err := p.injectOdigosToContainer(containerConfig, podContainerSpec, *pw, *serviceName) if err != nil { logger.Error(err, "failed to inject ODIGOS agent to container") continue @@ -179,11 +180,11 @@ func (p *PodsWebhook) injectOdigosInstrumentation(ctx context.Context, pod *core return nil } -func injectOdigosToContainer(containerConfig *odigosv1.ContainerAgentConfig, podContainerSpec *corev1.Container, pw k8sconsts.PodWorkload, serviceName string) (bool, error) { +func (p *PodsWebhook) injectOdigosToContainer(containerConfig *odigosv1.ContainerAgentConfig, podContainerSpec *corev1.Container, pw k8sconsts.PodWorkload, serviceName string) (bool, error) { distroName := containerConfig.OtelDistroName - distroMetadata := distros.GetDistroByName(distroName) + distroMetadata := p.DistrosGetter.GetDistroByName(distroName) if distroMetadata == nil { return false, fmt.Errorf("distribution %s not found", distroName) } diff --git a/instrumentor/controllers/agentenabled/sync.go b/instrumentor/controllers/agentenabled/sync.go index 7b5ab1090b..5e04eda67e 100644 --- a/instrumentor/controllers/agentenabled/sync.go +++ b/instrumentor/controllers/agentenabled/sync.go @@ -11,7 +11,6 @@ import ( "github.com/odigos-io/odigos/common" "github.com/odigos-io/odigos/distros" "github.com/odigos-io/odigos/instrumentor/controllers/agentenabled/rollout" - "github.com/odigos-io/odigos/k8sutils/pkg/env" "github.com/odigos-io/odigos/k8sutils/pkg/utils" "github.com/odigos-io/odigos/k8sutils/pkg/workload" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -39,7 +38,7 @@ type agentInjectedStatusCondition struct { Message string } -func reconcileAll(ctx context.Context, c client.Client) (ctrl.Result, error) { +func reconcileAll(ctx context.Context, c client.Client, dp *distros.Provider) (ctrl.Result, error) { allInstrumentationConfigs := odigosv1.InstrumentationConfigList{} listErr := c.List(ctx, &allInstrumentationConfigs) if listErr != nil { @@ -47,7 +46,7 @@ func reconcileAll(ctx context.Context, c client.Client) (ctrl.Result, error) { } for _, ic := range allInstrumentationConfigs.Items { - res, err := reconcileWorkload(ctx, c, ic.Name, ic.Namespace) + res, err := reconcileWorkload(ctx, c, ic.Name, ic.Namespace, dp) if err != nil || !res.IsZero() { return res, err } @@ -56,7 +55,7 @@ func reconcileAll(ctx context.Context, c client.Client) (ctrl.Result, error) { return ctrl.Result{}, nil } -func reconcileWorkload(ctx context.Context, c client.Client, icName string, namespace string) (ctrl.Result, error) { +func reconcileWorkload(ctx context.Context, c client.Client, icName string, namespace string, distroProvider *distros.Provider) (ctrl.Result, error) { logger := log.FromContext(ctx) workloadName, workloadKind, err := workload.ExtractWorkloadInfoFromRuntimeObjectName(icName) @@ -84,7 +83,7 @@ func reconcileWorkload(ctx context.Context, c client.Client, icName string, name logger.Info("Reconciling workload for InstrumentationConfig object agent enabling", "name", ic.Name, "namespace", ic.Namespace, "instrumentationConfigName", ic.Name) - condition, err := updateInstrumentationConfigSpec(ctx, c, pw, &ic) + condition, err := updateInstrumentationConfigSpec(ctx, c, pw, &ic, distroProvider) if err != nil { return ctrl.Result{}, err } @@ -118,7 +117,7 @@ func reconcileWorkload(ctx context.Context, c client.Client, icName string, name // if the function returns without an error, it also returns an agentInjectedStatusCondition object // which records what should be written to the status.conditions field of the instrumentation config // and later be used for viability and monitoring purposes. -func updateInstrumentationConfigSpec(ctx context.Context, c client.Client, pw k8sconsts.PodWorkload, ic *odigosv1.InstrumentationConfig) (*agentInjectedStatusCondition, error) { +func updateInstrumentationConfigSpec(ctx context.Context, c client.Client, pw k8sconsts.PodWorkload, ic *odigosv1.InstrumentationConfig, distroProvider *distros.Provider) (*agentInjectedStatusCondition, error) { cg, irls, effectiveConfig, err := getRelevantResources(ctx, c, pw) if err != nil { @@ -139,13 +138,12 @@ func updateInstrumentationConfigSpec(ctx context.Context, c client.Client, pw k8 }, nil } - tier := env.GetOdigosTierFromEnv() - defaultDistrosPerLanguage := distros.GetDefaultDistroNames(tier) - distroPerLanguage := applyRulesForDistros(defaultDistrosPerLanguage, irls) + defaultDistrosPerLanguage := distroProvider.GetDefaultDistroNames() + distroPerLanguage := applyRulesForDistros(defaultDistrosPerLanguage, irls, distroProvider.Getter) containersConfig := make([]odigosv1.ContainerAgentConfig, 0, len(ic.Spec.Containers)) for _, containerRuntimeDetails := range ic.Status.RuntimeDetailsByContainer { - currentContainerConfig := containerInstrumentationConfig(containerRuntimeDetails.ContainerName, effectiveConfig, containerRuntimeDetails, distroPerLanguage) + currentContainerConfig := containerInstrumentationConfig(containerRuntimeDetails.ContainerName, effectiveConfig, containerRuntimeDetails, distroPerLanguage, distroProvider.Getter) containersConfig = append(containersConfig, currentContainerConfig) } ic.Spec.Containers = containersConfig @@ -210,7 +208,8 @@ func containerConfigToStatusCondition(containerConfig odigosv1.ContainerAgentCon func containerInstrumentationConfig(containerName string, effectiveConfig *common.OdigosConfiguration, runtimeDetails odigosv1.RuntimeDetailsByContainer, - distroPerLanguage map[common.ProgrammingLanguage]string) odigosv1.ContainerAgentConfig { + distroPerLanguage map[common.ProgrammingLanguage]string, + distroGetter *distros.Getter) odigosv1.ContainerAgentConfig { // check unknown language first. if language is not supported, we can skip the rest of the checks. if runtimeDetails.Language == common.UnknownProgrammingLanguage { @@ -252,7 +251,7 @@ func containerInstrumentationConfig(containerName string, } } - distro := distros.GetDistroByName(distroName) + distro := distroGetter.GetDistroByName(distroName) if distro == nil { return odigosv1.ContainerAgentConfig{ ContainerName: containerName, @@ -347,7 +346,7 @@ func containerInstrumentationConfig(containerName string, } func applyRulesForDistros(defaultDistros map[common.ProgrammingLanguage]string, - instrumentationRules *[]odigosv1.InstrumentationRule) map[common.ProgrammingLanguage]string { + instrumentationRules *[]odigosv1.InstrumentationRule, dg *distros.Getter) map[common.ProgrammingLanguage]string { distrosPerLanguage := make(map[common.ProgrammingLanguage]string, len(defaultDistros)) for lang, distroName := range defaultDistros { @@ -359,7 +358,7 @@ func applyRulesForDistros(defaultDistros map[common.ProgrammingLanguage]string, continue } for _, distroName := range rule.Spec.OtelDistros.OtelDistroNames { - distro := distros.GetDistroByName(distroName) + distro := dg.GetDistroByName(distroName) if distro == nil { continue } diff --git a/instrumentor/controllers/manager.go b/instrumentor/controllers/manager.go index e7f446d32f..8bfbc83177 100644 --- a/instrumentor/controllers/manager.go +++ b/instrumentor/controllers/manager.go @@ -7,6 +7,7 @@ import ( "github.com/go-logr/logr" + "github.com/odigos-io/odigos/distros" "github.com/odigos-io/odigos/instrumentor/controllers/agentenabled" "github.com/odigos-io/odigos/instrumentor/controllers/deleteinstrumentationconfig" "github.com/odigos-io/odigos/instrumentor/controllers/instrumentationconfig" @@ -158,8 +159,8 @@ func durationPointer(d time.Duration) *time.Duration { return &d } -func SetupWithManager(mgr manager.Manager) error { - err := agentenabled.SetupWithManager(mgr) +func SetupWithManager(mgr manager.Manager, dp *distros.Provider) error { + err := agentenabled.SetupWithManager(mgr, dp) if err != nil { return fmt.Errorf("failed to create controller for agent enabled: %w", err) } diff --git a/instrumentor/instrumentor.go b/instrumentor/instrumentor.go index bce482fd02..9c3e97af39 100644 --- a/instrumentor/instrumentor.go +++ b/instrumentor/instrumentor.go @@ -7,6 +7,7 @@ import ( "github.com/go-logr/logr" "github.com/odigos-io/odigos/common" + "github.com/odigos-io/odigos/distros" "github.com/odigos-io/odigos/instrumentor/controllers" "github.com/odigos-io/odigos/instrumentor/report" "github.com/odigos-io/odigos/instrumentor/runtimemigration" @@ -20,7 +21,7 @@ type Instrumentor struct { logger logr.Logger } -func New(opts controllers.KubeManagerOptions) (*Instrumentor, error) { +func New(opts controllers.KubeManagerOptions, dp *distros.Provider) (*Instrumentor, error) { mgr, err := controllers.CreateManager(opts) if err != nil { return nil, err @@ -31,7 +32,7 @@ func New(opts controllers.KubeManagerOptions) (*Instrumentor, error) { mgr.Add(&runtimemigration.MigrationRunnable{KubeClient: mgr.GetClient(), Logger: opts.Logger}) // wire up the controllers and webhooks - err = controllers.SetupWithManager(mgr) + err = controllers.SetupWithManager(mgr, dp) if err != nil { return nil, err } From d2339d8280e4ed7a42062230c79c42b72d3e16fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:01:16 +0000 Subject: [PATCH 14/15] chore(deps): bump the k8s-dependencies group in /cli with 4 updates (#2451) Bumps the k8s-dependencies group in /cli with 4 updates: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver), [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) and [k8s.io/client-go](https://github.com/kubernetes/client-go). Updates `k8s.io/api` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/apiextensions-apiserver` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/apimachinery` from 0.32.1 to 0.32.2
Commits

Updates `k8s.io/client-go` from 0.32.1 to 0.32.2
Commits

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ben Elferink --- cli/go.mod | 8 ++++---- cli/go.sum | 16 ++++++++-------- scripts/cli-docgen/go.mod | 8 ++++---- scripts/cli-docgen/go.sum | 16 ++++++++-------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/cli/go.mod b/cli/go.mod index 9b7b045313..e35f1ff61a 100644 --- a/cli/go.mod +++ b/cli/go.mod @@ -12,10 +12,10 @@ require ( github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.6 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.32.1 - k8s.io/apiextensions-apiserver v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 + k8s.io/api v0.32.2 + k8s.io/apiextensions-apiserver v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 sigs.k8s.io/yaml v1.4.0 ) diff --git a/cli/go.sum b/cli/go.sum index cd42f410d9..e850357d32 100644 --- a/cli/go.sum +++ b/cli/go.sum @@ -178,14 +178,14 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= -k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= +k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= diff --git a/scripts/cli-docgen/go.mod b/scripts/cli-docgen/go.mod index 774d7a6f56..c759ce3177 100644 --- a/scripts/cli-docgen/go.mod +++ b/scripts/cli-docgen/go.mod @@ -61,10 +61,10 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.32.1 // indirect - k8s.io/apiextensions-apiserver v0.32.1 // indirect - k8s.io/apimachinery v0.32.1 // indirect - k8s.io/client-go v0.32.1 // indirect + k8s.io/api v0.32.2 // indirect + k8s.io/apiextensions-apiserver v0.32.2 // indirect + k8s.io/apimachinery v0.32.2 // indirect + k8s.io/client-go v0.32.2 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect diff --git a/scripts/cli-docgen/go.sum b/scripts/cli-docgen/go.sum index 1c7726fb2a..28377a5dcb 100644 --- a/scripts/cli-docgen/go.sum +++ b/scripts/cli-docgen/go.sum @@ -180,14 +180,14 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= -k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= +k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= From 90bf334cc4e38bc67120dd42eca322160a558571 Mon Sep 17 00:00:00 2001 From: Ron Federman <73110295+RonFed@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:13:27 +0200 Subject: [PATCH 15/15] tag instrumentor module on release (#2462) --- .github/workflows/publish-modules.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish-modules.yml b/.github/workflows/publish-modules.yml index 70d44c542f..b6c0edf814 100644 --- a/.github/workflows/publish-modules.yml +++ b/.github/workflows/publish-modules.yml @@ -49,6 +49,7 @@ jobs: git tag procdiscovery/${{ steps.extract_tag.outputs.tag }} git tag profiles/${{ steps.extract_tag.outputs.tag }} git tag distros/${{ steps.extract_tag.outputs.tag }} + git tag instrumentor/${{ steps.extract_tag.outputs.tag }} git push origin --tags - name: Trigger Release PR in Odigos Enterprise