Jelajahi Sumber

Call ingest status endpoint after sending billing events

Mauricio Araujo 2 tahun lalu
induk
melakukan
a9f0a3cc16

+ 25 - 0
api/server/handlers/billing/ingest.go

@@ -2,6 +2,8 @@
 package billing
 
 import (
+	"bytes"
+	"encoding/json"
 	"fmt"
 	"net/http"
 
@@ -80,5 +82,28 @@ func (c *IngestEventsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		return
 	}
 
+	// Call the ingest check webhook
+	webhookUrl := c.Config().ServerConf.IngestStatusWebhookUrl
+	req := struct {
+		ProjectID uint `json:"project_id"`
+	}{
+		ProjectID: proj.ID,
+	}
+
+	reqBody, err := json.Marshal(req)
+	if err != nil {
+		err := telemetry.Error(ctx, span, err, "error marshalling ingest status webhook request")
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
+	client := &http.Client{}
+	resp, err := client.Post(webhookUrl, "application/json", bytes.NewBuffer(reqBody))
+	if err != nil || resp.StatusCode != http.StatusOK {
+		err := telemetry.Error(ctx, span, err, "error sending ingest status webhook request")
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
 	c.WriteResult(w, r, "")
 }

+ 3 - 0
api/server/shared/config/env/envconfs.go

@@ -75,6 +75,9 @@ type ServerConf struct {
 	PorterCloudPlanID    string `env:"PORTER_CLOUD_PLAN_ID"`
 	PorterStandardPlanID string `env:"PORTER_STANDARD_PLAN_ID"`
 
+	// The URL of the webhook to verify ingesting events works
+	IngestStatusWebhookUrl string `env:"INGEST_STATUS_WEBHOOK_URL"`
+
 	// This endpoint will be passed to the porter-agent so that
 	// the billing manager can query Prometheus.
 	PrometheusUrl string `env:"PROMETHEUS_URL"`