Selaa lähdekoodia

Merge pull request #591 from mautrix/segment_user_id

Allow setting segment_user_id in config
Scott Weber 2 vuotta sitten
vanhempi
sitoutus
ff6531a5e5
5 muutettua tiedostoa jossa 17 lisäystä ja 2 poistoa
  1. 2 1
      config/config.go
  2. 1 0
      config/upgrade.go
  3. 2 0
      example-config.yaml
  4. 4 0
      main.go
  5. 8 1
      segment.go

+ 2 - 1
config/config.go

@@ -24,7 +24,8 @@ import (
 type Config struct {
 	*bridgeconfig.BaseConfig `yaml:",inline"`
 
-	SegmentKey string `yaml:"segment_key"`
+	SegmentKey    string `yaml:"segment_key"`
+	SegmentUserID string `yaml:"segment_user_id"`
 
 	Metrics struct {
 		Enabled bool   `yaml:"enabled"`

+ 1 - 0
config/upgrade.go

@@ -28,6 +28,7 @@ func DoUpgrade(helper *up.Helper) {
 	bridgeconfig.Upgrader.DoUpgrade(helper)
 
 	helper.Copy(up.Str|up.Null, "segment_key")
+	helper.Copy(up.Str|up.Null, "segment_user_id")
 
 	helper.Copy(up.Bool, "metrics", "enabled")
 	helper.Copy(up.Str, "metrics", "listen")

+ 2 - 0
example-config.yaml

@@ -72,6 +72,8 @@ appservice:
 
 # Segment API key to track some events, like provisioning API login and encryption errors.
 segment_key: null
+# Optional user_id to use when sending Segment events. If null, defaults to using mxID.
+segment_user_id: null
 
 # Prometheus config.
 metrics:

+ 4 - 0
main.go

@@ -93,8 +93,12 @@ func (br *WABridge) Init() {
 
 	Segment.log = br.Log.Sub("Segment")
 	Segment.key = br.Config.SegmentKey
+	Segment.userID = br.Config.SegmentUserID
 	if Segment.IsEnabled() {
 		Segment.log.Infoln("Segment metrics are enabled")
+		if Segment.userID != "" {
+			Segment.log.Infoln("Overriding Segment user_id with %v", Segment.userID)
+		}
 	}
 
 	br.DB = database.New(br.Bridge.DB, br.Log.Sub("Database"))

+ 8 - 1
segment.go

@@ -30,6 +30,7 @@ const SegmentURL = "https://api.segment.io/v1/track"
 
 type SegmentClient struct {
 	key    string
+	userID string
 	log    log.Logger
 	client http.Client
 }
@@ -38,8 +39,14 @@ var Segment SegmentClient
 
 func (sc *SegmentClient) trackSync(userID id.UserID, event string, properties map[string]interface{}) error {
 	var buf bytes.Buffer
+	var segmentUserID string
+	if Segment.userID != "" {
+		segmentUserID = Segment.userID
+	} else {
+		segmentUserID = userID.String()
+	}
 	err := json.NewEncoder(&buf).Encode(map[string]interface{}{
-		"userId":     userID,
+		"userId":     segmentUserID,
 		"event":      event,
 		"properties": properties,
 	})