@@ -22,7 +22,8 @@ Flag evaluations take place remotely at the connected flagd instance.
22
22
To use in this mode, set the provider to the ` openfeature ` global singleton as shown below (using default values which align with those of ` flagd ` )
23
23
24
24
``` go
25
- openfeature.SetProvider (flagd.NewProvider ())
25
+ provider , err := flagd.NewProvider ()
26
+ openfeature.SetProvider (provider)
26
27
```
27
28
28
29
### In-process resolver
@@ -33,30 +34,12 @@ Flag configurations for evaluation are obtained via gRPC protocol using [sync pr
33
34
Consider following example to create a ` FlagdProvider ` with in-process evaluations,
34
35
35
36
``` go
36
- provider := flagd.NewProvider (
37
- flagd.WithInProcessResolver (),
38
- flagd.WithHost (" localhost" ),
39
- flagd.WithPort (8013 ))
37
+ provider , err := flagd.NewProvider (flagd.WithInProcessResolver ())
40
38
openfeature.SetProvider (provider)
41
39
```
42
40
43
41
In the above example, in-process handlers attempt to connect to a sync service on address ` localhost:8013 ` to obtain [ flag definitions] ( https://github.com/open-feature/schemas/blob/main/json/flagd-definitions.json ) .
44
42
45
- #### Offline mode
46
-
47
- In-process resolvers can also work in an offline mode.
48
- To enable this mode, you should provide a [ valid flag configuration] ( https://flagd.dev/reference/flag-definitions/ ) file with the option ` WithOfflineFilePath ` .
49
-
50
- ``` go
51
- provider := flagd.NewProvider (
52
- flagd.WithInProcessResolver (),
53
- flagd.WithOfflineFilePath (OFFLINE_FLAG_PATH))
54
- openfeature.SetProvider (provider)
55
- ```
56
-
57
- The provider will attempt to detect file changes, but this is a best-effort attempt as file system events differ between operating systems.
58
- This mode is useful for local development, tests and offline applications.
59
-
60
43
#### Custom sync provider
61
44
62
45
In-process resolver can also be configured with a custom sync provider to change how the in-process resolver fetches flags.
@@ -65,28 +48,44 @@ The custom sync provider must implement the [sync.ISync interface](https://githu
65
48
``` go
66
49
var syncProvider sync.ISync = MyAwesomeSyncProvider {}
67
50
68
- provider := flagd.NewProvider (
51
+ provider , err := flagd.NewProvider (
69
52
flagd.WithInProcessResolver (),
70
- flagd.WithCustomSyncProvider (syncProvider))
53
+ flagd.WithCustomSyncProvider (syncProvider),
54
+ )
71
55
openfeature.SetProvider (provider)
72
56
```
73
57
74
58
``` go
75
59
var syncProvider sync.ISync = MyAwesomeSyncProvider {}
76
60
var syncProviderUri string = " myawesome://sync.uri"
77
61
78
- provider := flagd.NewProvider (
62
+ provider , err := flagd.NewProvider (
79
63
flagd.WithInProcessResolver (),
80
- flagd.WithCustomSyncProviderAndUri (syncProvider, syncProviderUri))
64
+ flagd.WithCustomSyncProviderAndUri (syncProvider, syncProviderUri),
65
+ )
81
66
openfeature.SetProvider (provider)
82
67
```
83
68
84
69
> [ !IMPORTANT]
85
70
> Note that the in-process resolver can only use a single flag source.
86
71
> If multiple sources are configured then only one would be selected based on the following order of preference:
87
72
> 1 . Custom sync provider
88
- > 2 . Offline file
89
- > 3 . gRPC
73
+ > 2 . gRPC
74
+
75
+ ### File mode
76
+
77
+ This mode obtains the flag configurations from a local file and performs flag evaluations locally.
78
+
79
+ ``` go
80
+ provider , err := flagd.NewProvider (
81
+ flagd.WithFileResolver (),
82
+ flagd.WithOfflineFilePath (OFFLINE_FLAG_PATH),
83
+ )
84
+ openfeature.SetProvider (provider)
85
+ ```
86
+
87
+ The provider will attempt to detect file changes, but this is a best-effort attempt as file system events differ between operating systems.
88
+ This mode is useful for local development, tests and offline applications.
90
89
91
90
## Configuration options
92
91
@@ -102,7 +101,7 @@ Configuration can be provided as constructor options or as environment variables
102
101
| WithCertificatePath | FLAGD_SERVER_CERT_PATH | string | "" | rpc & in-process |
103
102
| WithLRUCache<br />WithBasicInMemoryCache<br />WithoutCache | FLAGD_CACHE | string (lru, mem, disabled) | lru | rpc |
104
103
| WithEventStreamConnectionMaxAttempts | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc |
105
- | WithOfflineFilePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | string | "" | in-process |
104
+ | WithOfflineFilePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | string | "" | file |
106
105
| WithProviderID | FLAGD_SOURCE_PROVIDER_ID | string | "" | in-process |
107
106
| WithSelector | FLAGD_SOURCE_SELECTOR | string | "" | in-process |
108
107
@@ -115,10 +114,11 @@ In the event that another configuration option is passed to the `flagd.NewProvid
115
114
116
115
e.g. below the values set by ` FromEnv() ` overwrite the value set by ` WithHost("localhost") ` .
117
116
``` go
118
- openfeature. SetProvider ( flagd.NewProvider (
117
+ provider , err := flagd.NewProvider (
119
118
flagd.WithHost (" localhost" ),
120
119
flagd.FromEnv (),
121
- ))
120
+ )
121
+ openfeature.SetProvider (provider)
122
122
```
123
123
124
124
### Caching
@@ -138,10 +138,11 @@ and one custom resolver for `envoy` proxy resolution. For more details, please r
138
138
[ RFC] ( https://github.com/open-feature/flagd/blob/main/docs/reference/specifications/proposal/rfc-grpc-custom-name-resolver.md ) document.
139
139
140
140
``` go
141
- openfeature. SetProvider ( flagd.NewProvider (
141
+ provider , err := flagd.NewProvider (
142
142
flagd.WithInProcessResolver (),
143
143
flagd.WithTargetUri (" envoy://localhost:9211/test.service" ),
144
- ))
144
+ )
145
+ openfeature.SetProvider (provider)
145
146
```
146
147
147
148
### gRPC DialOptions override
@@ -158,11 +159,12 @@ dialOptions := []grpc.DialOption{
158
159
grpc.WithAuthority (...),
159
160
}
160
161
161
- openfeature. SetProvider ( flagd.NewProvider (
162
+ provider , err := flagd.NewProvider (
162
163
flagd.WithInProcessResolver (),
163
164
flagd.WithHost (" example.com/flagdSyncApi" ), flagd.WithPort (443 ),
164
165
flagd.WithGrpcDialOptionsOverride (dialOptions),
165
- ))
166
+ )
167
+ openfeature.SetProvider (provider)
166
168
```
167
169
168
170
## Supported Events
@@ -199,7 +201,7 @@ for many of the popular logger packages.
199
201
var l logr.Logger
200
202
l = integratedlogr.New () // replace with your chosen integrator
201
203
202
- provider := flagd.NewProvider (flagd.WithLogger (l)) // set the provider's logger
204
+ provider , err := flagd.NewProvider (flagd.WithLogger (l)) // set the provider's logger
203
205
```
204
206
205
207
[ logr] ( https://github.com/go-logr/logr ) uses incremental verbosity levels (akin to named levels but in integer form).
0 commit comments