diff --git a/.github/workflows/build-and-push-docker-image.yml b/.github/workflows/build-and-push-docker-image.yml index b153fd5..3f55424 100644 --- a/.github/workflows/build-and-push-docker-image.yml +++ b/.github/workflows/build-and-push-docker-image.yml @@ -7,7 +7,7 @@ env: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/pkg/hawk/config.go b/pkg/hawk/config.go index f2a0a54..5492017 100644 --- a/pkg/hawk/config.go +++ b/pkg/hawk/config.go @@ -13,4 +13,7 @@ type HawkCatcherConfig struct { // Hawk collector URL URL string `env:"HAWK_URL"` + + // Whether enable Hawk Catcher + Enabled bool `env:"HAWK_ENABLED" envDefault:"false"` } diff --git a/pkg/hawk/main.go b/pkg/hawk/main.go index bbb12e9..4a427f6 100644 --- a/pkg/hawk/main.go +++ b/pkg/hawk/main.go @@ -17,7 +17,11 @@ func Init() error { // load settings from ENV if err := env.Parse(&cfg); err != nil { - return errors.New("Failed to parse ENV") + return errors.New("failed to parse ENV") + } + + if !cfg.Enabled || cfg.Token == "" || cfg.URL == "" { + return errors.New("hawk Catcher is disabled") } // Initialize Catcher with Websocket transport diff --git a/pkg/server/errorshandler/handler.go b/pkg/server/errorshandler/handler.go index c1e8f8b..ff1f332 100644 --- a/pkg/server/errorshandler/handler.go +++ b/pkg/server/errorshandler/handler.go @@ -12,7 +12,6 @@ import ( "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" - "github.com/tidwall/sjson" ) const DefaultQueueName = "errors/default" @@ -87,18 +86,13 @@ func (handler *Handler) process(body []byte) ResponseMessage { } // Validate if message is a valid JSON - stringMessage := string(message.Payload) - if !gjson.Valid(stringMessage) { + stringPayload := string(message.Payload) + if !gjson.Valid(stringPayload) { return ResponseMessage{400, true, "Invalid payload JSON format"} } - modifiedMessage, err := sjson.Set(stringMessage, "timestamp", time.Now().Unix()) - if err != nil { - return ResponseMessage{400, true, fmt.Sprintf("%s", err)} - } - // convert message to JSON format - messageToSend := BrokerMessage{ProjectId: projectId, Payload: []byte(modifiedMessage), CatcherType: message.CatcherType} + messageToSend := BrokerMessage{Timestamp: time.Now().Unix(), ProjectId: projectId, Payload: []byte(stringPayload), CatcherType: message.CatcherType} rawMessage, err := json.Marshal(messageToSend) if err != nil { log.Errorf("Message marshalling error: %v", err) diff --git a/pkg/server/errorshandler/handler_sentry.go b/pkg/server/errorshandler/handler_sentry.go index 3a5445d..0efa6f0 100644 --- a/pkg/server/errorshandler/handler_sentry.go +++ b/pkg/server/errorshandler/handler_sentry.go @@ -3,6 +3,7 @@ package errorshandler import ( "encoding/json" "fmt" + "time" "github.com/codex-team/hawk.collector/pkg/broker" log "github.com/sirupsen/logrus" @@ -102,7 +103,7 @@ func (handler *Handler) HandleSentry(ctx *fasthttp.RequestCtx) { sendAnswerHTTP(ctx, ResponseMessage{400, true, "Cannot serialize envelope"}) } - messageToSend := BrokerMessage{ProjectId: projectId, Payload: json.RawMessage(jsonMessage), CatcherType: CatcherType} + messageToSend := BrokerMessage{Timestamp: time.Now().Unix(), ProjectId: projectId, Payload: json.RawMessage(jsonMessage), CatcherType: CatcherType} payloadToSend, err := json.Marshal(messageToSend) if err != nil { log.Errorf("Message marshalling error: %v", err) diff --git a/pkg/server/errorshandler/messages.go b/pkg/server/errorshandler/messages.go index 74773d6..deaead6 100644 --- a/pkg/server/errorshandler/messages.go +++ b/pkg/server/errorshandler/messages.go @@ -23,6 +23,7 @@ type BrokerMessage struct { ProjectId string `json:"projectId"` Payload json.RawMessage `json:"payload"` CatcherType string `json:"catcherType"` + Timestamp int64 `json:"timestamp"` } type RawSentryMessage struct {