Skip to content

Commit 4cac537

Browse files
feat: Add error logging in the handler (#6)
* feat: Add error logging in the handler * fix: Use quay.io references instead of docker.io ones * fix: logger error in tests Co-authored-by: Néstor Salceda <[email protected]>
1 parent 8483975 commit 4cac537

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

cmd/harbor-scanner-sysdig-secure/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func main() {
3131
log.SetLevel(log.TraceLevel)
3232
log.Info("Starting harbor-scanner-sysdig-secure")
3333

34-
apiHandler := v1.NewAPIHandler(getAdapter(), log.StandardLogger().Writer())
34+
apiHandler := v1.NewAPIHandler(getAdapter(), log.StandardLogger())
3535

3636
apiServer := api.NewServer(apiHandler)
3737

pkg/http/api/v1/handler.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"io"
77
"net/http"
8+
"time"
89

910
"github.com/gorilla/handlers"
1011
"github.com/gorilla/mux"
@@ -15,11 +16,19 @@ import (
1516

1617
type requestHandler struct {
1718
adapter scanner.Adapter
19+
logger Logger
1820
}
1921

20-
func NewAPIHandler(adapter scanner.Adapter, logger io.Writer) http.Handler {
22+
type Logger interface {
23+
Writer() *io.PipeWriter
24+
Error(args ...interface{})
25+
Errorf(format string, args ...interface{})
26+
}
27+
28+
func NewAPIHandler(adapter scanner.Adapter, logger Logger) http.Handler {
2129
handler := requestHandler{
2230
adapter: adapter,
31+
logger: logger,
2332
}
2433

2534
router := mux.NewRouter()
@@ -30,7 +39,7 @@ func NewAPIHandler(adapter scanner.Adapter, logger io.Writer) http.Handler {
3039
apiV1Router.Methods(http.MethodPost).Path("/scan").HandlerFunc(handler.scan)
3140
apiV1Router.Methods(http.MethodGet).Path("/scan/{scan_request_id}/report").HandlerFunc(handler.getReport)
3241

33-
return handlers.LoggingHandler(logger, router)
42+
return handlers.LoggingHandler(logger.Writer(), router)
3443
}
3544

3645
func health(res http.ResponseWriter, req *http.Request) {
@@ -40,8 +49,10 @@ func health(res http.ResponseWriter, req *http.Request) {
4049
func (h *requestHandler) metadata(res http.ResponseWriter, req *http.Request) {
4150
metadata, err := h.adapter.GetMetadata()
4251
if err != nil {
52+
h.logRequestError(req, err)
4353
res.Header().Set("Content-Type", harbor.ScanAdapterErrorMimeType)
4454
res.WriteHeader(http.StatusInternalServerError)
55+
4556
json.NewEncoder(res).Encode(errorResponseFromError(err))
4657
return
4758
}
@@ -100,6 +111,16 @@ func (h *requestHandler) getReport(res http.ResponseWriter, req *http.Request) {
100111
json.NewEncoder(res).Encode(vulnerabilityReport)
101112
}
102113

114+
func (h *requestHandler) logRequestError(req *http.Request, err error) {
115+
ts := time.Now()
116+
h.logger.Errorf("[%s] \"%s %s %s\" request ERROR: %s",
117+
ts.Format("02/Jan/2006:15:04:05 -0700"),
118+
req.Method,
119+
req.RequestURI,
120+
req.Proto,
121+
err)
122+
}
123+
103124
func errorResponseFromError(err error) harbor.ErrorResponse {
104125
return harbor.ErrorResponse{
105126
Error: &harbor.ModelError{

pkg/http/api/v1/handler_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package v1_test
33
import (
44
"encoding/json"
55
"errors"
6+
log "github.com/sirupsen/logrus"
67
"net/http"
78
"net/http/httptest"
89
"strings"
@@ -31,7 +32,9 @@ var _ = Describe("Harbor Scanner Sysdig Secure API Adapter", func() {
3132
BeforeEach(func() {
3233
controller = gomock.NewController(GinkgoT())
3334
adapter = mocks.NewMockAdapter(controller)
34-
handler = v1.NewAPIHandler(adapter, GinkgoWriter)
35+
log.SetOutput(GinkgoWriter)
36+
log.SetLevel(log.TraceLevel)
37+
handler = v1.NewAPIHandler(adapter, log.StandardLogger())
3538
})
3639

3740
AfterEach(func() {

pkg/secure/client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var _ = Describe("Sysdig Secure Client", func() {
2525

2626
Context("when adding an image to scanning queue", func() {
2727
It("adds image to scanning queue", func() {
28-
response, _ := client.AddImage("sysdig/agent:9.8.0", false)
28+
response, _ := client.AddImage("quay.io/sysdig/agent:10.6.0", false)
2929

3030
Expect(response).NotTo(Equal(secure.ScanResponse{}))
3131
Expect(response.ImageContent).NotTo(BeNil())
@@ -58,7 +58,7 @@ var _ = Describe("Sysdig Secure Client", func() {
5858
})
5959

6060
It("returns a ReportNotReadyErr if the image is being analyzed", func() {
61-
response, _ := client.AddImage("sysdig/agent:9.9.0", true)
61+
response, _ := client.AddImage("quay.io/sysdig/agent:10.7.0", true)
6262

6363
_, err := client.GetVulnerabilities(response.ImageDigest)
6464

0 commit comments

Comments
 (0)