Skip to content

Commit 400a61e

Browse files
authored
fix: add usage tracking to config method (#307)
1 parent b175f8c commit 400a61e

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

ldai/client.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ func (c *Client) Config(
7070
defaultValue Config,
7171
variables map[string]interface{},
7272
) (Config, *Tracker) {
73+
_ = c.sdk.TrackMetric("$ld:ai:config:function:single", context, 1, ldvalue.String(key))
74+
7375
result, _ := c.sdk.JSONVariation(key, context, defaultValue.AsLdValue())
7476

7577
// The spec requires the config to at least be an object (although all properties are optional, so it may be an

ldai/client_test.go

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,21 @@ import (
1717
)
1818

1919
type mockServerSDK struct {
20-
log *ldlogtest.MockLog
21-
json []byte
22-
err error
20+
log *ldlogtest.MockLog
21+
json []byte
22+
err error
23+
events []mockEvent
24+
}
25+
26+
type mockEvent struct {
27+
eventName string
28+
context ldcontext.Context
29+
metricValue float64
30+
data ldvalue.Value
2331
}
2432

2533
func newMockSDK(json []byte, err error) *mockServerSDK {
26-
return &mockServerSDK{json: json, err: err, log: ldlogtest.NewMockLog()}
34+
return &mockServerSDK{json: json, err: err, log: ldlogtest.NewMockLog(), events: []mockEvent{}}
2735
}
2836

2937
func (m *mockServerSDK) JSONVariation(
@@ -44,6 +52,12 @@ func (m *mockServerSDK) Loggers() interfaces.LDLoggers {
4452
}
4553

4654
func (m *mockServerSDK) TrackMetric(eventName string, context ldcontext.Context, metricValue float64, data ldvalue.Value) error {
55+
m.events = append(m.events, mockEvent{
56+
eventName: eventName,
57+
context: context,
58+
metricValue: metricValue,
59+
data: data,
60+
})
4761
return nil
4862
}
4963

@@ -288,6 +302,33 @@ func TestCanSetDefaultConfigFields(t *testing.T) {
288302
assert.Equal(t, datamodel.System, msg[1].Role)
289303
}
290304

305+
func TestConfigMethodTracking(t *testing.T) {
306+
mockSDK := newMockSDK(nil, nil)
307+
client, err := NewClient(mockSDK)
308+
require.NoError(t, err)
309+
require.NotNil(t, client)
310+
311+
defaultConfig := NewConfig().WithEnabled(false).Build()
312+
context := ldcontext.New("user-key")
313+
configKey := "test-config-key"
314+
315+
config, tracker := client.Config(configKey, context, defaultConfig, nil)
316+
317+
require.NotNil(t, config)
318+
require.NotNil(t, tracker)
319+
320+
expectedEvents := []mockEvent{
321+
{
322+
eventName: "$ld:ai:config:function:single",
323+
context: context,
324+
metricValue: 1,
325+
data: ldvalue.String(configKey),
326+
},
327+
}
328+
329+
assert.ElementsMatch(t, expectedEvents, mockSDK.events)
330+
}
331+
291332
func TestCanSetModelParameters(t *testing.T) {
292333
client, err := NewClient(newMockSDK(nil, nil))
293334
require.NoError(t, err)

0 commit comments

Comments
 (0)