mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package telemetry
|
|
|
|
import (
|
|
"github.com/Infisical/infisical-merge/packages/util"
|
|
"github.com/denisbrodbeck/machineid"
|
|
"github.com/posthog/posthog-go"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
var POSTHOG_API_KEY_FOR_CLI string
|
|
|
|
type Telemetry struct {
|
|
isEnabled bool
|
|
posthogClient posthog.Client
|
|
}
|
|
|
|
type NoOpLogger struct{}
|
|
|
|
func (NoOpLogger) Logf(format string, args ...interface{}) {
|
|
log.Debug().Msgf(format, args...)
|
|
}
|
|
|
|
func (NoOpLogger) Errorf(format string, args ...interface{}) {
|
|
log.Debug().Msgf(format, args...)
|
|
}
|
|
|
|
func NewTelemetry(telemetryIsEnabled bool) *Telemetry {
|
|
if POSTHOG_API_KEY_FOR_CLI != "" {
|
|
client, _ := posthog.NewWithConfig(
|
|
POSTHOG_API_KEY_FOR_CLI,
|
|
posthog.Config{
|
|
Logger: NoOpLogger{},
|
|
},
|
|
)
|
|
|
|
return &Telemetry{isEnabled: telemetryIsEnabled, posthogClient: client}
|
|
} else {
|
|
return &Telemetry{isEnabled: false}
|
|
}
|
|
}
|
|
|
|
func (t *Telemetry) CaptureEvent(eventName string, properties posthog.Properties) {
|
|
userIdentity, err := t.GetDistinctId()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if t.isEnabled {
|
|
t.posthogClient.Enqueue(posthog.Capture{
|
|
DistinctId: userIdentity,
|
|
Event: eventName,
|
|
Properties: properties,
|
|
})
|
|
|
|
defer t.posthogClient.Close()
|
|
}
|
|
}
|
|
|
|
func (t *Telemetry) GetDistinctId() (string, error) {
|
|
var distinctId string
|
|
var outputErr error
|
|
|
|
machineId, err := machineid.ID()
|
|
if err != nil {
|
|
outputErr = err
|
|
}
|
|
|
|
infisicalConfig, err := util.GetConfigFile()
|
|
if err != nil {
|
|
outputErr = err
|
|
}
|
|
|
|
if infisicalConfig.LoggedInUserEmail != "" {
|
|
distinctId = infisicalConfig.LoggedInUserEmail
|
|
} else if machineId != "" {
|
|
distinctId = "anonymous_cli_" + machineId
|
|
} else {
|
|
distinctId = ""
|
|
}
|
|
|
|
return distinctId, outputErr
|
|
}
|