Explorar o código

Properly handle request, add missing telemetry

Mauricio Araujo %!s(int64=2) %!d(string=hai) anos
pai
achega
515c8a96e6
Modificáronse 2 ficheiros con 13 adicións e 3 borrados
  1. 9 3
      api/server/handlers/billing/ingest.go
  2. 4 0
      internal/billing/metronome.go

+ 9 - 3
api/server/handlers/billing/ingest.go

@@ -49,15 +49,21 @@ func (c *IngestEventsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		telemetry.AttributeKV{Key: "usage-id", Value: proj.UsageID},
 	)
 
-	request := []types.BillingEvent{}
+	ingestEventsRequest := struct {
+		Events []types.BillingEvent `json:"billing_events"`
+	}{}
 
-	if ok := c.DecodeAndValidate(w, r, &request); !ok {
+	if ok := c.DecodeAndValidate(w, r, &ingestEventsRequest); !ok {
 		err := telemetry.Error(ctx, span, nil, "error decoding ingest events request")
 		c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusBadRequest))
 		return
 	}
 
-	err := c.Config().BillingManager.MetronomeClient.IngestEvents(ctx, request)
+	telemetry.WithAttributes(span,
+		telemetry.AttributeKV{Key: "usage-events", Value: len(ingestEventsRequest.Events)},
+	)
+
+	err := c.Config().BillingManager.MetronomeClient.IngestEvents(ctx, ingestEventsRequest.Events)
 	if err != nil {
 		err := telemetry.Error(ctx, span, err, "error ingesting events")
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 4 - 0
internal/billing/metronome.go

@@ -259,6 +259,10 @@ func (m MetronomeClient) GetCustomerDashboard(ctx context.Context, customerID uu
 
 // IngestEvents sends a list of billing events to Metronome's ingest endpoint
 func (m MetronomeClient) IngestEvents(ctx context.Context, events []types.BillingEvent) (err error) {
+	if len(events) == 0 {
+		return nil
+	}
+
 	path := "ingest"
 
 	var currentAttempts int