diff --git a/core/alert/service.go b/core/alert/service.go index 7aef1b43..3e8e1c20 100644 --- a/core/alert/service.go +++ b/core/alert/service.go @@ -10,6 +10,9 @@ import ( "github.com/goto/siren/core/template" "github.com/goto/siren/pkg/errors" "github.com/goto/siren/pkg/structure" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" ) type LogService interface { @@ -22,20 +25,27 @@ type NotificationService interface { // Service handles business logic type Service struct { - cfg Config - logger saltlog.Logger - repository Repository - logService LogService - notificationService NotificationService - registry map[string]AlertTransformer + cfg Config + logger saltlog.Logger + repository Repository + logService LogService + notificationService NotificationService + registry map[string]AlertTransformer + metricGaugeNumAlerts metric.Int64Gauge } // NewService returns repository struct func NewService(cfg Config, logger saltlog.Logger, repository Repository, logService LogService, notificationService NotificationService, registry map[string]AlertTransformer) *Service { - return &Service{cfg, logger, repository, logService, notificationService, registry} + metricGaugeNumAlerts, err := otel.Meter("github.com/goto/siren/core/alert"). + Int64Gauge("siren.alert.number") + if err != nil { + otel.Handle(err) + } + + return &Service{cfg, logger, repository, logService, notificationService, registry, metricGaugeNumAlerts} } -func (s *Service) CreateAlerts(ctx context.Context, providerType string, providerID uint64, namespaceID uint64, body map[string]any) ([]Alert, error) { +func (s *Service) CreateAlerts(ctx context.Context, providerType string, providerID uint64, namespaceID uint64, body map[string]any) (alerts []Alert, err error) { pluginService, err := s.getProviderPluginService(providerType) if err != nil { return nil, err @@ -45,6 +55,10 @@ func (s *Service) CreateAlerts(ctx context.Context, providerType string, provide return nil, err } + defer func() { + s.instrumentNumberAlerts(ctx, len(alerts), err) + }() + for i := 0; i < len(alerts); i++ { createdAlert, err := s.repository.Create(ctx, alerts[i]) if err != nil { @@ -189,3 +203,9 @@ func BuildNotifications( return notifications, nil } + +func (s *Service) instrumentNumberAlerts(ctx context.Context, num int, err error) { + s.metricGaugeNumAlerts.Record(ctx, int64(num), metric.WithAttributes( + attribute.Bool("success", err == nil), + )) +} diff --git a/core/notification/dispatch_bulk_notification_service.go b/core/notification/dispatch_bulk_notification_service.go index 1a051689..cf144813 100644 --- a/core/notification/dispatch_bulk_notification_service.go +++ b/core/notification/dispatch_bulk_notification_service.go @@ -8,14 +8,18 @@ import ( "github.com/goto/siren/pkg/errors" "github.com/goto/siren/pkg/structure" "github.com/mitchellh/hashstructure/v2" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" "golang.org/x/exp/maps" ) // DispatchBulkNotificationService only supports subscriber routing and not supporting direct receiver routing type DispatchBulkNotificationService struct { - deps Deps - notifierPlugins map[string]Notifier - routerMap map[string]Router + deps Deps + notifierPlugins map[string]Notifier + routerMap map[string]Router + metricGaugeNumBulkNotification metric.Int64Gauge } func NewDispatchBulkNotificationService( @@ -23,10 +27,17 @@ func NewDispatchBulkNotificationService( notifierPlugins map[string]Notifier, routerMap map[string]Router, ) *DispatchBulkNotificationService { + metricGaugeNumBulkNotification, err := otel.Meter("github.com/goto/siren/core/notification"). + Int64Gauge("siren.notification.bulk.notification_number") + if err != nil { + otel.Handle(err) + } + return &DispatchBulkNotificationService{ - deps: deps, - notifierPlugins: notifierPlugins, - routerMap: routerMap, + deps: deps, + notifierPlugins: notifierPlugins, + routerMap: routerMap, + metricGaugeNumBulkNotification: metricGaugeNumBulkNotification, } } @@ -38,11 +49,7 @@ func (s *DispatchBulkNotificationService) getRouter(notificationRouterKind strin return selectedRouter, nil } -func (s *DispatchBulkNotificationService) prepareMetaMessages(ctx context.Context, ns []Notification) ([]MetaMessage, []log.Notification, error) { - var ( - metaMessages []MetaMessage - notificationLogs []log.Notification - ) +func (s *DispatchBulkNotificationService) prepareMetaMessages(ctx context.Context, ns []Notification) (metaMessages []MetaMessage, notificationLogs []log.Notification, err error) { for _, n := range ns { if err := n.Validate(RouterSubscriber); err != nil { return nil, nil, err @@ -65,9 +72,12 @@ func (s *DispatchBulkNotificationService) prepareMetaMessages(ctx context.Contex return metaMessages, notificationLogs, nil } -func (s *DispatchBulkNotificationService) Dispatch(ctx context.Context, ns []Notification) ([]string, error) { +func (s *DispatchBulkNotificationService) Dispatch(ctx context.Context, ns []Notification) (notificationIDs []string, err error) { + defer func() { + s.instrumentNumberBulkNotification(ctx, len(ns), err) + }() + var ( - notificationIDs []string metaMessages []MetaMessage notificationLogs []log.Notification ) @@ -184,3 +194,9 @@ func MergeMetaMessage(from MetaMessage, to MetaMessage) MetaMessage { output.SubscriptionIDs = append(output.SubscriptionIDs, from.SubscriptionIDs...) return output } + +func (s *DispatchBulkNotificationService) instrumentNumberBulkNotification(ctx context.Context, num int, err error) { + s.metricGaugeNumBulkNotification.Record(ctx, int64(num), metric.WithAttributes( + attribute.Bool("success", err == nil), + )) +} diff --git a/core/notification/dispatch_bulk_notification_service_test.go b/core/notification/dispatch_bulk_notification_service_test.go index 41506a1d..b2c9cd26 100644 --- a/core/notification/dispatch_bulk_notification_service_test.go +++ b/core/notification/dispatch_bulk_notification_service_test.go @@ -447,9 +447,15 @@ func TestReduceMetaMessages(t *testing.T) { sort.Slice(got, func(i, j int) bool { return got[i].ReceiverID < got[j].ReceiverID }) + sort.Slice(got, func(i, j int) bool { + return len(got[i].SubscriptionIDs) < len(got[j].SubscriptionIDs) + }) sort.Slice(tt.want, func(i, j int) bool { return tt.want[i].ReceiverID < tt.want[j].ReceiverID }) + sort.Slice(tt.want, func(i, j int) bool { + return len(tt.want[i].SubscriptionIDs) < len(tt.want[j].SubscriptionIDs) + }) if diff := cmp.Diff(got, tt.want); diff != "" { t.Errorf("ReduceMetaMessages() diff = %v", diff) } diff --git a/core/notification/handler.go b/core/notification/handler.go index 59f50a27..1422822d 100644 --- a/core/notification/handler.go +++ b/core/notification/handler.go @@ -6,6 +6,9 @@ import ( "time" "github.com/goto/salt/log" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" "github.com/goto/siren/pkg/errors" ) @@ -22,16 +25,23 @@ type Handler struct { notifierRegistry map[string]Notifier supportedReceiverTypes []string batchSize int + metricHistMQDuration metric.Int64Histogram } // NewHandler creates a new handler with some supported type of Notifiers func NewHandler(cfg HandlerConfig, logger log.Logger, q Queuer, registry map[string]Notifier, opts ...HandlerOption) *Handler { + metricHistMQDuration, err := otel.Meter("github.com/goto/siren/core/notification"). + Int64Histogram("siren.notification.queue.duration") + if err != nil { + otel.Handle(err) + } h := &Handler{ batchSize: defaultBatchSize, - logger: logger, - notifierRegistry: registry, - q: q, + logger: logger, + notifierRegistry: registry, + q: q, + metricHistMQDuration: metricHistMQDuration, } if cfg.BatchSize != 0 { @@ -89,42 +99,64 @@ func (h *Handler) Process(ctx context.Context, runAt time.Time) error { return nil } +func (h *Handler) errorMessageHandler(ctx context.Context, retryable bool, herr error, msg *Message) error { + msg.MarkFailed(time.Now(), retryable, herr) + if err := h.q.ErrorCallback(ctx, *msg); err != nil { + return fmt.Errorf("failed to execute error callback with receiver type %s and error %w", msg.ReceiverType, err) + } + return herr +} + // MessageHandler is a function to handler dequeued message func (h *Handler) MessageHandler(ctx context.Context, messages []Message) error { - for _, message := range messages { - notifier, err := h.getNotifierPlugin(message.ReceiverType) - if err != nil { - return err + for _, msg := range messages { + if err := h.SingleMessageHandler(ctx, &msg); err != nil { + h.logger.Error(err.Error()) } + } + return nil +} - message.MarkPending(time.Now()) +func (h *Handler) SingleMessageHandler(ctx context.Context, msg *Message) error { - newConfig, err := notifier.PostHookQueueTransformConfigs(ctx, message.Configs) - if err != nil { - message.MarkFailed(time.Now(), false, err) + defer func() { + h.instrumentMQDuration(ctx, msg) + }() - if cerr := h.q.ErrorCallback(ctx, message); cerr != nil { - return cerr - } - return err - } - message.Configs = newConfig + notifier, err := h.getNotifierPlugin(msg.ReceiverType) + if err != nil { + return h.errorMessageHandler(ctx, false, err, msg) + } - if retryable, err := notifier.Send(ctx, message); err != nil { - message.MarkFailed(time.Now(), retryable, err) + msg.MarkPending(time.Now()) - if cerr := h.q.ErrorCallback(ctx, message); cerr != nil { - return cerr - } - return err - } + newConfig, err := notifier.PostHookQueueTransformConfigs(ctx, msg.Configs) + if err != nil { + return h.errorMessageHandler(ctx, false, err, msg) + } + msg.Configs = newConfig - message.MarkPublished(time.Now()) + if retryable, err := notifier.Send(ctx, *msg); err != nil { + return h.errorMessageHandler(ctx, retryable, err, msg) + } - if err := h.q.SuccessCallback(ctx, message); err != nil { - return err - } + msg.MarkPublished(time.Now()) + + if err := h.q.SuccessCallback(ctx, *msg); err != nil { + return err } return nil } + +func (h *Handler) instrumentMQDuration(ctx context.Context, msg *Message) { + h.metricHistMQDuration.Record( + ctx, time.Since(msg.CreatedAt).Milliseconds(), metric.WithAttributes( + attribute.String("receiver_type", msg.ReceiverType), + attribute.String("status", string(msg.Status)), + attribute.Int("try_count", msg.TryCount), + attribute.Int("max_try", msg.MaxTries), + attribute.Bool("retryable", msg.Retryable), + ), + ) +} diff --git a/core/notification/handler_test.go b/core/notification/handler_test.go index 69223c98..cf5bcf16 100644 --- a/core/notification/handler_test.go +++ b/core/notification/handler_test.go @@ -14,12 +14,12 @@ import ( const testReceiverType = "test" -func TestHandler_MessageHandler(t *testing.T) { +func TestHandler_SingleMessageHandler(t *testing.T) { testCases := []struct { - name string - messages []notification.Message - setup func(*mocks.Queuer, *mocks.Notifier) - wantErr bool + name string + messages []notification.Message + setup func(*mocks.Queuer, *mocks.Notifier) + wantErrStr string }{ { name: "return error if plugin type is not supported", @@ -29,8 +29,10 @@ func TestHandler_MessageHandler(t *testing.T) { }, }, setup: func(q *mocks.Queuer, _ *mocks.Notifier) { + q.EXPECT().ErrorCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(nil) + q.EXPECT().ErrorCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(nil) }, - wantErr: true, + wantErrStr: "unsupported receiver type: \"random\" on handler ", }, { name: "return error if post hook transform config is failing and error callback success", @@ -43,7 +45,7 @@ func TestHandler_MessageHandler(t *testing.T) { n.EXPECT().PostHookQueueTransformConfigs(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("map[string]interface {}")).Return(nil, errors.New("some error")) q.EXPECT().ErrorCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(nil) }, - wantErr: true, + wantErrStr: "some error", }, { name: "return error if post hook transform config is failing and error callback is failing", @@ -56,7 +58,7 @@ func TestHandler_MessageHandler(t *testing.T) { n.EXPECT().PostHookQueueTransformConfigs(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("map[string]interface {}")).Return(nil, errors.New("some error")) q.EXPECT().ErrorCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(errors.New("some error")) }, - wantErr: true, + wantErrStr: "failed to execute error callback with receiver type test and error some error", }, { name: "return error if send message return error and error handler queue return error", @@ -70,7 +72,7 @@ func TestHandler_MessageHandler(t *testing.T) { n.EXPECT().Send(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(false, errors.New("some error")) q.EXPECT().ErrorCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(errors.New("some error")) }, - wantErr: true, + wantErrStr: "failed to execute error callback with receiver type test and error some error", }, { name: "return error if send message return error and error handler queue return no error", @@ -84,7 +86,7 @@ func TestHandler_MessageHandler(t *testing.T) { n.EXPECT().Send(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(false, errors.New("some error")) q.EXPECT().ErrorCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(nil) }, - wantErr: true, + wantErrStr: "some error", }, { name: "return error if send message success and success handler queue return error", @@ -98,7 +100,7 @@ func TestHandler_MessageHandler(t *testing.T) { n.EXPECT().Send(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(false, nil) q.EXPECT().SuccessCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(errors.New("some error")) }, - wantErr: true, + wantErrStr: "some error", }, { name: "return no error if send message success and success handler queue return no error", @@ -112,7 +114,6 @@ func TestHandler_MessageHandler(t *testing.T) { n.EXPECT().Send(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(false, nil) q.EXPECT().SuccessCallback(mock.AnythingOfType("context.todoCtx"), mock.AnythingOfType("notification.Message")).Return(nil) }, - wantErr: false, }, } for _, tc := range testCases { @@ -129,8 +130,10 @@ func TestHandler_MessageHandler(t *testing.T) { h := notification.NewHandler(notification.HandlerConfig{}, log.NewNoop(), mockQueue, map[string]notification.Notifier{ testReceiverType: mockNotifier, }) - if err := h.MessageHandler(context.TODO(), tc.messages); (err != nil) != tc.wantErr { - t.Errorf("Handler.messageHandler() error = %v, wantErr %v", err, tc.wantErr) + if err := h.SingleMessageHandler(context.TODO(), &tc.messages[0]); err != nil { + if err.Error() != tc.wantErrStr { + t.Errorf("Handler.messageHandler() error = %s, wantErr = %s", err.Error(), tc.wantErrStr) + } } mockQueue.AssertExpectations(t) diff --git a/core/notification/router_subscriber_service.go b/core/notification/router_subscriber_service.go index 5b4343bc..8c1e67c5 100644 --- a/core/notification/router_subscriber_service.go +++ b/core/notification/router_subscriber_service.go @@ -14,9 +14,6 @@ import ( ) const ( - metricRouterSubscriberAttributePrepareMessage = "preparemessage.status" - metricRouterSubscriberAttributePrepareSuccess = "preparemessage.success" - metricRouterSubscriberStatusMatchError = "MATCH_ERROR" metricRouterSubscriberStatusMatchNotFound = "MATCH_NOT_FOUND" metricRouterSubscriberStatusMessageInitError = "MESSAGE_INIT_ERROR" @@ -188,7 +185,7 @@ func (s *RouterSubscriberService) PrepareMessageV2(ctx context.Context, n Notifi messages = make([]Message, 0) defer func() { - s.instrumentDispatchSubscription(ctx, metricRouterSubscriberAttributePrepareMessage, metricStatus, err) + s.instrumentDispatchSubscription(ctx, n, metricStatus, err) }() receiversView, err := s.deps.SubscriptionService.MatchByLabelsV2(ctx, n.NamespaceID, n.Labels) @@ -236,10 +233,12 @@ func (s *RouterSubscriberService) PrepareMessageV2(ctx context.Context, n Notifi return messages, notificationLogs, hasSilenced, nil } -func (s *RouterSubscriberService) instrumentDispatchSubscription(ctx context.Context, attributeKey, attributeValue string, err error) { +func (s *RouterSubscriberService) instrumentDispatchSubscription(ctx context.Context, n Notification, status string, err error) { s.metricCounterRouterSubscriber.Add(ctx, 1, metric.WithAttributes( - attribute.String(attributeKey, attributeValue), - attribute.Bool("operation.success", err == nil), + attribute.String("route.subscriber.status", status), + attribute.String("notification.type", n.Type), + attribute.String("notification.template", n.Template), + attribute.Bool("success", err == nil), )) } @@ -247,7 +246,7 @@ func (s *RouterSubscriberService) PrepareMetaMessages(ctx context.Context, n Not var metricStatus = metricRouterSubscriberStatusSuccess defer func() { - s.instrumentDispatchSubscription(ctx, metricRouterSubscriberAttributePrepareMessage, metricStatus, err) + s.instrumentDispatchSubscription(ctx, n, metricStatus, err) }() receiversView, err := s.deps.SubscriptionService.MatchByLabelsV2(ctx, n.NamespaceID, n.Labels) diff --git a/go.mod b/go.mod index a7e14a64..99ece32e 100644 --- a/go.mod +++ b/go.mod @@ -42,8 +42,8 @@ require ( go.nhat.io/otelsql v0.12.0 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 - go.opentelemetry.io/otel v1.24.0 - go.opentelemetry.io/otel/metric v1.24.0 + go.opentelemetry.io/otel v1.27.0 + go.opentelemetry.io/otel/metric v1.27.0 golang.org/x/sync v0.7.0 google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe gopkg.in/yaml.v2 v2.4.0 @@ -97,7 +97,7 @@ require ( github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/analysis v0.20.0 // indirect @@ -196,9 +196,9 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.45.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0 // indirect - go.opentelemetry.io/otel/sdk v1.24.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect + go.opentelemetry.io/otel/sdk v1.27.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.27.0 // indirect + go.opentelemetry.io/otel/trace v1.27.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/goleak v1.3.0 // indirect diff --git a/go.sum b/go.sum index e8532ad5..5b2b6286 100644 --- a/go.sum +++ b/go.sum @@ -1419,8 +1419,9 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= @@ -2938,8 +2939,8 @@ go.opentelemetry.io/contrib/samplers/probability/consistent v0.16.0 h1:ioa90Fh9v go.opentelemetry.io/contrib/samplers/probability/consistent v0.16.0/go.mod h1:OkgPOr4dXyXP81P++FBSs+kxVs4/QCxA+8tid0/bSFg= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.45.0 h1:tfil6di0PoNV7FZdsCS7A5izZoVVQ7AuXtyekbOpG/I= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.45.0/go.mod h1:AKFZIEPOnqB00P63bTjOiah4ZTaRzl1TKwUWpZdYUHI= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= @@ -2951,17 +2952,17 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.24.0/go.mod h1:yMb/8c6 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA= go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= +go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= go.opentelemetry.io/otel/sdk/metric v1.22.0/go.mod h1:KjQGeMIDlBNEOo6HvjhxIec1p/69/kULDcp4gr0oLQQ= -go.opentelemetry.io/otel/sdk/metric v1.24.0 h1:yyMQrPzF+k88/DbH7o4FMAs80puqd+9osbiBrJrz/w8= -go.opentelemetry.io/otel/sdk/metric v1.24.0/go.mod h1:I6Y5FjH6rvEnTTAYQz3Mmv2kl6Ek5IIrmwTLqMrrOE0= +go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI= +go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw= go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= +go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= diff --git a/go.work.sum b/go.work.sum index 52f01da5..14ce95c2 100644 --- a/go.work.sum +++ b/go.work.sum @@ -221,11 +221,14 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0 h1:Q3C9yzW6I9jqEc8sawxzxZmY48fs9u220KXq6d5s3XU= go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0/go.mod h1:hYwym2nDEeZfG/motx0p7L7J1N1vyzIThemQsb4g2qY= go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= diff --git a/plugins/providers/cortex/go.mod b/plugins/providers/cortex/go.mod index b4453a12..c62649a8 100644 --- a/plugins/providers/cortex/go.mod +++ b/plugins/providers/cortex/go.mod @@ -70,9 +70,9 @@ require ( github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect github.com/uber/jaeger-lib v2.4.1+incompatible // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect + go.opentelemetry.io/otel v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.27.0 // indirect + go.opentelemetry.io/otel/trace v1.27.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/goleak v1.3.0 // indirect go.uber.org/multierr v1.11.0 // indirect diff --git a/plugins/providers/cortex/go.sum b/plugins/providers/cortex/go.sum index dfed2168..67e264f4 100644 --- a/plugins/providers/cortex/go.sum +++ b/plugins/providers/cortex/go.sum @@ -2630,9 +2630,9 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=