From 49bcad4f0fd57f92ebb61646355e4ab99b1d9cdb Mon Sep 17 00:00:00 2001 From: Johan de Klerk <johan@shiplogic.com> Date: Thu, 6 Apr 2023 10:00:15 +0200 Subject: [PATCH] Debug sqs and http calls --- handler_utils/debug.go | 116 +++++++++++++++++++++++++++++++++++++++++ sqs/sqs.go | 12 ++++- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 handler_utils/debug.go diff --git a/handler_utils/debug.go b/handler_utils/debug.go new file mode 100644 index 0000000..aa7201c --- /dev/null +++ b/handler_utils/debug.go @@ -0,0 +1,116 @@ +package handler_utils + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "github.com/aws/aws-lambda-go/events" + "github.com/aws/aws-lambda-go/lambda" + "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/utils" + "io" + "net/http" + "os" + "strings" +) + +// ======================================================================== +// HTTP functions +// ======================================================================== + +func ServeHTTPFunctions(lambdaHandler lambda.Handler, w http.ResponseWriter, req *http.Request) { + + // Read body + buf := new(bytes.Buffer) + _, err := buf.ReadFrom(req.Body) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + req.Body.Close() + body := buf.String() + + // Read Query + queryValues := req.URL.Query() + query := map[string]string{} + for key, values := range queryValues { + query[key] = values[0] + } + + // Call lambda function + request := events.APIGatewayProxyRequest{ + Resource: req.URL.Path, + HTTPMethod: req.Method, + QueryStringParameters: query, + Body: body, + } + + jsonRequest, _ := json.Marshal(request) + ctx := context.Background() + responseBytes, err := lambdaHandler.Invoke(ctx, jsonRequest) + if err != nil { + panic(err) + } + + // Parse response + response := map[string]any{} + err = json.Unmarshal(responseBytes, &response) + if err != nil { + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(int(response["statusCode"].(float64))) + _, _ = io.WriteString(w, response["body"].(string)) +} + +// ======================================================================== +// SQS Functions +// ======================================================================== + +func ServeSQSFunctions(lambdaHandler lambda.Handler, w http.ResponseWriter, req *http.Request) { + + // Read body + buf := new(bytes.Buffer) + _, err := buf.ReadFrom(req.Body) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + req.Body.Close() + body := buf.String() + + sqsType := req.URL.Path + sqsType = strings.ReplaceAll(sqsType, "/sqs/", "") + + // Call lambda function + sqsRequest, _ := json.Marshal(events.SQSEvent{ + Records: []events.SQSMessage{ + { + Body: body, + MessageAttributes: map[string]events.SQSMessageAttribute{ + "type": { + StringValue: utils.PointerValue(sqsType), + }, + }, + }, + }, + }) + + ctx := context.Background() + responseBytes, err := lambdaHandler.Invoke(ctx, sqsRequest) + if err != nil { + panic(err) + } + + // Parse response + response := map[string]any{} + err = json.Unmarshal(responseBytes, &response) + if err != nil { + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(int(response["statusCode"].(float64))) + _, _ = io.WriteString(w, response["body"].(string)) +} diff --git a/sqs/sqs.go b/sqs/sqs.go index 3275a67..450e210 100644 --- a/sqs/sqs.go +++ b/sqs/sqs.go @@ -14,6 +14,7 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sqs" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/logs" + "github.com/go-resty/resty/v2" ) var sqsClient *sqs.SQS @@ -102,7 +103,16 @@ func (m *Messenger) SendSQSMessage(headers map[string]string, body string, curre return *res.MessageId, err } -func SendSQSMessage(msgr Messenger, objectToSend interface{}, currentRequestID *string, sqsType string) error { +func SendSQSMessage(msgr Messenger, objectToSend interface{}, currentRequestID *string, sqsType string, isDebug bool) error { + + if isDebug { + resty.New().R(). + SetBody(objectToSend). + Post("http://127.0.0.1:3000/sqs/" + sqsType) + return nil + } + + if sqsClient == nil { var err error sqsClient, err = NewSQSClient(msgr.Region) -- GitLab