Skip to content

Commit

Permalink
[CLOUDTRUST-1635] Log error for event endpoint
Browse files Browse the repository at this point in the history
* Logger in Event ErrorHandler
* Fix rate limiter configs
  • Loading branch information
harture committed Sep 9, 2019
1 parent ee757d7 commit 2859535
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 22 deletions.
20 changes: 12 additions & 8 deletions cmd/keycloakb/keycloak_bridge.go
Expand Up @@ -115,9 +115,11 @@ func main() {

// Rate limiting
rateLimit = map[string]int{
"account": c.GetInt("rate-account"),
"event": c.GetInt("rate-event"),
"account": c.GetInt("rate-account"),
"management": c.GetInt("rate-management"),
"statistics": c.GetInt("rate-statistics"),
"events": c.GetInt("rate-events"),
}

corsOptions = cors.Options{
Expand Down Expand Up @@ -359,8 +361,8 @@ func main() {
statisticsComponent = statistics.MakeAuthorizationManagementComponentMW(log.With(statisticsLogger, "mw", "endpoint"), authorizationManager)(statisticsComponent)

statisticsEndpoints = statistics.Endpoints{
GetStatistics: prepareEndpoint(statistics.MakeGetStatisticsEndpoint(statisticsComponent), "get_statistics", influxMetrics, statisticsLogger, tracer, rateLimit["event"]),
GetMigrationReport: prepareEndpoint(statistics.MakeGetMigrationReportEndpoint(statisticsComponent), "get_migration_report", influxMetrics, statisticsLogger, tracer, rateLimit["event"]),
GetStatistics: prepareEndpoint(statistics.MakeGetStatisticsEndpoint(statisticsComponent), "get_statistics", influxMetrics, statisticsLogger, tracer, rateLimit["statistics"]),
GetMigrationReport: prepareEndpoint(statistics.MakeGetMigrationReportEndpoint(statisticsComponent), "get_migration_report", influxMetrics, statisticsLogger, tracer, rateLimit["statistics"]),
}
}

Expand All @@ -376,9 +378,9 @@ func main() {
eventsComponent = events.MakeAuthorizationManagementComponentMW(log.With(eventsLogger, "mw", "endpoint"), authorizationManager)(eventsComponent)

eventsEndpoints = events.Endpoints{
GetEvents: prepareEndpoint(events.MakeGetEventsEndpoint(eventsComponent), "get_events", influxMetrics, eventsLogger, tracer, rateLimit["event"]),
GetEventsSummary: prepareEndpoint(events.MakeGetEventsSummaryEndpoint(eventsComponent), "get_events_summary", influxMetrics, eventsLogger, tracer, rateLimit["event"]),
GetUserEvents: prepareEndpoint(events.MakeGetUserEventsEndpoint(eventsComponent), "get_user_events", influxMetrics, eventsLogger, tracer, rateLimit["event"]),
GetEvents: prepareEndpoint(events.MakeGetEventsEndpoint(eventsComponent), "get_events", influxMetrics, eventsLogger, tracer, rateLimit["events"]),
GetEventsSummary: prepareEndpoint(events.MakeGetEventsSummaryEndpoint(eventsComponent), "get_events_summary", influxMetrics, eventsLogger, tracer, rateLimit["events"]),
GetUserEvents: prepareEndpoint(events.MakeGetUserEventsEndpoint(eventsComponent), "get_user_events", influxMetrics, eventsLogger, tracer, rateLimit["events"]),
}
}

Expand Down Expand Up @@ -479,7 +481,7 @@ func main() {

var eventHandler http.Handler
{
eventHandler = event.MakeHTTPEventHandler(eventEndpoints.Endpoint)
eventHandler = event.MakeHTTPEventHandler(eventEndpoints.Endpoint, logger)
eventHandler = middleware.MakeHTTPCorrelationIDMW(idGenerator, tracer, logger, ComponentName, ComponentID)(eventHandler)
eventHandler = tracer.MakeHTTPTracingMW(ComponentName, "http_server_event")(eventHandler)
eventHandler = middleware.MakeHTTPBasicAuthenticationMW(eventExpectedAuthToken, logger)(eventHandler)
Expand Down Expand Up @@ -707,9 +709,11 @@ func config(logger log.Logger) *viper.Viper {
v.SetDefault("db-config-migration-version", "")

// Rate limiting (in requests/second)
v.SetDefault("rate-account", 1000)
v.SetDefault("rate-event", 1000)
v.SetDefault("rate-account", 1000)
v.SetDefault("rate-management", 1000)
v.SetDefault("rate-statistics", 1000)
v.SetDefault("rate-events", 1000)

// Influx DB client default.
v.SetDefault("influx", false)
Expand Down
4 changes: 4 additions & 0 deletions configs/keycloak_bridge.yml
Expand Up @@ -90,7 +90,11 @@ events-db: false

# Rate limiting in requests/second.
rate-event: 1000
rate-account: 1000
rate-management: 1000
rate-statistics: 1000
rate-events: 1000


# Influx DB configs
influx: false
Expand Down
27 changes: 16 additions & 11 deletions pkg/event/http.go
Expand Up @@ -8,17 +8,18 @@ import (
"net/http"

cs "github.com/cloudtrust/common-service"
"github.com/cloudtrust/common-service/log"
"github.com/go-kit/kit/endpoint"
http_transport "github.com/go-kit/kit/transport/http"
"github.com/pkg/errors"
)

// MakeHTTPEventHandler makes a HTTP handler for the event endpoint.
func MakeHTTPEventHandler(e endpoint.Endpoint) *http_transport.Server {
func MakeHTTPEventHandler(e endpoint.Endpoint, logger log.Logger) *http_transport.Server {
return http_transport.NewServer(e,
decodeHTTPRequest,
encodeHTTPReply,
http_transport.ServerErrorEncoder(errorHandler),
http_transport.ServerErrorEncoder(errorHandler(logger)),
http_transport.ServerBefore(fetchHTTPCorrelationID),
)
}
Expand Down Expand Up @@ -101,14 +102,18 @@ func (e ErrInvalidArgument) Error() string {
}

// errorHandler encodes the reply when there is an error.
func errorHandler(ctx context.Context, err error, w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
switch errors.Cause(err).(type) {
case ErrInvalidArgument:
w.WriteHeader(http.StatusBadRequest)
default:
w.WriteHeader(http.StatusInternalServerError)
}
func errorHandler(logger log.Logger) func(ctx context.Context, err error, w http.ResponseWriter) {
return func(ctx context.Context, err error, w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
switch errors.Cause(err).(type) {
case ErrInvalidArgument:
logger.Error("errorHandler", http.StatusBadRequest, "msg", err.Error())
w.WriteHeader(http.StatusBadRequest)
default:
logger.Error("errorHandler", http.StatusInternalServerError, "msg", err.Error())
w.WriteHeader(http.StatusInternalServerError)
}

json.NewEncoder(w).Encode(map[string]interface{}{"error": err.Error()})
json.NewEncoder(w).Encode(map[string]interface{}{"error": err.Error()})
}
}
10 changes: 7 additions & 3 deletions pkg/event/http_test.go
Expand Up @@ -14,6 +14,7 @@ import (
"time"

cs "github.com/cloudtrust/common-service"
"github.com/cloudtrust/common-service/log"
"github.com/cloudtrust/keycloak-bridge/api/event/fb"
"github.com/cloudtrust/keycloak-bridge/internal/keycloakb"
"github.com/cloudtrust/keycloak-bridge/pkg/event/mock"
Expand All @@ -26,8 +27,9 @@ func TestHTTPEventHandler(t *testing.T) {
var mockCtrl = gomock.NewController(t)
defer mockCtrl.Finish()
var mockComponent = mock.NewMuxComponent(mockCtrl)
var mockLogger = log.NewNopLogger()

var eventHandler = MakeHTTPEventHandler(keycloakb.ToGoKitEndpoint(MakeEventEndpoint(mockComponent)))
var eventHandler = MakeHTTPEventHandler(keycloakb.ToGoKitEndpoint(MakeEventEndpoint(mockComponent)), mockLogger)

rand.Seed(time.Now().UnixNano())
var uid = rand.Int63()
Expand Down Expand Up @@ -55,8 +57,9 @@ func TestHTTPErrorHandler(t *testing.T) {
var mockCtrl = gomock.NewController(t)
defer mockCtrl.Finish()
var mockComponent = mock.NewMuxComponent(mockCtrl)
var mockLogger = log.NewNopLogger()

var eventHandler = MakeHTTPEventHandler(keycloakb.ToGoKitEndpoint(MakeEventEndpoint(mockComponent)))
var eventHandler = MakeHTTPEventHandler(keycloakb.ToGoKitEndpoint(MakeEventEndpoint(mockComponent)), mockLogger)

rand.Seed(time.Now().UnixNano())
var uid = rand.Int63()
Expand Down Expand Up @@ -159,8 +162,9 @@ func TestFetchHTTPCorrelationID(t *testing.T) {
var mockCtrl = gomock.NewController(t)
defer mockCtrl.Finish()
var mockComponent = mock.NewMuxComponent(mockCtrl)
var mockLogger = log.NewNopLogger()

var eventHandler = MakeHTTPEventHandler(keycloakb.ToGoKitEndpoint(MakeEventEndpoint(mockComponent)))
var eventHandler = MakeHTTPEventHandler(keycloakb.ToGoKitEndpoint(MakeEventEndpoint(mockComponent)), mockLogger)

rand.Seed(time.Now().UnixNano())
var corrID = strconv.FormatUint(rand.Uint64(), 10)
Expand Down

0 comments on commit 2859535

Please sign in to comment.