feat: support ingestion from SNS (#231)

This commit is contained in:
abelanger5
2024-03-04 13:52:45 -08:00
committed by GitHub
parent ca56800ebe
commit 043f23e2a3
19 changed files with 928 additions and 109 deletions
@@ -0,0 +1,13 @@
package ingestors
import "github.com/hatchet-dev/hatchet/internal/config/server"
type IngestorsService struct {
config *server.ServerConfig
}
func NewIngestorsService(config *server.ServerConfig) *IngestorsService {
return &IngestorsService{
config: config,
}
}
+69
View File
@@ -0,0 +1,69 @@
package ingestors
import (
"encoding/json"
"fmt"
"io"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/internal/integrations/ingestors/sns"
)
func (i *IngestorsService) SnsUpdate(ctx echo.Context, req gen.SnsUpdateRequestObject) (gen.SnsUpdateResponseObject, error) {
body, err := io.ReadAll(ctx.Request().Body)
if err != nil {
return nil, err
}
payload := &sns.Payload{}
err = json.Unmarshal(body, payload)
if err != nil {
return nil, err
}
if err := payload.VerifyPayload(); err != nil {
return nil, err
}
tenantId := req.Tenant.String()
// verify that the tenant and the topic ARN are set in the database
snsInt, err := i.config.Repository.SNS().GetSNSIntegration(tenantId, payload.TopicArn)
if err != nil {
return nil, err
}
if snsInt == nil {
return nil, fmt.Errorf("SNS integration not found for tenant %s and topic ARN %s", tenantId, payload.TopicArn)
}
switch payload.Type {
case "SubscriptionConfirmation":
_, err := payload.Subscribe()
if err != nil {
return nil, err
}
case "UnsubscribeConfirmation":
_, err := payload.Unsubscribe()
if err != nil {
return nil, err
}
default:
_, err := i.config.Ingestor.IngestEvent(ctx.Request().Context(), req.Tenant.String(), req.Event, payload)
if err != nil {
return nil, err
}
}
return gen.SnsUpdate200Response{}, nil
}
+209 -108
View File
@@ -921,6 +921,9 @@ type ServerInterface interface {
// List integrations
// (GET /api/v1/meta/integrations)
MetadataListIntegrations(ctx echo.Context) error
// Github app tenant webhook
// (POST /api/v1/sns/{tenant}/{event})
SnsUpdate(ctx echo.Context, tenant openapi_types.UUID, event string) error
// Create pull request
// (POST /api/v1/step-runs/{step-run}/create-pr)
StepRunUpdateCreatePr(ctx echo.Context, stepRun openapi_types.UUID) error
@@ -1213,6 +1216,30 @@ func (w *ServerInterfaceWrapper) MetadataListIntegrations(ctx echo.Context) erro
return err
}
// SnsUpdate converts echo context to params.
func (w *ServerInterfaceWrapper) SnsUpdate(ctx echo.Context) error {
var err error
// ------------- Path parameter "tenant" -------------
var tenant openapi_types.UUID
err = runtime.BindStyledParameterWithLocation("simple", false, "tenant", runtime.ParamLocationPath, ctx.Param("tenant"), &tenant)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter tenant: %s", err))
}
// ------------- Path parameter "event" -------------
var event string
err = runtime.BindStyledParameterWithLocation("simple", false, "event", runtime.ParamLocationPath, ctx.Param("event"), &event)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter event: %s", err))
}
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.SnsUpdate(ctx, tenant, event)
return err
}
// StepRunUpdateCreatePr converts echo context to params.
func (w *ServerInterfaceWrapper) StepRunUpdateCreatePr(ctx echo.Context) error {
var err error
@@ -2122,6 +2149,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
router.POST(baseURL+"/api/v1/github/webhook/:webhook", wrapper.GithubUpdateTenantWebhook)
router.GET(baseURL+"/api/v1/meta", wrapper.MetadataGet)
router.GET(baseURL+"/api/v1/meta/integrations", wrapper.MetadataListIntegrations)
router.POST(baseURL+"/api/v1/sns/:tenant/:event", wrapper.SnsUpdate)
router.POST(baseURL+"/api/v1/step-runs/:step-run/create-pr", wrapper.StepRunUpdateCreatePr)
router.GET(baseURL+"/api/v1/step-runs/:step-run/diff", wrapper.StepRunGetDiff)
router.GET(baseURL+"/api/v1/step-runs/:step-run/logs", wrapper.LogLineList)
@@ -2547,6 +2575,50 @@ func (response MetadataListIntegrations400JSONResponse) VisitMetadataListIntegra
return json.NewEncoder(w).Encode(response)
}
type SnsUpdateRequestObject struct {
Tenant openapi_types.UUID `json:"tenant"`
Event string `json:"event"`
}
type SnsUpdateResponseObject interface {
VisitSnsUpdateResponse(w http.ResponseWriter) error
}
type SnsUpdate200Response struct {
}
func (response SnsUpdate200Response) VisitSnsUpdateResponse(w http.ResponseWriter) error {
w.WriteHeader(200)
return nil
}
type SnsUpdate400JSONResponse APIErrors
func (response SnsUpdate400JSONResponse) VisitSnsUpdateResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(400)
return json.NewEncoder(w).Encode(response)
}
type SnsUpdate401JSONResponse APIErrors
func (response SnsUpdate401JSONResponse) VisitSnsUpdateResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(401)
return json.NewEncoder(w).Encode(response)
}
type SnsUpdate405JSONResponse APIErrors
func (response SnsUpdate405JSONResponse) VisitSnsUpdateResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(405)
return json.NewEncoder(w).Encode(response)
}
type StepRunUpdateCreatePrRequestObject struct {
StepRun openapi_types.UUID `json:"step-run"`
Body *StepRunUpdateCreatePrJSONRequestBody
@@ -3975,6 +4047,8 @@ type StrictServerInterface interface {
MetadataListIntegrations(ctx echo.Context, request MetadataListIntegrationsRequestObject) (MetadataListIntegrationsResponseObject, error)
SnsUpdate(ctx echo.Context, request SnsUpdateRequestObject) (SnsUpdateResponseObject, error)
StepRunUpdateCreatePr(ctx echo.Context, request StepRunUpdateCreatePrRequestObject) (StepRunUpdateCreatePrResponseObject, error)
StepRunGetDiff(ctx echo.Context, request StepRunGetDiffRequestObject) (StepRunGetDiffResponseObject, error)
@@ -4330,6 +4404,32 @@ func (sh *strictHandler) MetadataListIntegrations(ctx echo.Context) error {
return nil
}
// SnsUpdate operation middleware
func (sh *strictHandler) SnsUpdate(ctx echo.Context, tenant openapi_types.UUID, event string) error {
var request SnsUpdateRequestObject
request.Tenant = tenant
request.Event = event
handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
return sh.ssi.SnsUpdate(ctx, request.(SnsUpdateRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "SnsUpdate")
}
response, err := handler(ctx, request)
if err != nil {
return err
} else if validResponse, ok := response.(SnsUpdateResponseObject); ok {
return validResponse.VisitSnsUpdateResponse(ctx.Response())
} else if response != nil {
return fmt.Errorf("Unexpected response type: %T", response)
}
return nil
}
// StepRunUpdateCreatePr operation middleware
func (sh *strictHandler) StepRunUpdateCreatePr(ctx echo.Context, stepRun openapi_types.UUID) error {
var request StepRunUpdateCreatePrRequestObject
@@ -5373,114 +5473,115 @@ func (sh *strictHandler) WorkflowVersionGetDefinition(ctx echo.Context, workflow
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file
+3
View File
@@ -12,6 +12,7 @@ import (
apitokens "github.com/hatchet-dev/hatchet/api/v1/server/handlers/api-tokens"
"github.com/hatchet-dev/hatchet/api/v1/server/handlers/events"
githubapp "github.com/hatchet-dev/hatchet/api/v1/server/handlers/github-app"
"github.com/hatchet-dev/hatchet/api/v1/server/handlers/ingestors"
"github.com/hatchet-dev/hatchet/api/v1/server/handlers/logs"
"github.com/hatchet-dev/hatchet/api/v1/server/handlers/metadata"
stepruns "github.com/hatchet-dev/hatchet/api/v1/server/handlers/step-runs"
@@ -36,6 +37,7 @@ type apiService struct {
*apitokens.APITokenService
*stepruns.StepRunService
*githubapp.GithubAppService
*ingestors.IngestorsService
}
func newAPIService(config *server.ServerConfig) *apiService {
@@ -50,6 +52,7 @@ func newAPIService(config *server.ServerConfig) *apiService {
APITokenService: apitokens.NewAPITokenService(config),
StepRunService: stepruns.NewStepRunService(config),
GithubAppService: githubapp.NewGithubAppService(config),
IngestorsService: ingestors.NewIngestorsService(config),
}
}