Skip to content

Commit

Permalink
Fix airbrake notice message (#149)
Browse files Browse the repository at this point in the history
  • Loading branch information
agbpatro authored Apr 8, 2024
1 parent 5b12655 commit 3e395bc
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 14 deletions.
20 changes: 12 additions & 8 deletions server/airbrake/airbrake.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,24 @@ func (a *AirbrakeHandler) WithReporting(next http.Handler) http.Handler {
})
}

// ReportLogMessage log message to airbrake
func (a *AirbrakeHandler) ReportLogMessage(logType logrus.LogType, message string, err error, logInfo logrus.LogInfo) {
if a.airbrakeNotifier == nil {
return
}
func (a *AirbrakeHandler) logMessage(logType logrus.LogType, message string, err error, logInfo logrus.LogInfo) *githubairbrake.Notice {
notice := githubairbrake.NewNotice(message, nil, 1)
notice.Params["log_type"] = logType
notice.Params["log_type"] = logrus.AllLogType[logType]
if err != nil {
notice.Params["error"] = err
notice.Params["error"] = err.Error()
}
if logInfo != nil {
for logKey, logValue := range logInfo {
notice.Params[logKey] = logValue
}
}
a.airbrakeNotifier.SendNoticeAsync(notice)
return notice
}

// ReportLogMessage log message to airbrake
func (a *AirbrakeHandler) ReportLogMessage(logType logrus.LogType, message string, err error, logInfo logrus.LogInfo) {
if a.airbrakeNotifier == nil {
return
}
a.airbrakeNotifier.SendNoticeAsync(a.logMessage(logType, message, err, logInfo))
}
39 changes: 33 additions & 6 deletions server/airbrake/airbrake_test.go
Original file line number Diff line number Diff line change
@@ -1,35 +1,37 @@
package airbrake

import (
"errors"
"net/http"
"net/http/httptest"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
logrus "github.com/teslamotors/fleet-telemetry/logger"
)

var _ = Describe("AirbrakeMiddleware", func() {
var (
middleware *AirbrakeHandler
recorder *httptest.ResponseRecorder
req *http.Request
handler *AirbrakeHandler
recorder *httptest.ResponseRecorder
req *http.Request
)

BeforeEach(func() {
var err error
req, err = http.NewRequest("GET", "/test", nil)
Expect(err).NotTo(HaveOccurred())
middleware = NewAirbrakeHandler(nil)
handler = NewAirbrakeHandler(nil)
recorder = httptest.NewRecorder()
})

DescribeTable("successfully handles request",
func(statusCode int, body string) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(statusCode)
w.Write([]byte(body))
})
middleware.WithReporting(handler).ServeHTTP(recorder, req)
handler.WithReporting(httpHandler).ServeHTTP(recorder, req)
Expect(recorder.Code).To(Equal(statusCode))
responseBody := recorder.Body.Bytes()
Expect(responseBody).To(Equal([]byte(body)))
Expand All @@ -38,4 +40,29 @@ var _ = Describe("AirbrakeMiddleware", func() {
Entry("400", http.StatusInternalServerError, "bad error"),
Entry("200", http.StatusOK, "ok"),
)

Context("logMessage", func() {

It("for error", func() {
notice := handler.logMessage(logrus.ERROR, "test_err", errors.New("sample error"), logrus.LogInfo{"key1": "value1", "key2": "value2"})
Expect(len(notice.Errors)).Should(Equal(1))
Expect(notice.Errors[0].Message).Should(Equal("test_err"))
Expect(notice.Params).Should(Equal(map[string]interface{}{"log_type": "error", "error": "sample error", "key1": "value1", "key2": "value2"}))
})

It("for error with logInfo", func() {
notice := handler.logMessage(logrus.ERROR, "test_err", errors.New("sample error"), nil)
Expect(len(notice.Errors)).Should(Equal(1))
Expect(notice.Errors[0].Message).Should(Equal("test_err"))
Expect(notice.Params).Should(Equal(map[string]interface{}{"log_type": "error", "error": "sample error"}))
})

It("for info", func() {
notice := handler.logMessage(logrus.INFO, "test_info", nil, logrus.LogInfo{"key1": "value1", "key2": "value2"})
Expect(len(notice.Errors)).Should(Equal(1))
Expect(notice.Errors[0].Message).Should(Equal("test_info"))
Expect(notice.Params).Should(Equal(map[string]interface{}{"log_type": "info", "key1": "value1", "key2": "value2"}))
})
})

})

0 comments on commit 3e395bc

Please sign in to comment.