mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
fix: Avoid posthog telemetry noise on stderr (#285)
This commit is contained in:
@@ -1,13 +1,13 @@
|
|||||||
package analytics
|
package analytics
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/posthog/posthog-go"
|
"github.com/posthog/posthog-go"
|
||||||
|
"github.com/safedep/dry/log"
|
||||||
"github.com/safedep/pmg/config"
|
"github.com/safedep/pmg/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -32,24 +32,45 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Telemetry is best-effort. Any failure here must degrade gracefully and
|
||||||
|
// never abort the actual command (e.g. a package manager install).
|
||||||
|
// Generate the distinct ID before creating the client so a UUID failure
|
||||||
|
// does not leak the client's background flush goroutine.
|
||||||
|
randomUUID, err := uuid.NewRandom()
|
||||||
|
if err != nil {
|
||||||
|
log.Warnf("failed to generate telemetry id, disabling telemetry: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
client, err := posthog.NewWithConfig(postHogApiKey, posthog.Config{
|
client, err := posthog.NewWithConfig(postHogApiKey, posthog.Config{
|
||||||
Endpoint: postHogEventEndpoint,
|
Endpoint: postHogEventEndpoint,
|
||||||
Interval: analyticsFlushInterval,
|
Interval: analyticsFlushInterval,
|
||||||
|
Logger: quietPosthogLogger{},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to initialize posthog client: %v", err)
|
log.Warnf("failed to initialize posthog client, disabling telemetry: %v", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
globalPosthogClient = client
|
globalPosthogClient = client
|
||||||
|
|
||||||
randomUUID, err := uuid.NewRandom()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Failed to generate random UUID: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
globalDistinctId = randomUUID.String()
|
globalDistinctId = randomUUID.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// quietPosthogLogger routes posthog-go's background logs through the dry logger
|
||||||
|
// at debug level. Left unset, posthog defaults to a logger that writes INFO and
|
||||||
|
// ERROR lines to os.Stderr from its flush goroutine, which surfaces as noisy
|
||||||
|
// (and sometimes "bad file descriptor") output during package manager
|
||||||
|
// execution. Telemetry is best-effort, so we keep it quiet by default while
|
||||||
|
// still preserving the logs at debug verbosity.
|
||||||
|
type quietPosthogLogger struct{}
|
||||||
|
|
||||||
|
var _ posthog.Logger = quietPosthogLogger{}
|
||||||
|
|
||||||
|
func (quietPosthogLogger) Debugf(format string, args ...any) { log.Debugf(format, args...) }
|
||||||
|
func (quietPosthogLogger) Logf(format string, args ...any) { log.Debugf(format, args...) }
|
||||||
|
func (quietPosthogLogger) Warnf(format string, args ...any) { log.Debugf(format, args...) }
|
||||||
|
func (quietPosthogLogger) Errorf(format string, args ...any) { log.Debugf(format, args...) }
|
||||||
|
|
||||||
func isTelemetryDisabled() bool {
|
func isTelemetryDisabled() bool {
|
||||||
if config.Get().Config.DisableTelemetry {
|
if config.Get().Config.DisableTelemetry {
|
||||||
return true
|
return true
|
||||||
|
|||||||
Reference in New Issue
Block a user