@@ -6,14 +6,17 @@ import (
66 "fmt"
77 "strconv"
88 "sync"
9+ "time"
910
1011 "github.com/microsoft/ApplicationInsights-Go/appinsights"
1112 "github.com/pkg/errors"
1213 "go.uber.org/zap/zapcore"
1314)
1415
1516type traceEncoder interface {
17+ zapcore.ObjectEncoder
1618 encode (* appinsights.TraceTelemetry ) ([]byte , error )
19+ setTraceTelemetry (* appinsights.TraceTelemetry )
1720}
1821
1922type traceDecoder interface {
@@ -31,12 +34,128 @@ type traceDecoder interface {
3134// Encoders and Decoders also need to be matched up 1:1, as the first thing an Encoder sends (once!) is type data, and
3235// it is an error for a Decoder to receive the same type data from its stream more than once.
3336type gobber struct {
34- encoder * gob.Encoder
35- decoder * gob.Decoder
36- buffer * bytes.Buffer
37+ encoder * gob.Encoder
38+ decoder * gob.Decoder
39+ buffer * bytes.Buffer
40+ traceTelemetry * appinsights.TraceTelemetry
41+ keyPrefix string
3742 sync.Mutex
3843}
3944
45+ func (g * gobber ) AddObject (key string , marshaler zapcore.ObjectMarshaler ) error {
46+ curPrefix := g .keyPrefix
47+ if len (g .keyPrefix ) == 0 {
48+ g .keyPrefix = key
49+ } else {
50+ g .keyPrefix = g .keyPrefix + "_" + key
51+ }
52+ marshaler .MarshalLogObject (g )
53+ g .keyPrefix = curPrefix
54+ return nil
55+ }
56+
57+ func (g * gobber ) AddString (key , value string ) {
58+ g .traceTelemetry .Properties [g .keyPrefix + "_" + key ] = value
59+ }
60+
61+ func (g * gobber ) AddBool (key string , value bool ) {
62+ g .traceTelemetry .Properties [g .keyPrefix + "_" + key ] = strconv .FormatBool (value )
63+ }
64+
65+ func (g * gobber ) AddInt (key string , value int ) {
66+ g .traceTelemetry .Properties [g .keyPrefix + "_" + key ] = strconv .Itoa (value )
67+ }
68+
69+ func (g * gobber ) AddInt64 (key string , value int64 ) {
70+ g .traceTelemetry .Properties [g .keyPrefix + "_" + key ] = strconv .FormatInt (value , 10 )
71+ }
72+
73+ func (g * gobber ) AddUint16 (key string , value uint16 ) {
74+ g .traceTelemetry .Properties [g .keyPrefix + "_" + key ] = strconv .FormatUint (uint64 (value ), 10 )
75+ }
76+
77+ func (g * gobber ) AddArray (_ string , _ zapcore.ArrayMarshaler ) error {
78+ // TODO to be implemented
79+ return nil
80+ }
81+
82+ func (g * gobber ) AddBinary (_ string , _ []byte ) {
83+ // TODO to be implemented
84+ }
85+
86+ func (g * gobber ) AddByteString (_ string , _ []byte ) {
87+ // TODO to be implemented
88+ }
89+
90+ func (g * gobber ) AddComplex128 (_ string , _ complex128 ) {
91+ // TODO to be implemented
92+ }
93+
94+ func (g * gobber ) AddComplex64 (_ string , _ complex64 ) {
95+ // TODO to be implemented
96+ }
97+
98+ func (g * gobber ) AddDuration (_ string , _ time.Duration ) {
99+ // TODO to be implemented
100+ }
101+
102+ func (g * gobber ) AddFloat64 (_ string , _ float64 ) {
103+ // TODO to be implemented
104+ }
105+
106+ func (g * gobber ) AddFloat32 (_ string , _ float32 ) {
107+ // TODO to be implemented
108+ }
109+
110+ func (g * gobber ) AddInt32 (_ string , _ int32 ) {
111+ // TODO to be implemented
112+ }
113+
114+ func (g * gobber ) AddInt16 (_ string , _ int16 ) {
115+ // TODO to be implemented
116+ }
117+
118+ func (g * gobber ) AddInt8 (_ string , _ int8 ) {
119+ // TODO to be implemented
120+ }
121+
122+ func (g * gobber ) AddTime (_ string , _ time.Time ) {
123+ // TODO to be implemented
124+ }
125+
126+ func (g * gobber ) AddUint (_ string , _ uint ) {
127+ // TODO to be implemented
128+ }
129+
130+ func (g * gobber ) AddUint64 (_ string , _ uint64 ) {
131+ // TODO to be implemented
132+ }
133+
134+ func (g * gobber ) AddUint32 (_ string , _ uint32 ) {
135+ // TODO to be implemented
136+ }
137+
138+ func (g * gobber ) AddUint8 (_ string , _ uint8 ) {
139+ // TODO to be implemented
140+ }
141+
142+ func (g * gobber ) AddUintptr (_ string , _ uintptr ) {
143+ // TODO to be implemented
144+ }
145+
146+ func (g * gobber ) AddReflected (_ string , _ interface {}) error {
147+ // TODO to be implemented
148+ return nil
149+ }
150+
151+ func (g * gobber ) OpenNamespace (_ string ) {
152+ // TODO to be implemented
153+ }
154+
155+ func (g * gobber ) setTraceTelemetry (traceTelemetry * appinsights.TraceTelemetry ) {
156+ g .traceTelemetry = traceTelemetry
157+ }
158+
40159// newTraceEncoder creates a gobber that can only encode.
41160func newTraceEncoder () traceEncoder {
42161 buf := & bytes.Buffer {}
0 commit comments