Skip to content

Commit 7f35ac8

Browse files
authored
chore(CORE-640): Centralize mixpanel code (#85)
* feat: add telemetry package
1 parent 80cdef6 commit 7f35ac8

File tree

6 files changed

+69
-0
lines changed

6 files changed

+69
-0
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,5 @@ require (
118118
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect
119119
sigs.k8s.io/structured-merge-diff/v4 v4.0.3 // indirect
120120
sigs.k8s.io/yaml v1.2.0 // indirect
121+
vizzlo.com/mixpanel v1.2.0 // indirect
121122
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,3 +828,5 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
828828
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
829829
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
830830
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
831+
vizzlo.com/mixpanel v1.2.0 h1:ip0yFM9mIgAKDB0yIkUB2y+C2n+6MXaQ0KQk3DyISjE=
832+
vizzlo.com/mixpanel v1.2.0/go.mod h1:bmKnyCOO+/6SRhjujPG6ARtNJdTRepmA/TH+Nt/1GyU=

telemetry/doc.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// Package telemetry contains helper functions that allow you to instrument applications with telemetry
2+
package telemetry

telemetry/mixpanel.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package telemetry
2+
3+
import (
4+
"log"
5+
"time"
6+
7+
"vizzlo.com/mixpanel"
8+
)
9+
10+
type MixpanelTelemetryTracker struct {
11+
clientId string
12+
client *mixpanel.Client
13+
appName string
14+
version string
15+
}
16+
17+
/*
18+
Helper func for combining two maps
19+
This is used to combine our baseline props sent for all events
20+
with event props given from a caller
21+
*/
22+
func mergeMaps(maps ...map[string]interface{}) map[string]interface{} {
23+
result := make(map[string]interface{})
24+
for _, m := range maps {
25+
for k, v := range m {
26+
result[k] = v
27+
}
28+
}
29+
return result
30+
}
31+
32+
func (m MixpanelTelemetryTracker) TrackEvent(eventContext EventContext, eventProps map[string]interface{}) {
33+
baseProps := map[string]interface{}{
34+
"timestamp": time.Now().Unix(),
35+
"context": m.appName,
36+
"command": eventContext.command,
37+
"version": m.version,
38+
}
39+
40+
// Combine our baseline props that we send for _ALL_ events with the passed in props from the event
41+
trackProps := mergeMaps(baseProps, eventProps)
42+
43+
err := m.client.Track(m.clientId, eventContext.eventName, trackProps)
44+
45+
if err != nil {
46+
log.Fatal(err)
47+
}
48+
}
49+
50+
func NewMixPanelTelemetryClient(clientId string, appName string, version string) MixpanelTelemetryTracker {
51+
mixpanelClient := mixpanel.New(clientId)
52+
return MixpanelTelemetryTracker{client: mixpanelClient, clientId: clientId, appName: appName, version: version}
53+
}

telemetry/mixpanel_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package telemetry

telemetry/telemetry.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package telemetry
2+
3+
type telemetryTracker interface {
4+
TrackEvent()
5+
}
6+
7+
type EventContext struct {
8+
command string
9+
eventName string
10+
}

0 commit comments

Comments
 (0)