-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(CORE-640): Centralize mixpanel code (#85)
* feat: add telemetry package
- Loading branch information
1 parent
80cdef6
commit 7f35ac8
Showing
6 changed files
with
69 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
package telemetry |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |