Skip to content

Commit

Permalink
Fix logger data enrichment (#84)
Browse files Browse the repository at this point in the history
* Wrap data creation

* Apply comments
  • Loading branch information
desislavaa authored and blgm committed Oct 4, 2019
1 parent b1ba960 commit dcf20a4
Show file tree
Hide file tree
Showing 11 changed files with 84 additions and 64 deletions.
13 changes: 5 additions & 8 deletions handlers/bind.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import (
"encoding/json"
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const (
Expand All @@ -22,13 +22,10 @@ func (h APIHandler) Bind(w http.ResponseWriter, req *http.Request) {
instanceID := vars["instance_id"]
bindingID := vars["binding_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(bindLogKey, lager.Data{
instanceIDLogKey: instanceID,
bindingIDLogKey: bindingID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
bindingIDLogKey: bindingID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

version := getAPIVersion(req)
asyncAllowed := false
Expand Down
11 changes: 4 additions & 7 deletions handlers/deprovision.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package handlers
import (
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const deprovisionLogKey = "deprovision"
Expand All @@ -17,12 +17,9 @@ func (h APIHandler) Deprovision(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
instanceID := vars["instance_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(deprovisionLogKey, lager.Data{
instanceIDLogKey: instanceID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

details := domain.DeprovisionDetails{
PlanID: req.FormValue("plan_id"),
Expand Down
13 changes: 5 additions & 8 deletions handlers/get_binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import (
"errors"
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const getBindLogKey = "getBinding"
Expand All @@ -18,13 +18,10 @@ func (h APIHandler) GetBinding(w http.ResponseWriter, req *http.Request) {
instanceID := vars["instance_id"]
bindingID := vars["binding_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(getBindLogKey, lager.Data{
instanceIDLogKey: instanceID,
bindingIDLogKey: bindingID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
bindingIDLogKey: bindingID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

version := getAPIVersion(req)
if version.Minor < 14 {
Expand Down
11 changes: 4 additions & 7 deletions handlers/get_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import (
"errors"
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const getInstanceLogKey = "getInstance"
Expand All @@ -17,12 +17,9 @@ func (h APIHandler) GetInstance(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
instanceID := vars["instance_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(getInstanceLogKey, lager.Data{
instanceIDLogKey: instanceID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

version := getAPIVersion(req)
if version.Minor < 14 {
Expand Down
11 changes: 4 additions & 7 deletions handlers/last_binding_operation.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import (
"errors"
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const lastBindingOperationLogKey = "lastBindingOperation"
Expand All @@ -24,12 +24,9 @@ func (h APIHandler) LastBindingOperation(w http.ResponseWriter, req *http.Reques
OperationData: req.FormValue("operation"),
}

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(lastBindingOperationLogKey, lager.Data{
instanceIDLogKey: instanceID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

version := getAPIVersion(req)
if version.Minor < 14 {
Expand Down
11 changes: 4 additions & 7 deletions handlers/last_operation.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package handlers
import (
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const lastOperationLogKey = "lastOperation"
Expand All @@ -22,12 +22,9 @@ func (h APIHandler) LastOperation(w http.ResponseWriter, req *http.Request) {
OperationData: req.FormValue("operation"),
}

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(lastOperationLogKey, lager.Data{
instanceIDLogKey: instanceID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

logger.Info("starting-check-for-operation")

Expand Down
10 changes: 3 additions & 7 deletions handlers/provision.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ import (
"encoding/json"
"net/http"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

Expand All @@ -26,12 +25,9 @@ func (h *APIHandler) Provision(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
instanceID := vars["instance_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(provisionLogKey, lager.Data{
instanceIDLogKey: instanceID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

var details domain.ProvisionDetails
if err := json.NewDecoder(req.Body).Decode(&details); err != nil {
Expand Down
10 changes: 4 additions & 6 deletions handlers/unbind.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const unbindLogKey = "unbind"
Expand All @@ -18,13 +19,10 @@ func (h APIHandler) Unbind(w http.ResponseWriter, req *http.Request) {
instanceID := vars["instance_id"]
bindingID := vars["binding_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(unbindLogKey, lager.Data{
instanceIDLogKey: instanceID,
bindingIDLogKey: bindingID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
bindingIDLogKey: bindingID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

version := getAPIVersion(req)
asyncAllowed := req.FormValue("accepts_incomplete") == "true"
Expand Down
11 changes: 4 additions & 7 deletions handlers/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import (
"net/http"
"strconv"

"github.com/pivotal-cf/brokerapi/middlewares"

"code.cloudfoundry.org/lager"
"github.com/gorilla/mux"
"github.com/pivotal-cf/brokerapi/domain"
"github.com/pivotal-cf/brokerapi/domain/apiresponses"
"github.com/pivotal-cf/brokerapi/middlewares"
"github.com/pivotal-cf/brokerapi/utils"
)

const updateLogKey = "update"
Expand All @@ -19,12 +19,9 @@ func (h APIHandler) Update(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
instanceID := vars["instance_id"]

correlationID := req.Context().Value(middlewares.CorrelationIDKey).(string)

logger := h.logger.Session(updateLogKey, lager.Data{
instanceIDLogKey: instanceID,
middlewares.CorrelationIDKey: correlationID,
})
instanceIDLogKey: instanceID,
}, utils.DataForContext(req.Context(), middlewares.CorrelationIDKey))

var details domain.UpdateDetails
if err := json.NewDecoder(req.Body).Decode(&details); err != nil {
Expand Down
12 changes: 12 additions & 0 deletions utils/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package utils
import (
"context"

"code.cloudfoundry.org/lager"
"github.com/pivotal-cf/brokerapi/domain"
)

Expand Down Expand Up @@ -40,3 +41,14 @@ func RetrieveServicePlanFromContext(ctx context.Context) *domain.ServicePlan {
}
return nil
}

func DataForContext(context context.Context, dataKeys ...string) lager.Data {
data := lager.Data{}
for _, key := range dataKeys {
if value := context.Value(key); value != nil {
data[key] = value
}
}

return data
}
35 changes: 35 additions & 0 deletions utils/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,39 @@ var _ = Describe("Context", func() {
})
})
})

Describe("Log data for context", func() {
const testKey = "test-key"

Context("the provided key is present in the context", func() {
It("returns data containing the key", func() {
expectedValue := "123"
ctx = context.WithValue(ctx, testKey, expectedValue)

data := utils.DataForContext(ctx, testKey)
value, ok := data[testKey]
Expect(ok).To(BeTrue())
Expect(value).Should(Equal(expectedValue))
})
Context("the key value is a struct", func() {
It("returns data containing the key", func() {
type testType struct{}
expectedValue := testType{}
ctx = context.WithValue(ctx, testKey, expectedValue)

data := utils.DataForContext(ctx, testKey)
value, ok := data[testKey]
Expect(ok).To(BeTrue())
Expect(value).Should(Equal(expectedValue))
})
})
})
Context("the provided key is not in the context", func() {
It("returns data without the key", func() {
data := utils.DataForContext(ctx, testKey)
_, ok := data[testKey]
Expect(ok).To(BeFalse())
})
})
})
})

0 comments on commit dcf20a4

Please sign in to comment.