...
1 package ldcomponents
2
3 import (
4 "time"
5
6 "github.com/launchdarkly/go-sdk-common/v3/ldvalue"
7 "github.com/launchdarkly/go-server-sdk/v6/internal/datasource"
8 "github.com/launchdarkly/go-server-sdk/v6/internal/endpoints"
9 "github.com/launchdarkly/go-server-sdk/v6/subsystems"
10 )
11
12
13 const DefaultStreamingBaseURI = endpoints.DefaultStreamingBaseURI
14
15
16 const DefaultInitialReconnectDelay = time.Second
17
18
19
20
21 type StreamingDataSourceBuilder struct {
22 baseURI string
23 initialReconnectDelay time.Duration
24 }
25
26
27
28
29
30
31
32
33
34
35
36 func StreamingDataSource() *StreamingDataSourceBuilder {
37 return &StreamingDataSourceBuilder{
38 initialReconnectDelay: DefaultInitialReconnectDelay,
39 }
40 }
41
42
43
44
45
46
47
48
49 func (b *StreamingDataSourceBuilder) InitialReconnectDelay(
50 initialReconnectDelay time.Duration,
51 ) *StreamingDataSourceBuilder {
52 if initialReconnectDelay <= 0 {
53 b.initialReconnectDelay = DefaultInitialReconnectDelay
54 } else {
55 b.initialReconnectDelay = initialReconnectDelay
56 }
57 return b
58 }
59
60
61 func (b *StreamingDataSourceBuilder) Build(context subsystems.ClientContext) (subsystems.DataSource, error) {
62 configuredBaseURI := endpoints.SelectBaseURI(
63 context.GetServiceEndpoints(),
64 endpoints.StreamingService,
65 b.baseURI,
66 context.GetLogging().Loggers,
67 )
68
69 return datasource.NewStreamProcessor(
70 context,
71 context.GetDataSourceUpdateSink(),
72 configuredBaseURI,
73 b.initialReconnectDelay,
74 ), nil
75 }
76
77
78 func (b *StreamingDataSourceBuilder) DescribeConfiguration(context subsystems.ClientContext) ldvalue.Value {
79 return ldvalue.ObjectBuild().
80 SetBool("streamingDisabled", false).
81 SetBool("customStreamURI",
82 endpoints.IsCustom(context.GetServiceEndpoints(), endpoints.StreamingService, b.baseURI)).
83 Set("reconnectTimeMillis", durationToMillisValue(b.initialReconnectDelay)).
84 SetBool("usingRelayDaemon", false).
85 Build()
86 }
87
View as plain text