diff --git a/api4/license.go b/api4/license.go index fa83ddf61e..4bf6ed741c 100644 --- a/api4/license.go +++ b/api4/license.go @@ -5,6 +5,7 @@ package api4 import ( "bytes" + b64 "encoding/base64" "encoding/json" "errors" "fmt" @@ -322,6 +323,8 @@ func getOrCreateTrueUpReviewStatus(c *Context) (*model.TrueUpReviewStatus, bool) } } + telemetryService := c.App.Srv().GetTelemetryService() + status.TelemetryEnabled = telemetryService.TelemetryEnabled() return status, true } @@ -361,9 +364,10 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) { } // Do not send true-up review data if the user has already requested one for the quarter. - if !status.Completed { + // And only send a true-up review via as a one-time telemetry request if telemetry is disabled. + telemetryService := c.App.Srv().GetTelemetryService() + if !status.Completed && !telemetryService.TelemetryEnabled() { // Send telemetry data - telemetryService := c.App.Srv().GetTelemetryService() telemetryService.SendTelemetry(model.TrueUpReviewTelemetryName, profileMap) // Update the review status to reflect the completion. @@ -371,7 +375,14 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) { c.App.Srv().Store().TrueUpReview().Update(status) } - w.Write(profileMapJson) + // Encode to string rather than byte[] otherwise json.Marshal will encode it further. + encodedData := b64.StdEncoding.EncodeToString(profileMapJson) + responseContent := struct { + Content string `json:"content"` + }{Content: encodedData} + response, _ := json.Marshal(responseContent) + + w.Write(response) } func trueUpReviewStatus(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/model/true_up_review_profile.go b/model/true_up_review_profile.go index 74b62fe2e1..250032dcf2 100644 --- a/model/true_up_review_profile.go +++ b/model/true_up_review_profile.go @@ -37,8 +37,9 @@ func (t *TrueUpReviewPlugins) ToMap() map[string]interface{} { } type TrueUpReviewStatus struct { - Completed bool `json:"complete"` - DueDate int64 `json:"due_date"` + Completed bool `json:"complete"` + DueDate int64 `json:"due_date"` + TelemetryEnabled bool `json:"telemetry_enabled"` } func (t *TrueUpReviewStatus) ToSlice() []interface{} { diff --git a/services/telemetry/telemetry.go b/services/telemetry/telemetry.go index ec88b868c0..5f319b03a5 100644 --- a/services/telemetry/telemetry.go +++ b/services/telemetry/telemetry.go @@ -149,13 +149,13 @@ func (ts *TelemetryService) getRudderConfig() RudderConfig { } } -func (ts *TelemetryService) telemetryEnabled() bool { +func (ts *TelemetryService) TelemetryEnabled() bool { return *ts.srv.Config().LogSettings.EnableDiagnostics && ts.srv.IsLeader() } func (ts *TelemetryService) sendDailyTelemetry(override bool) { config := ts.getRudderConfig() - if ts.telemetryEnabled() && ((config.DataplaneURL != "" && config.RudderKey != "") || override) { + if ts.TelemetryEnabled() && ((config.DataplaneURL != "" && config.RudderKey != "") || override) { ts.initRudder(config.DataplaneURL, config.RudderKey) ts.trackActivity() ts.trackConfig()