Skip to content

Commit

Permalink
chore(CORE-640): Centralize mixpanel code (#85)
Browse files Browse the repository at this point in the history
* feat: add telemetry package
  • Loading branch information
MoonMoon1919 authored Mar 29, 2023
1 parent 80cdef6 commit 7f35ac8
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 0 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,5 @@ require (
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.0.3 // indirect
sigs.k8s.io/yaml v1.2.0 // indirect
vizzlo.com/mixpanel v1.2.0 // indirect
)
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -828,3 +828,5 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
vizzlo.com/mixpanel v1.2.0 h1:ip0yFM9mIgAKDB0yIkUB2y+C2n+6MXaQ0KQk3DyISjE=
vizzlo.com/mixpanel v1.2.0/go.mod h1:bmKnyCOO+/6SRhjujPG6ARtNJdTRepmA/TH+Nt/1GyU=
2 changes: 2 additions & 0 deletions telemetry/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Package telemetry contains helper functions that allow you to instrument applications with telemetry
package telemetry
53 changes: 53 additions & 0 deletions telemetry/mixpanel.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package telemetry

import (
"log"
"time"

"vizzlo.com/mixpanel"
)

type MixpanelTelemetryTracker struct {
clientId string
client *mixpanel.Client
appName string
version string
}

/*
Helper func for combining two maps
This is used to combine our baseline props sent for all events
with event props given from a caller
*/
func mergeMaps(maps ...map[string]interface{}) map[string]interface{} {
result := make(map[string]interface{})
for _, m := range maps {
for k, v := range m {
result[k] = v
}
}
return result
}

func (m MixpanelTelemetryTracker) TrackEvent(eventContext EventContext, eventProps map[string]interface{}) {
baseProps := map[string]interface{}{
"timestamp": time.Now().Unix(),
"context": m.appName,
"command": eventContext.command,
"version": m.version,
}

// Combine our baseline props that we send for _ALL_ events with the passed in props from the event
trackProps := mergeMaps(baseProps, eventProps)

err := m.client.Track(m.clientId, eventContext.eventName, trackProps)

if err != nil {
log.Fatal(err)
}
}

func NewMixPanelTelemetryClient(clientId string, appName string, version string) MixpanelTelemetryTracker {
mixpanelClient := mixpanel.New(clientId)
return MixpanelTelemetryTracker{client: mixpanelClient, clientId: clientId, appName: appName, version: version}
}
1 change: 1 addition & 0 deletions telemetry/mixpanel_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package telemetry
10 changes: 10 additions & 0 deletions telemetry/telemetry.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package telemetry

type telemetryTracker interface {
TrackEvent()
}

type EventContext struct {
command string
eventName string
}

0 comments on commit 7f35ac8

Please sign in to comment.