diff --git a/CHANGELOG.md b/CHANGELOG.md index 73fde24614..40a7411c87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.6.2](https://github.com/rudderlabs/rudder-server/compare/v1.6.1...v1.6.2) (2023-02-28) + + +### Bug Fixes + +* payload limiter gauge reports invalid value type ([#3048](https://github.com/rudderlabs/rudder-server/issues/3048)) ([5605abc](https://github.com/rudderlabs/rudder-server/commit/5605abcc1bbfe43c0a9baaae9ebf66d616664897)) +* user/anonymous id read at gateway ([#3051](https://github.com/rudderlabs/rudder-server/issues/3051)) ([b87cc25](https://github.com/rudderlabs/rudder-server/commit/b87cc25ad79c7b70d3a102f949b99f71c9f58c37)) + ## [1.6.1](https://github.com/rudderlabs/rudder-server/compare/v1.6.0...v1.6.1) (2023-02-28) diff --git a/gateway/gateway.go b/gateway/gateway.go index 7cdaea46e8..e101fa97f7 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -567,8 +567,8 @@ func (gateway *HandleT) getJobDataFromRequest(req *webRequestT) (jobData *jobFro return } - anonIDFromReq, _ := toSet["anonymousId"].(string) - userIDFromReq, _ := toSet["userId"].(string) + anonIDFromReq := strings.TrimSpace(misc.GetStringifiedData(toSet["anonymousId"])) + userIDFromReq := strings.TrimSpace(misc.GetStringifiedData(toSet["userId"])) if isNonIdentifiable(anonIDFromReq, userIDFromReq) { err = errors.New(response.NonIdentifiableRequest) return diff --git a/gateway/gateway_test.go b/gateway/gateway_test.go index afdbf274f6..f03cea7198 100644 --- a/gateway/gateway_test.go +++ b/gateway/gateway_test.go @@ -941,6 +941,51 @@ var _ = Describe("Gateway", func() { Expect(err).To(Equal(errors.New(response.NonIdentifiableRequest))) Expect(jobData.job).To(BeNil()) }) + + It("accepts events with non-string type anonymousId and/or userId", func() { + // map type usreId + payloadMap := map[string]interface{}{ + "batch": []interface{}{ + map[string]interface{}{ + "type": "track", + "userId": map[string]interface{}{"id": 456}, + }, + }, + } + payload, err := json.Marshal(payloadMap) + Expect(err).To(BeNil()) + req := &webRequestT{ + reqType: "batch", + writeKey: WriteKeyEnabled, + done: make(chan<- string), + userIDHeader: userIDHeader, + requestPayload: payload, + } + _, err = gateway.getJobDataFromRequest(req) + Expect(err).To(BeNil()) + + // int type anonymousId + payloadMap = map[string]interface{}{ + "batch": []interface{}{ + map[string]interface{}{ + "type": "track", + "userId": 456, + }, + }, + } + payload, err = json.Marshal(payloadMap) + Expect(err).To(BeNil()) + Expect(err).To(BeNil()) + req = &webRequestT{ + reqType: "batch", + writeKey: WriteKeyEnabled, + done: make(chan<- string), + userIDHeader: userIDHeader, + requestPayload: payload, + } + _, err = gateway.getJobDataFromRequest(req) + Expect(err).To(BeNil()) + }) }) }) diff --git a/utils/payload/limiter_setup.go b/utils/payload/limiter_setup.go index 6f4a5e16ae..520185e412 100644 --- a/utils/payload/limiter_setup.go +++ b/utils/payload/limiter_setup.go @@ -54,14 +54,25 @@ func SetupAdaptiveLimiter(ctx context.Context, g *errgroup.Group) AdaptiveLimite case <-time.After(statsFrequency): limiterStats := limiter.Stats() - stats.Default.NewStat("adaptive_payload_limiter_state", stats.GaugeType).Gauge(limiterStats.State) - stats.Default.NewStat("adaptive_payload_limiter_threshold_factor", stats.GaugeType).Gauge(limiterStats.ThresholdFactor) + stats.Default.NewStat( + "adaptive_payload_limiter_state", + stats.GaugeType, + ).Gauge(int(limiterStats.State)) + stats.Default.NewStat( + "adaptive_payload_limiter_threshold_factor", + stats.GaugeType, + ).Gauge(limiterStats.ThresholdFactor) if memStats, err := mem.Get(); err == nil { - stats.Default.NewStat("mem_total_bytes", stats.GaugeType).Gauge(memStats.Total) - stats.Default.NewStat("mem_available_bytes", stats.GaugeType).Gauge(memStats.Available) - stats.Default.NewStat("mem_available_percent", stats.GaugeType).Gauge(memStats.AvailablePercent) - stats.Default.NewStat("mem_used_bytes", stats.GaugeType).Gauge(memStats.Used) - stats.Default.NewStat("mem_used_percent", stats.GaugeType).Gauge(memStats.UsedPercent) + stats.Default.NewStat("mem_total_bytes", stats.GaugeType). + Gauge(memStats.Total) + stats.Default.NewStat("mem_available_bytes", stats.GaugeType). + Gauge(memStats.Available) + stats.Default.NewStat("mem_available_percent", stats.GaugeType). + Gauge(memStats.AvailablePercent) + stats.Default.NewStat("mem_used_bytes", stats.GaugeType). + Gauge(memStats.Used) + stats.Default.NewStat("mem_used_percent", stats.GaugeType). + Gauge(memStats.UsedPercent) } } }