diff --git a/Makefile b/Makefile index 12c03ca..f5326df 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ test: SHELL:=/bin/bash test: mkdir -p coverage - go test -v -race ./... -coverprofile coverage/cover.out.tmp -coverpkg=./... -run .* + go test -race -coverpkg=./... ./... -coverprofile cover.out.tmp -covermode=atomic cat coverage/cover.out.tmp | grep -v "mock_\|examples" > coverage/cover.out go tool cover -html=coverage/cover.out -o coverage/cover.html go tool cover -func=coverage/cover.out diff --git a/cmd/server/connectors.go b/cmd/server/connectors.go index 4b3670d..e8e1848 100644 --- a/cmd/server/connectors.go +++ b/cmd/server/connectors.go @@ -6,19 +6,19 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/flagship-io/decision-api/pkg/config" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/connectors/assignments_managers" - "github.com/flagship-io/decision-api/pkg/utils/config" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" ) func getAssignmentsManager(cfg *config.Config) (assignmentsManager connectors.AssignmentsManager, err error) { - switch cfg.GetStringDefault("cache.type", "") { + switch cfg.GetDefaultString("cache.type", "") { case "memory": assignmentsManager = assignments_managers.InitMemoryManager() case "local": assignmentsManager, err = assignments_managers.InitLocalCacheManager(assignments_managers.LocalOptions{ - DbPath: cfg.GetStringDefault("cache.options.dbpath", "cache_data"), + DbPath: cfg.GetDefaultString("cache.options.dbpath", "cache_data"), }) case "redis": var tlsConfig *tls.Config @@ -26,13 +26,13 @@ func getAssignmentsManager(cfg *config.Config) (assignmentsManager connectors.As tlsConfig = &tls.Config{} } assignmentsManager, err = assignments_managers.InitRedisManager(assignments_managers.RedisOptions{ - Host: cfg.GetStringDefault("cache.options.redisHost", "localhost:6379"), - Username: cfg.GetStringDefault("cache.options.redisUsername", ""), - Password: cfg.GetStringDefault("cache.options.redisPassword", ""), - Db: cfg.GetIntDefault("cache.options.redisDb", 0), - TTL: cfg.GetDurationDefault("cache.options.redisTtl", 3*30*24*time.Hour), - LogLevel: cfg.GetStringDefault("log.level", config.LoggerLevel), - LogFormat: logger.LogFormat(cfg.GetStringDefault("log.format", config.LoggerFormat)), + Host: cfg.GetDefaultString("cache.options.redisHost", "localhost:6379"), + Username: cfg.GetDefaultString("cache.options.redisUsername", ""), + Password: cfg.GetDefaultString("cache.options.redisPassword", ""), + Db: cfg.GetDefaultInt("cache.options.redisDb", 0), + TTL: cfg.GetDefaultDuration("cache.options.redisTtl", 3*30*24*time.Hour), + LogLevel: cfg.GetDefaultString("log.level", config.LoggerLevel), + LogFormat: logger.LogFormat(cfg.GetDefaultString("log.format", config.LoggerFormat)), TLSConfig: tlsConfig, }) case "dynamo": @@ -40,12 +40,12 @@ func getAssignmentsManager(cfg *config.Config) (assignmentsManager connectors.As client := dynamodb.New(session) assignmentsManager = assignments_managers.InitDynamoManager(assignments_managers.DynamoManagerOptions{ Client: client, - TableName: cfg.GetStringDefault("cache.options.dynamoTableName", "visitor-assignments"), - PrimaryKeySeparator: cfg.GetStringDefault("cache.options.dynamoPKSeparator", "."), - PrimaryKeyField: cfg.GetStringDefault("cache.options.dynamoPKField", "id"), - GetItemTimeout: cfg.GetDurationDefault("cache.options.dynamoGetTimeout", 1*time.Second), - LogLevel: cfg.GetStringDefault("log.level", config.LoggerLevel), - LogFormat: logger.LogFormat(cfg.GetStringDefault("log.format", config.LoggerFormat)), + TableName: cfg.GetDefaultString("cache.options.dynamoTableName", "visitor-assignments"), + PrimaryKeySeparator: cfg.GetDefaultString("cache.options.dynamoPKSeparator", "."), + PrimaryKeyField: cfg.GetDefaultString("cache.options.dynamoPKField", "id"), + GetItemTimeout: cfg.GetDefaultDuration("cache.options.dynamoGetTimeout", 1*time.Second), + LogLevel: cfg.GetDefaultString("log.level", config.LoggerLevel), + LogFormat: logger.LogFormat(cfg.GetDefaultString("log.format", config.LoggerFormat)), }) default: assignmentsManager = &assignments_managers.EmptyManager{} diff --git a/cmd/server/connectors_test.go b/cmd/server/connectors_test.go index 77c6513..a5967e6 100644 --- a/cmd/server/connectors_test.go +++ b/cmd/server/connectors_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/alicebob/miniredis/v2" + "github.com/flagship-io/decision-api/pkg/config" "github.com/flagship-io/decision-api/pkg/connectors/assignments_managers" - "github.com/flagship-io/decision-api/pkg/utils/config" "github.com/stretchr/testify/assert" ) diff --git a/cmd/server/server.go b/cmd/server/server.go index d4c2681..7fbe9a8 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -9,26 +9,26 @@ import ( "syscall" "time" + "github.com/flagship-io/decision-api/pkg/config" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" "github.com/flagship-io/decision-api/pkg/server" - "github.com/flagship-io/decision-api/pkg/utils/config" - "github.com/flagship-io/decision-api/pkg/utils/logger" ) var shutdownTimeout = 3 * time.Second func createLogger(cfg *config.Config) *logger.Logger { - lvl := cfg.GetStringDefault("log.level", config.LoggerLevel) - format := cfg.GetStringDefault("log.format", config.LoggerFormat) + lvl := cfg.GetDefaultString("log.level", config.LoggerLevel) + format := cfg.GetDefaultString("log.format", config.LoggerFormat) return logger.New(lvl, logger.LogFormat(format), "Server") } func createServer(cfg *config.Config, log *logger.Logger) (*server.Server, error) { - logLvl := cfg.GetStringDefault("log.level", config.LoggerLevel) - logFmt := cfg.GetStringDefault("log.format", config.LoggerFormat) + logLvl := cfg.GetDefaultString("log.level", config.LoggerLevel) + logFmt := cfg.GetDefaultString("log.format", config.LoggerFormat) log.Info("initializing assignment cache manager from configuration") assignmentManager, err := getAssignmentsManager(cfg) @@ -50,8 +50,8 @@ func createServer(cfg *config.Config, log *logger.Logger) (*server.Server, error server.WithAssignmentsManager(assignmentManager), server.WithCorsOptions(&models.CorsOptions{ Enabled: cfg.GetBool("cors.enabled"), - AllowedOrigins: cfg.GetStringDefault("cors.allowed_origins", config.ServerCorsAllowedOrigins), - AllowedHeaders: cfg.GetStringDefault("cors.allowed_headers", config.ServerCorsAllowedHeaders), + AllowedOrigins: cfg.GetDefaultString("cors.allowed_origins", config.ServerCorsAllowedOrigins), + AllowedHeaders: cfg.GetDefaultString("cors.allowed_headers", config.ServerCorsAllowedHeaders), }), ) } @@ -74,7 +74,7 @@ func main() { // Run server go func() { - logger.Infof("Flagship Decision API server [%s] listening on %s", models.Version, cfg.GetStringDefault("address", ":8080")) + logger.Infof("Flagship Decision API server [%s] listening on %s", models.Version, cfg.GetDefaultString("address", ":8080")) if err := srv.Listen(); err != http.ErrServerClosed { logger.Fatalf("error when starting server: %v", err) } diff --git a/cmd/server/server_test.go b/cmd/server/server_test.go index d67890a..e486c33 100644 --- a/cmd/server/server_test.go +++ b/cmd/server/server_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/flagship-io/decision-api/pkg/utils/config" + "github.com/flagship-io/decision-api/pkg/config" "github.com/sirupsen/logrus" "github.com/spf13/viper" "github.com/stretchr/testify/assert" @@ -38,6 +38,7 @@ func TestCreateServer(t *testing.T) { func TestMain(t *testing.T) { os.Setenv("API_KEY", "api_key") os.Setenv("ENV_ID", "env_id") + os.Setenv("ADDRESS", "localhost:8080") go func() { time.Sleep(2 * time.Second) err := syscall.Kill(syscall.Getpid(), syscall.SIGINT) diff --git a/internal/apilogic/campaigns.go b/internal/apilogic/campaigns.go index bf7aaf1..d3235a8 100644 --- a/internal/apilogic/campaigns.go +++ b/internal/apilogic/campaigns.go @@ -7,7 +7,8 @@ import ( "sync" "github.com/flagship-io/decision-api/internal/handle" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" + "github.com/flagship-io/decision-api/internal/udc" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/models" common "github.com/flagship-io/flagship-common" @@ -19,7 +20,7 @@ import ( func HandleCampaigns(w http.ResponseWriter, req *http.Request, decisionContext *connectors.DecisionContext, handleDecision func(http.ResponseWriter, *handle.Request, error), tracker *common.Tracker) { handleRequest, err := BuildHandleRequest(req) if err != nil { - utils.WriteClientError(w, http.StatusBadRequest, err.Error()) + reswriter.WriteClientError(w, http.StatusBadRequest, err.Error()) return } @@ -34,10 +35,10 @@ func HandleCampaigns(w http.ResponseWriter, req *http.Request, decisionContext * if err != nil { if errors.Is(err, models.ErrEnvironmentNotFound) { - utils.WriteClientError(w, http.StatusBadRequest, fmt.Sprintf("environment %s not found", handleRequest.DecisionContext.EnvID)) + reswriter.WriteClientError(w, http.StatusBadRequest, fmt.Sprintf("environment %s not found", handleRequest.DecisionContext.EnvID)) return } - utils.WriteServerError(w, err) + reswriter.WriteServerError(w, err) return } @@ -53,7 +54,7 @@ func HandleCampaigns(w http.ResponseWriter, req *http.Request, decisionContext * } if len(filteredCampaigns) == 0 { - utils.WriteClientError(w, http.StatusBadRequest, fmt.Sprintf("The campaign %s is paused or doesn’t exist. Verify your customId or campaignId.", handleRequest.CampaignID)) + reswriter.WriteClientError(w, http.StatusBadRequest, fmt.Sprintf("The campaign %s is paused or doesn’t exist. Verify your customId or campaignId.", handleRequest.CampaignID)) return } handleRequest.Environment.Common.Campaigns = filteredCampaigns @@ -61,7 +62,7 @@ func HandleCampaigns(w http.ResponseWriter, req *http.Request, decisionContext * // 3. Return panic response is panic mode activated if handleRequest.Environment.Common.IsPanic { - utils.WritePanicResponse(w, handleRequest.DecisionRequest.VisitorId) + reswriter.WritePanicResponse(w, handleRequest.DecisionRequest.VisitorId) return } @@ -110,7 +111,7 @@ func HandleCampaigns(w http.ResponseWriter, req *http.Request, decisionContext * } func fillVisitorContext(request *handle.Request) error { - data, err := utils.FetchVisitorData(request.DecisionContext.EnvID, request.DecisionRequest.VisitorId.Value) + data, err := udc.FetchVisitorData(request.DecisionContext.EnvID, request.DecisionRequest.VisitorId.Value) if err != nil { return err } diff --git a/internal/apilogic/handle_request.go b/internal/apilogic/handle_request.go index e0db440..47bdbba 100644 --- a/internal/apilogic/handle_request.go +++ b/internal/apilogic/handle_request.go @@ -5,14 +5,14 @@ import ( "strings" "github.com/flagship-io/decision-api/internal/handle" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/parser" "github.com/flagship-io/flagship-common/targeting" ) // BuildHandleRequest builds a handle.Request object from the API Gateway request func BuildHandleRequest(req *http.Request) (*handle.Request, error) { handleRequest := handle.NewRequestFromHTTP(req) - decisionRequest, err := utils.GetDecisionRequest(req) + decisionRequest, err := parser.ParseRequest(req) if err != nil { return nil, err diff --git a/internal/handle/handle.go b/internal/handle/handle.go index 6c3c5a8..2b6a90c 100644 --- a/internal/handle/handle.go +++ b/internal/handle/handle.go @@ -7,8 +7,8 @@ import ( "time" "github.com/flagship-io/decision-api/pkg/connectors" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/logger" common "github.com/flagship-io/flagship-common" "github.com/flagship-io/flagship-common/targeting" diff --git a/internal/handle/handle_test.go b/internal/handle/handle_test.go index 1c37c72..f7d97ef 100644 --- a/internal/handle/handle_test.go +++ b/internal/handle/handle_test.go @@ -3,7 +3,7 @@ package handle import ( "testing" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/test" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" "github.com/flagship-io/decision-api/pkg/models" @@ -82,11 +82,11 @@ func TestDecision(t *testing.T) { clientID := "client_id" campaigns := []*common.Campaign{ - utils.CreateABCampaignMock( + test.CreateABCampaignMock( "campaign1", "vg1", - utils.CreateAllUsersTargetingMock(), - utils.CreateModification("key", "value", decision_response.ModificationsType_FLAG), + test.CreateAllUsersTargetingMock(), + test.CreateModification("key", "value", decision_response.ModificationsType_FLAG), ), } clientInfos := common.Environment{ @@ -129,17 +129,17 @@ func TestDecision1Vis1Test(t *testing.T) { clientID := "client_id" campaigns := []*common.Campaign{ - utils.CreateABCampaignMock( + test.CreateABCampaignMock( "campaign1", "vg1", - utils.CreateAllUsersTargetingMock(), - utils.CreateModification("key", "value", decision_response.ModificationsType_FLAG), + test.CreateAllUsersTargetingMock(), + test.CreateModification("key", "value", decision_response.ModificationsType_FLAG), ), - utils.CreateABCampaignMock( + test.CreateABCampaignMock( "campaign1bis", "vg1bis", - utils.CreateAllUsersTargetingMock(), - utils.CreateModification("key", "value", decision_response.ModificationsType_FLAG), + test.CreateAllUsersTargetingMock(), + test.CreateModification("key", "value", decision_response.ModificationsType_FLAG), ), } clientInfos := common.Environment{ @@ -191,11 +191,11 @@ func TestDecisionNoReconciliation(t *testing.T) { } campaigns := []*common.Campaign{ - utils.CreateABCampaignMock( + test.CreateABCampaignMock( "campaign2", "vg2", - utils.CreateAllUsersTargetingMock(), - utils.CreateModification("key", "value", decision_response.ModificationsType_FLAG), + test.CreateAllUsersTargetingMock(), + test.CreateModification("key", "value", decision_response.ModificationsType_FLAG), ), } @@ -237,7 +237,7 @@ func TestDecisionReconciliation(t *testing.T) { anonymousID := "1234" clientID := "client_id" handleRequest := Request{ - DecisionContext: utils.CreateMockDecisionContext(), + DecisionContext: test.CreateMockDecisionContext(), DecisionRequest: &decision_request.DecisionRequest{ VisitorId: &wrapperspb.StringValue{Value: anonymousID}, TriggerHit: &wrapperspb.BoolValue{Value: false}, @@ -250,11 +250,11 @@ func TestDecisionReconciliation(t *testing.T) { } campaigns := []*common.Campaign{ - utils.CreateABCampaignMock( + test.CreateABCampaignMock( "campaign3", "vg3", - utils.CreateAllUsersTargetingMock(), - utils.CreateModification("key", "value", decision_response.ModificationsType_FLAG), + test.CreateAllUsersTargetingMock(), + test.CreateModification("key", "value", decision_response.ModificationsType_FLAG), ), } @@ -307,11 +307,11 @@ func TestDecisionReconciliation(t *testing.T) { "age": structpb.NewStringValue("21"), } campaigns = []*common.Campaign{ - utils.CreateABCampaignMock( + test.CreateABCampaignMock( "campaign4", "vg3", - utils.CreateTargetingWithProvider(), - utils.CreateModification("key", "value", decision_response.ModificationsType_FLAG), + test.CreateTargetingWithProvider(), + test.CreateModification("key", "value", decision_response.ModificationsType_FLAG), ), } clientInfos.Campaigns = campaigns diff --git a/internal/utils/request_parser_test.go b/internal/parser/requert_parser_test.go similarity index 72% rename from internal/utils/request_parser_test.go rename to internal/parser/requert_parser_test.go index 51eef73..ddb99bd 100644 --- a/internal/utils/request_parser_test.go +++ b/internal/parser/requert_parser_test.go @@ -1,4 +1,4 @@ -package utils +package parser import ( "errors" @@ -10,25 +10,25 @@ import ( "github.com/stretchr/testify/assert" ) -func TestGetDecisionRequest(t *testing.T) { - _, err := GetDecisionRequest(&http.Request{ +func TestParseRequest(t *testing.T) { + _, err := ParseRequest(&http.Request{ Method: "GET", }) assert.Equal(t, errors.New("only POST http method is allowed"), err) - _, err = GetDecisionRequest(&http.Request{ + _, err = ParseRequest(&http.Request{ Method: "POST", Body: io.NopCloser(strings.NewReader("")), }) assert.Contains(t, err.Error(), "Must be a valid json") - _, err = GetDecisionRequest(&http.Request{ + _, err = ParseRequest(&http.Request{ Method: "POST", Body: io.NopCloser(strings.NewReader("{\"wrong_key\":true}")), }) assert.Contains(t, err.Error(), "json body is not valid") - r, err := GetDecisionRequest(&http.Request{ + r, err := ParseRequest(&http.Request{ Method: "POST", Body: io.NopCloser(strings.NewReader("{}")), }) diff --git a/internal/utils/request_parser.go b/internal/parser/request_parser.go similarity index 93% rename from internal/utils/request_parser.go rename to internal/parser/request_parser.go index c4e145a..9debd23 100644 --- a/internal/utils/request_parser.go +++ b/internal/parser/request_parser.go @@ -1,4 +1,4 @@ -package utils +package parser import ( "encoding/json" @@ -13,7 +13,7 @@ import ( ) // GetDecisionRequest transforms http request into a DecisionRequest -func GetDecisionRequest(r *http.Request) (*decision_request.DecisionRequest, error) { +func ParseRequest(r *http.Request) (*decision_request.DecisionRequest, error) { decisionRequest, err := unmarshalHit(r) if err != nil { diff --git a/internal/utils/responses.go b/internal/reswriter/responses.go similarity index 99% rename from internal/utils/responses.go rename to internal/reswriter/responses.go index ddcba72..138bf24 100644 --- a/internal/utils/responses.go +++ b/internal/reswriter/responses.go @@ -1,4 +1,4 @@ -package utils +package reswriter import ( "encoding/json" diff --git a/internal/utils/responses_test.go b/internal/reswriter/responses_test.go similarity index 99% rename from internal/utils/responses_test.go rename to internal/reswriter/responses_test.go index 22f0139..800517b 100644 --- a/internal/utils/responses_test.go +++ b/internal/reswriter/responses_test.go @@ -1,4 +1,4 @@ -package utils +package reswriter import ( "errors" diff --git a/internal/utils/model_mock.go b/internal/test/model_mock.go similarity index 98% rename from internal/utils/model_mock.go rename to internal/test/model_mock.go index 746353b..c4155c8 100644 --- a/internal/utils/model_mock.go +++ b/internal/test/model_mock.go @@ -1,12 +1,12 @@ -package utils +package test import ( "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/connectors/assignments_managers" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/logger" common "github.com/flagship-io/flagship-common" "github.com/flagship-io/flagship-proto/decision_response" "github.com/flagship-io/flagship-proto/targeting" diff --git a/internal/utils/time_tracker.go b/internal/timetracker/timetracker.go similarity index 92% rename from internal/utils/time_tracker.go rename to internal/timetracker/timetracker.go index cb483fa..21d8fd4 100644 --- a/internal/utils/time_tracker.go +++ b/internal/timetracker/timetracker.go @@ -1,4 +1,4 @@ -package utils +package timetracker import ( "os" diff --git a/internal/utils/udc.go b/internal/udc/udc.go similarity index 95% rename from internal/utils/udc.go rename to internal/udc/udc.go index 450a2a7..d63f13a 100644 --- a/internal/utils/udc.go +++ b/internal/udc/udc.go @@ -1,4 +1,4 @@ -package utils +package udc import ( "encoding/json" @@ -43,6 +43,6 @@ func FetchVisitorData(environmentID string, visitorID string) ([]UDCVisitorRow, return data, nil } -func SetUDCUrl(url string) { +func SetURL(url string) { udcUrl = url } diff --git a/internal/utils/bucket/bucket.go b/internal/utils/bucket/bucket.go deleted file mode 100644 index 76e4281..0000000 --- a/internal/utils/bucket/bucket.go +++ /dev/null @@ -1,51 +0,0 @@ -package bucket - -import ( - "fmt" - "strconv" - "strings" -) - -var MasterBucketRange = "0-100" -var ZeroBucketRange = "0-0" - -// DefineBucketRange returns a bucket range like this : "0:20-30:40" -func EncodeBucketRangeString(bucketsList []string, bucketRangeIDs []string) string { - if len(bucketsList) == 0 { - return MasterBucketRange - } else if len(bucketRangeIDs) == 0 { - return ZeroBucketRange - } - - bucketRanges := []string{} - for _, cb := range bucketRangeIDs { - for i, b := range bucketsList { - if b == cb { - rangeStart := float64(i) / float64(len(bucketsList)) - rangeEnd := float64(i+1) / float64(len(bucketsList)) - bucketRanges = append(bucketRanges, fmt.Sprintf("%v-%v", rangeStart*100, rangeEnd*100)) - } - } - } - return strings.Join(bucketRanges, ":") -} - -// DefineBucketRange decode a bucket range string into a [][]int value -func DecodeBucketRangeString(bucketString string) [][]float64 { - ret := [][]float64{} - bucketRanges := strings.Split(bucketString, ":") - for _, bucketRange := range bucketRanges { - bucketOffset := strings.Split(bucketRange, "-") - if len(bucketOffset) != 2 { - continue - } - start, _ := strconv.ParseFloat(bucketOffset[0], 64) - end, _ := strconv.ParseFloat(bucketOffset[1], 64) - ret = append(ret, []float64{start, end}) - } - // if no range, return default range - if len(ret) == 0 { - ret = append(ret, []float64{0., 100.}) - } - return ret -} diff --git a/internal/utils/bucket/bucket_test.go b/internal/utils/bucket/bucket_test.go deleted file mode 100644 index f0e69b4..0000000 --- a/internal/utils/bucket/bucket_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package bucket - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestEncodeBucketRangeString(t *testing.T) { - // 10 buckets - buckets := []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"} - assert.Equal(t, "0-10:20-30", EncodeBucketRangeString(buckets, []string{"a", "c"})) - assert.Equal(t, "80-90:90-100", EncodeBucketRangeString(buckets, []string{"i", "j"})) - assert.Equal(t, "10-20:50-60:80-90", EncodeBucketRangeString(buckets, []string{"b", "f", "i"})) - - // 5 buckets - buckets = []string{"a", "b", "c", "d", "e"} - assert.Equal(t, "0-20:40-60", EncodeBucketRangeString(buckets, []string{"a", "c"})) - - // 3 buckets - buckets = []string{"a", "b", "c"} - assert.Equal(t, "33.33333333333333-66.66666666666666", EncodeBucketRangeString(buckets, []string{"b"})) - assert.Equal(t, "0-0", EncodeBucketRangeString(buckets, []string{})) - - // 0 buckets - buckets = []string{} - assert.Equal(t, "0-100", EncodeBucketRangeString(buckets, []string{})) -} - -func TestDecodeBucketRangeString(t *testing.T) { - assert.Equal(t, [][]float64{{33.33333333333333, 66.66666666666666}}, DecodeBucketRangeString("33.33333333333333-66.66666666666666")) - assert.Equal(t, [][]float64{{10., 20.}, {50., 60.}, {80., 90.}}, DecodeBucketRangeString("10-20:50-60:80-90")) - assert.Equal(t, [][]float64{{0., 0.}}, DecodeBucketRangeString("0-0")) - assert.Equal(t, [][]float64{{0., 100.}}, DecodeBucketRangeString("")) -} diff --git a/pkg/utils/config/config.go b/pkg/config/config.go similarity index 86% rename from pkg/utils/config/config.go rename to pkg/config/config.go index 38815da..4fa90f3 100644 --- a/pkg/utils/config/config.go +++ b/pkg/config/config.go @@ -36,7 +36,7 @@ func NewFromFilename(name string) (*Config, error) { return &Config{v}, nil } -func (c *Config) GetStringDefault(key, def string) string { +func (c *Config) GetDefaultString(key, def string) string { if !c.Viper.IsSet(key) { return def } @@ -44,7 +44,7 @@ func (c *Config) GetStringDefault(key, def string) string { return c.Viper.GetString(key) } -func (c *Config) GetIntDefault(key string, def int) int { +func (c *Config) GetDefaultInt(key string, def int) int { if !c.Viper.IsSet(key) { return def } @@ -52,7 +52,7 @@ func (c *Config) GetIntDefault(key string, def int) int { return c.Viper.GetInt(key) } -func (c *Config) GetDurationDefault(key string, def time.Duration) time.Duration { +func (c *Config) GetDefaultDuration(key string, def time.Duration) time.Duration { if !c.Viper.IsSet(key) { return def } diff --git a/pkg/utils/config/config_test.go b/pkg/config/config_test.go similarity index 72% rename from pkg/utils/config/config_test.go rename to pkg/config/config_test.go index 014fd0c..0ae1921 100644 --- a/pkg/utils/config/config_test.go +++ b/pkg/config/config_test.go @@ -22,28 +22,28 @@ func TestNewFromFilename(t *testing.T) { assert.Equal(t, cfg.GetString("cache.options.redisHost"), RedisAddr) } -func TestGetStringDefault(t *testing.T) { +func TestGetDefaultString(t *testing.T) { cfg, _ := NewFromFilename("") - addr := cfg.GetStringDefault("address", "default") + addr := cfg.GetDefaultString("address", "default") assert.Equal(t, ServerAddress, addr) - addr = cfg.GetStringDefault("not_exists", "default") + addr = cfg.GetDefaultString("not_exists", "default") assert.Equal(t, "default", addr) } -func TestGetIntDefault(t *testing.T) { +func TestGetDefaultInt(t *testing.T) { cfg, _ := NewFromFilename("") cfg.Set("test", 1) - val := cfg.GetIntDefault("test", 2) + val := cfg.GetDefaultInt("test", 2) assert.Equal(t, 1, val) - val = cfg.GetIntDefault("not_exists", 2) + val = cfg.GetDefaultInt("not_exists", 2) assert.Equal(t, 2, val) } -func TestGetDurationDefault(t *testing.T) { +func TestGetDefaultDuration(t *testing.T) { cfg, _ := NewFromFilename("") cfg.Set("test", 1*time.Second) - val := cfg.GetDurationDefault("test", 2*time.Minute) + val := cfg.GetDefaultDuration("test", 2*time.Minute) assert.Equal(t, 1*time.Second, val) - val = cfg.GetDurationDefault("not_exists", 2*time.Minute) + val = cfg.GetDefaultDuration("not_exists", 2*time.Minute) assert.Equal(t, 2*time.Minute, val) } diff --git a/pkg/utils/config/default.go b/pkg/config/default.go similarity index 100% rename from pkg/utils/config/default.go rename to pkg/config/default.go diff --git a/pkg/connectors/assignments_managers/dynamo.go b/pkg/connectors/assignments_managers/dynamo.go index 8ef82bf..17363eb 100644 --- a/pkg/connectors/assignments_managers/dynamo.go +++ b/pkg/connectors/assignments_managers/dynamo.go @@ -12,7 +12,7 @@ import ( "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface" "github.com/flagship-io/decision-api/pkg/connectors" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" common "github.com/flagship-io/flagship-common" ) diff --git a/pkg/connectors/assignments_managers/dynamo_test.go b/pkg/connectors/assignments_managers/dynamo_test.go index dc37108..aef90ff 100644 --- a/pkg/connectors/assignments_managers/dynamo_test.go +++ b/pkg/connectors/assignments_managers/dynamo_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/flagship-io/decision-api/pkg/connectors" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" decision "github.com/flagship-io/flagship-common" "github.com/stretchr/testify/assert" ) diff --git a/pkg/connectors/assignments_managers/redis.go b/pkg/connectors/assignments_managers/redis.go index 6c37a60..303ebb0 100644 --- a/pkg/connectors/assignments_managers/redis.go +++ b/pkg/connectors/assignments_managers/redis.go @@ -10,7 +10,7 @@ import ( "time" "github.com/flagship-io/decision-api/pkg/connectors" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" common "github.com/flagship-io/flagship-common" "github.com/go-redis/redis/v8" ) diff --git a/pkg/connectors/environment_loaders/cdn.go b/pkg/connectors/environment_loaders/cdn.go index c09a5f3..ba04422 100644 --- a/pkg/connectors/environment_loaders/cdn.go +++ b/pkg/connectors/environment_loaders/cdn.go @@ -7,8 +7,8 @@ import ( "sync" "time" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/logger" common "github.com/flagship-io/flagship-common" "github.com/flagship-io/flagship-proto/bucketing" "github.com/flagship-io/flagship-proto/decision_response" diff --git a/pkg/connectors/environment_loaders/cdn_test.go b/pkg/connectors/environment_loaders/cdn_test.go index 175745d..804b6b9 100644 --- a/pkg/connectors/environment_loaders/cdn_test.go +++ b/pkg/connectors/environment_loaders/cdn_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/flagship-proto/bucketing" "github.com/flagship-io/flagship-proto/decision_response" "github.com/flagship-io/flagship-proto/targeting" diff --git a/pkg/connectors/hits_processors/datacollect.go b/pkg/connectors/hits_processors/datacollect.go index b3cf017..a38f452 100644 --- a/pkg/connectors/hits_processors/datacollect.go +++ b/pkg/connectors/hits_processors/datacollect.go @@ -11,8 +11,8 @@ import ( "time" "github.com/flagship-io/decision-api/pkg/connectors" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/logger" ) // defaultBatchingWindow is the default time duration for batching hits. diff --git a/pkg/connectors/models.go b/pkg/connectors/models.go index 0d9aedd..08d0be8 100644 --- a/pkg/connectors/models.go +++ b/pkg/connectors/models.go @@ -4,8 +4,8 @@ import ( "context" "time" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/logger" common "github.com/flagship-io/flagship-common" ) diff --git a/pkg/handlers/activate.go b/pkg/handlers/activate.go index d709085..8964c27 100644 --- a/pkg/handlers/activate.go +++ b/pkg/handlers/activate.go @@ -7,7 +7,7 @@ import ( "net/http" "time" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" "github.com/flagship-io/decision-api/internal/validation" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/models" @@ -34,7 +34,7 @@ func Activate(context *connectors.DecisionContext) func(http.ResponseWriter, *ht data, err := io.ReadAll(req.Body) if err != nil { - utils.WriteServerError(w, err) + reswriter.WriteServerError(w, err) return } @@ -43,7 +43,7 @@ func Activate(context *connectors.DecisionContext) func(http.ResponseWriter, *ht if err := protojson.Unmarshal(data, activateRequest); err != nil { activateRequestBatch := &activate_request.ActivateRequestBatch{} if err := protojson.Unmarshal(data, activateRequestBatch); err != nil { - utils.WriteClientError(w, http.StatusBadRequest, err.Error()) + reswriter.WriteClientError(w, http.StatusBadRequest, err.Error()) return } @@ -63,7 +63,7 @@ func Activate(context *connectors.DecisionContext) func(http.ResponseWriter, *ht for _, activateItem := range activateItems { if bodyErr := validation.CheckErrorBody(context.EnvID, activateItem); bodyErr != nil { data, _ := json.Marshal(bodyErr) - utils.WriteClientError(w, http.StatusBadRequest, string(data)) + reswriter.WriteClientError(w, http.StatusBadRequest, string(data)) return } @@ -138,12 +138,12 @@ func Activate(context *connectors.DecisionContext) func(http.ResponseWriter, *ht for i := 0; i < errorsLength; i++ { err := <-errors if err != nil { - utils.WriteServerError(w, err) + reswriter.WriteServerError(w, err) return } } // Return a response with a 200 OK status and the campaign payload as an example - utils.WriteNoContent(w) + reswriter.WriteNoContent(w) } } diff --git a/pkg/handlers/activate_test.go b/pkg/handlers/activate_test.go index ae0e1b1..e47c637 100644 --- a/pkg/handlers/activate_test.go +++ b/pkg/handlers/activate_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/test" "github.com/flagship-io/decision-api/pkg/connectors/assignments_managers" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" @@ -28,7 +28,7 @@ func TestActivate(t *testing.T) { Body: io.NopCloser(strings.NewReader(body)), Method: "POST", } - context := utils.CreateMockDecisionContext() + context := test.CreateMockDecisionContext() Activate(context)(w, req) resp := w.Result() @@ -45,7 +45,7 @@ func TestActivate(t *testing.T) { Body: io.NopCloser(strings.NewReader(body)), Method: "POST", } - context = utils.CreateMockDecisionContext() + context = test.CreateMockDecisionContext() Activate(context)(w, req) resp = w.Result() diff --git a/pkg/handlers/campaign.go b/pkg/handlers/campaign.go index fd544fd..aa6759a 100644 --- a/pkg/handlers/campaign.go +++ b/pkg/handlers/campaign.go @@ -6,9 +6,10 @@ import ( "github.com/flagship-io/decision-api/internal/apilogic" "github.com/flagship-io/decision-api/internal/handle" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" + "github.com/flagship-io/decision-api/internal/timetracker" "github.com/flagship-io/decision-api/pkg/connectors" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/flagship-proto/decision_response" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/types/known/structpb" @@ -29,18 +30,18 @@ import ( // @Router /campaigns/{id} [post] func Campaign(context *connectors.DecisionContext) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { - apilogic.HandleCampaigns(w, req, context, requestCampaignHandler, utils.NewTracker()) + apilogic.HandleCampaigns(w, req, context, requestCampaignHandler, timetracker.NewTracker()) } } func requestCampaignHandler(w http.ResponseWriter, handleRequest *handle.Request, err error) { if err != nil { - utils.WriteClientError(w, http.StatusBadRequest, err.Error()) + reswriter.WriteClientError(w, http.StatusBadRequest, err.Error()) return } if len(handleRequest.DecisionResponse.Campaigns) == 0 { - utils.WriteNoContent(w) + reswriter.WriteNoContent(w) return } @@ -63,10 +64,10 @@ func sendSingleResponse(w http.ResponseWriter, campaignDecisionResponse *decisio ma.EmitUnpopulated = true data, err := ma.Marshal(campaignDecisionResponse) if err != nil { - utils.WriteServerError(w, err) + reswriter.WriteServerError(w, err) return } - utils.WriteJSONStringOk(w, string(data)) + reswriter.WriteJSONStringOk(w, string(data)) } func sendSingleFormatResponse(w http.ResponseWriter, campaignDecisionResponse *decision_response.Campaign, logger *logger.Logger) { diff --git a/pkg/handlers/campaign_test.go b/pkg/handlers/campaign_test.go index 0974209..f05f5eb 100644 --- a/pkg/handlers/campaign_test.go +++ b/pkg/handlers/campaign_test.go @@ -10,8 +10,8 @@ import ( "strings" "testing" - "github.com/flagship-io/decision-api/internal/utils" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/internal/test" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/flagship-proto/decision_response" "github.com/stretchr/testify/assert" "google.golang.org/protobuf/encoding/protojson" @@ -29,7 +29,7 @@ func TestCampaign(t *testing.T) { Method: "POST", } - Campaign(utils.CreateMockDecisionContext())(w, req) + Campaign(test.CreateMockDecisionContext())(w, req) resp := w.Result() @@ -55,7 +55,7 @@ func TestCampaign(t *testing.T) { req.Body = io.NopCloser(strings.NewReader(body)) w = httptest.NewRecorder() - Campaign(utils.CreateMockDecisionContext())(w, req) + Campaign(test.CreateMockDecisionContext())(w, req) resp = w.Result() assert.Equal(t, 200, resp.StatusCode) @@ -67,7 +67,7 @@ func TestCampaign(t *testing.T) { req.Body = io.NopCloser(strings.NewReader(body)) w = httptest.NewRecorder() - Campaign(utils.CreateMockDecisionContext())(w, req) + Campaign(test.CreateMockDecisionContext())(w, req) resp = w.Result() bodyBytes, _ := ioutil.ReadAll(resp.Body) diff --git a/pkg/handlers/campaigns.go b/pkg/handlers/campaigns.go index ed26328..a5a856a 100644 --- a/pkg/handlers/campaigns.go +++ b/pkg/handlers/campaigns.go @@ -7,7 +7,8 @@ import ( "github.com/flagship-io/decision-api/internal/apilogic" "github.com/flagship-io/decision-api/internal/handle" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" + "github.com/flagship-io/decision-api/internal/timetracker" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/models" "github.com/flagship-io/flagship-proto/decision_response" @@ -31,7 +32,7 @@ import ( // @Router /campaigns [post] func Campaigns(context *connectors.DecisionContext) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { - apilogic.HandleCampaigns(w, req, context, requestCampaignsHandler, utils.NewTracker()) + apilogic.HandleCampaigns(w, req, context, requestCampaignsHandler, timetracker.NewTracker()) } } @@ -44,7 +45,7 @@ func toAccountSettings(e *models.Environment) *decision_response.AccountSettings func requestCampaignsHandler(w http.ResponseWriter, handleRequest *handle.Request, err error) { if err != nil { - utils.WriteClientError(w, http.StatusBadRequest, err.Error()) + reswriter.WriteClientError(w, http.StatusBadRequest, err.Error()) return } @@ -68,10 +69,10 @@ func requestCampaignsHandler(w http.ResponseWriter, handleRequest *handle.Reques ma.EmitUnpopulated = true data, err := ma.Marshal(finalMessage) if err != nil { - utils.WriteServerError(w, fmt.Errorf("error when returning final response %v", err)) + reswriter.WriteServerError(w, fmt.Errorf("error when returning final response %v", err)) } - utils.WriteJSONStringOk(w, getSanitizedResponse(string(data))) + reswriter.WriteJSONStringOk(w, getSanitizedResponse(string(data))) } func aggregateFullResponse(response *decision_response.DecisionResponseFull) { diff --git a/pkg/handlers/campaigns_test.go b/pkg/handlers/campaigns_test.go index 2a46da1..a9ebdbd 100644 --- a/pkg/handlers/campaigns_test.go +++ b/pkg/handlers/campaigns_test.go @@ -10,7 +10,9 @@ import ( "strings" "testing" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" + "github.com/flagship-io/decision-api/internal/test" + "github.com/flagship-io/decision-api/internal/udc" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" "github.com/flagship-io/decision-api/pkg/models" @@ -31,7 +33,7 @@ func TestCampaigns(t *testing.T) { Method: "POST", } - decisionContext := utils.CreateMockDecisionContext() + decisionContext := test.CreateMockDecisionContext() Campaigns(decisionContext)(w, req) resp := w.Result() @@ -116,7 +118,7 @@ func TestCampaigns(t *testing.T) { assert.Equal(t, 2, len(decisionResponseSimple.CampaignsVariation)) server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { - rows := []utils.UDCVisitorRow{ + rows := []udc.UDCVisitorRow{ { Segment: "age", Partner: "mixpanel", @@ -130,7 +132,7 @@ func TestCampaigns(t *testing.T) { // Close the server when test finishes defer server.Close() - utils.SetUDCUrl(server.URL) + udc.SetURL(server.URL) // normal mode, send context events true, extras url, _ = url.Parse("/campaigns?mode=normal") w = httptest.NewRecorder() @@ -166,7 +168,7 @@ func TestCampaigns(t *testing.T) { resp = w.Result() data, err = io.ReadAll(resp.Body) assert.Nil(t, err) - respErr := &utils.ClientErrorMessage{} + respErr := &reswriter.ClientErrorMessage{} json.Unmarshal(data, &respErr) assert.Contains(t, respErr.Message, "not found") } diff --git a/pkg/handlers/flags.go b/pkg/handlers/flags.go index 6663828..0e1c8e8 100644 --- a/pkg/handlers/flags.go +++ b/pkg/handlers/flags.go @@ -5,7 +5,8 @@ import ( "github.com/flagship-io/decision-api/internal/apilogic" "github.com/flagship-io/decision-api/internal/handle" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" + "github.com/flagship-io/decision-api/internal/timetracker" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/flagship-proto/decision_response" ) @@ -40,13 +41,13 @@ type FlagInfo struct { // @Router /flags [post] func Flags(context *connectors.DecisionContext) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { - apilogic.HandleCampaigns(w, req, context, requestFlagsHandler, utils.NewTracker()) + apilogic.HandleCampaigns(w, req, context, requestFlagsHandler, timetracker.NewTracker()) } } func requestFlagsHandler(w http.ResponseWriter, handleRequest *handle.Request, err error) { if err != nil { - utils.WriteClientError(w, http.StatusBadRequest, err.Error()) + reswriter.WriteClientError(w, http.StatusBadRequest, err.Error()) return } @@ -77,5 +78,5 @@ func sendFlagsResponse(w http.ResponseWriter, decisionResponse *decision_respons } } - utils.WriteJSONOk(w, flagInfos) + reswriter.WriteJSONOk(w, flagInfos) } diff --git a/pkg/handlers/flags_test.go b/pkg/handlers/flags_test.go index 41ebdbc..8c40e36 100644 --- a/pkg/handlers/flags_test.go +++ b/pkg/handlers/flags_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/test" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" common "github.com/flagship-io/flagship-common" "github.com/stretchr/testify/assert" @@ -26,7 +26,7 @@ func TestFlags(t *testing.T) { Method: "POST", } - Flags(utils.CreateMockDecisionContext())(w, req) + Flags(test.CreateMockDecisionContext())(w, req) resp := w.Result() @@ -44,7 +44,7 @@ func TestFlags(t *testing.T) { w = httptest.NewRecorder() req.Body = io.NopCloser(strings.NewReader(body)) - context := utils.CreateMockDecisionContext() + context := test.CreateMockDecisionContext() context.EnvironmentLoader.(*environment_loaders.MockLoader).MockedEnvironment.Common.Campaigns = []*common.Campaign{} Flags(context)(w, req) diff --git a/pkg/handlers/middlewares/cors_test.go b/pkg/handlers/middlewares/cors_test.go index 922059c..d15aa33 100644 --- a/pkg/handlers/middlewares/cors_test.go +++ b/pkg/handlers/middlewares/cors_test.go @@ -5,8 +5,8 @@ import ( "net/http/httptest" "testing" + "github.com/flagship-io/decision-api/pkg/config" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/config" "github.com/stretchr/testify/assert" ) diff --git a/pkg/handlers/middlewares/recover.go b/pkg/handlers/middlewares/recover.go index 684cdcb..4a3b0a6 100644 --- a/pkg/handlers/middlewares/recover.go +++ b/pkg/handlers/middlewares/recover.go @@ -4,7 +4,7 @@ import ( "fmt" "net/http" - "github.com/flagship-io/decision-api/internal/utils" + "github.com/flagship-io/decision-api/internal/reswriter" ) func Recover(enabled bool, handler func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request) { @@ -12,7 +12,7 @@ func Recover(enabled bool, handler func(http.ResponseWriter, *http.Request)) fun if enabled { defer func() { if err := recover(); err != nil { - utils.WriteServerError(w, fmt.Errorf("unexpected error occurred: %v", err)) + reswriter.WriteServerError(w, fmt.Errorf("unexpected error occurred: %v", err)) } }() } diff --git a/pkg/handlers/middlewares/request_logger.go b/pkg/handlers/middlewares/request_logger.go index 7886c4e..36e373d 100644 --- a/pkg/handlers/middlewares/request_logger.go +++ b/pkg/handlers/middlewares/request_logger.go @@ -4,7 +4,7 @@ import ( "net/http" "time" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" ) func RequestLogger(logger *logger.Logger, handler http.Handler) http.Handler { diff --git a/pkg/handlers/middlewares/request_logger_test.go b/pkg/handlers/middlewares/request_logger_test.go index 17d396f..73293a4 100644 --- a/pkg/handlers/middlewares/request_logger_test.go +++ b/pkg/handlers/middlewares/request_logger_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/stretchr/testify/assert" ) @@ -39,6 +39,5 @@ func TestRequestLogger(t *testing.T) { ret := b.Bytes() assert.Contains(t, string(ret), r.RemoteAddr) assert.Contains(t, string(ret), "200") - assert.Contains(t, string(ret), "100") assert.Contains(t, string(ret), url.Host) } diff --git a/pkg/utils/logger/logger.go b/pkg/logger/logger.go similarity index 100% rename from pkg/utils/logger/logger.go rename to pkg/logger/logger.go diff --git a/pkg/server/server.go b/pkg/server/server.go index fd38619..be23659 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -8,15 +8,15 @@ import ( "time" "github.com/flagship-io/decision-api/docs" + "github.com/flagship-io/decision-api/pkg/config" "github.com/flagship-io/decision-api/pkg/connectors" "github.com/flagship-io/decision-api/pkg/connectors/assignments_managers" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" "github.com/flagship-io/decision-api/pkg/handlers" "github.com/flagship-io/decision-api/pkg/handlers/middlewares" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/flagship-io/decision-api/pkg/models" - "github.com/flagship-io/decision-api/pkg/utils/config" - "github.com/flagship-io/decision-api/pkg/utils/logger" common "github.com/flagship-io/flagship-common" httpSwagger "github.com/swaggo/http-swagger" ) diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go index 721714c..c05a9bd 100644 --- a/pkg/server/server_test.go +++ b/pkg/server/server_test.go @@ -4,11 +4,11 @@ import ( "testing" _ "github.com/flagship-io/decision-api/docs" + "github.com/flagship-io/decision-api/pkg/config" "github.com/flagship-io/decision-api/pkg/connectors/assignments_managers" "github.com/flagship-io/decision-api/pkg/connectors/environment_loaders" "github.com/flagship-io/decision-api/pkg/connectors/hits_processors" - "github.com/flagship-io/decision-api/pkg/utils/config" - "github.com/flagship-io/decision-api/pkg/utils/logger" + "github.com/flagship-io/decision-api/pkg/logger" "github.com/stretchr/testify/assert" )