pkg/telemetry/telemetry.go (58 lines of code) (raw):

package telemetry import ( "encoding/json" "github.com/microsoft/ApplicationInsights-Go/appinsights" "github.com/microsoft/ApplicationInsights-Go/appinsights/contracts" ) type Level int const ( Verbose Level = iota Info Warn Error Critical ) type Client interface { Trace(level Level, msg string) Close() } type NullClient struct{} func NewNullClient() Client { return NullClient{} } func (NullClient) Trace(Level, string) {} func (NullClient) Close() {} type AppInsightClient struct { appinsights.TelemetryClient subscriptionId string installId string sessionId string } func NewAppInsight(subscriptionId string, installId string, sessionid string) Client { // The instrument key of a MS managed application insights const instrumentKey = "1bfe1d29-b42e-49b5-9d51-77514f85b37b" return AppInsightClient{ TelemetryClient: appinsights.NewTelemetryClient(instrumentKey), subscriptionId: subscriptionId, installId: installId, sessionId: sessionid, } } type ApplicationInsightMessage struct { SubscriptionId string `json:"subscription_id"` InstallationId string `json:"installation_id"` SessionId string `json:"session_id"` Payload string `json:"payload"` } func (c AppInsightClient) Trace(level Level, payload string) { msg := ApplicationInsightMessage{ SubscriptionId: c.subscriptionId, InstallationId: c.installId, SessionId: c.sessionId, Payload: payload, } b, _ := json.Marshal(msg) c.TrackTrace(string(b), contracts.SeverityLevel(level)) } func (c AppInsightClient) Close() { <-c.Channel().Close() }