Skip to content

Commit 6b373cb

Browse files
Kavindu-Dodantoddbaertthisthat
authored
feat: Eventing support for flagd provider (#317)
Signed-off-by: Kavindu Dodanduwa <[email protected]> Signed-off-by: Kavindu Dodanduwa <[email protected]> Co-authored-by: Todd Baert <[email protected]> Co-authored-by: Giovanni Liva <[email protected]>
1 parent 818fae8 commit 6b373cb

24 files changed

+1876
-2388
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ test:
1212
go list -f '{{.Dir}}/...' -m | xargs -I{} go test -v {}
1313

1414
lint:
15-
go install -v github.com/golangci/golangci-lint/cmd/golangci-lint@latest
15+
go install -v github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.1
1616
$(foreach module, $(ALL_GO_MOD_DIRS), ${GOPATH}/bin/golangci-lint run --deadline=3m --timeout=3m $(module)/...;)
1717

1818
new-provider:

providers/flagd/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
.PHONY: mockgen
22
mockgen:
3-
mockgen -source=pkg/service/iservice.go -destination=internal/mock/service_mock.go -package=mock
3+
mockgen -source=pkg/iservice.go -destination=internal/mock/service_mock.go -package=mock

providers/flagd/README.md

+30-10
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ func main() {
4444
### Using flagd.FromEnv()
4545
By default the flagd provider will read non-empty environment variables to set its own configuration with the lowest priority. Use the `flagd.FromEnv()` option as an argument for the `flagd.NewProvider()` method to give environment variables a higher priority.
4646

47-
| Option name | Environment variable name | Type | Options | Default |
48-
|-----------------------|--------------------------------|-----------|--------------|-----------|
49-
| host | FLAGD_HOST | string | | localhost |
50-
| port | FLAGD_PORT | number | | 8013 |
51-
| tls | FLAGD_TLS | boolean | | false |
52-
| socketPath | FLAGD_SOCKET_PATH | string | | |
53-
| certPath | FLAGD_SERVER_CERT_PATH | string | | |
54-
| cache | FLAGD_CACHE | string | lru,disabled | lru |
55-
| maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | | 1000 |
56-
| maxEventStreamRetries | FLAGD_MAX_EVENT_STREAM_RETRIES | int | | 5 |
47+
| Option name | Environment variable name | Type | Options | Default |
48+
|-----------------------|--------------------------------|---------|--------------------|-----------|
49+
| host | FLAGD_HOST | string | | localhost |
50+
| port | FLAGD_PORT | number | | 8013 |
51+
| tls | FLAGD_TLS | boolean | true, false | false |
52+
| socketPath | FLAGD_SOCKET_PATH | string | | |
53+
| certPath | FLAGD_SERVER_CERT_PATH | string | | |
54+
| cache | FLAGD_CACHE | string | lru, mem, disabled | lru |
55+
| maxCacheSize | FLAGD_MAX_CACHE_SIZE | int | | 1000 |
56+
| maxEventStreamRetries | FLAGD_MAX_EVENT_STREAM_RETRIES | int | | 5 |
5757

5858
In the event that another configuration option is passed to the `flagd.NewProvider()` method, such as `flagd.WithPort(8013)` then priority is decided by the order in which the options are passed to the constructor from lowest to highest priority.
5959

@@ -97,6 +97,26 @@ flagd.WithBasicInMemoryCache()
9797
flagd.WithoutCache()
9898
```
9999

100+
## Supported Events
101+
102+
The flagd provider emits `PROVIDER_READY`, `PROVIDER_ERROR` and `PROVIDER_CONFIGURATION_CHANGED` events.
103+
104+
| SDK event | Originating action in flagd |
105+
|----------------------------------|---------------------------------------------------------------------------------|
106+
| `PROVIDER_READY` | The streaming connection with flagd has been established. |
107+
| `PROVIDER_ERROR` | The streaming connection with flagd has been broken. |
108+
| `PROVIDER_CONFIGURATION_CHANGED` | A flag configuration (default value, targeting rule, etc) in flagd has changed. |
109+
110+
For general information on events, see the [official documentation](https://openfeature.dev/docs/reference/concepts/events).
111+
112+
## Flag Metadata
113+
114+
The flagd provider currently support following flag evaluation metadata,
115+
116+
| Field | Type | Value |
117+
|---------|--------|---------------------------------------------------|
118+
| `scope` | string | "selector" set for the associated source in flagd |
119+
100120
## Logging
101121

102122
If not configured, logging falls back to the standard Go log package at error level only.

providers/flagd/go.mod

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ require (
99
github.com/bufbuild/connect-opentelemetry-go v0.4.0
1010
github.com/go-logr/logr v1.2.4
1111
github.com/golang/mock v1.6.0
12-
github.com/google/go-cmp v0.5.9
1312
github.com/hashicorp/golang-lru/v2 v2.0.4
1413
github.com/open-feature/flagd/core v0.6.2
1514
github.com/open-feature/go-sdk v1.6.0

providers/flagd/go.sum

-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
1-
buf.build/gen/go/grpc-ecosystem/grpc-gateway/protocolbuffers/go v1.29.1-20220906183531-bc28b723cd77.1/go.mod h1:hhON98gyTBA8hmdzw7bPux2Zerm5Sp2hesfc5t6jpoI=
21
buf.build/gen/go/grpc-ecosystem/grpc-gateway/protocolbuffers/go v1.31.0-20220906183531-bc28b723cd77.1/go.mod h1:/j/LOrpev/FdyGhdj/sOc0peUf2KR0y4nMmLp4t1g14=
3-
buf.build/gen/go/open-feature/flagd/bufbuild/connect-go v1.5.2-20230710190440-2333a9579c1a.1 h1:Cno0dUv5u33SiQ3F9g3UcubY1F/h+ovK7tkmjVzc7uI=
4-
buf.build/gen/go/open-feature/flagd/bufbuild/connect-go v1.5.2-20230710190440-2333a9579c1a.1/go.mod h1:yClM0n7s6o0v+dKv2S9iC+Sb5JbXHtUI3MtFE1TIq78=
52
buf.build/gen/go/open-feature/flagd/bufbuild/connect-go v1.9.0-20230720212818-3675556880a1.1 h1:famYYNRx3ZbC0FxNOICnjau9T0gelgaoXsenjfNocxg=
63
buf.build/gen/go/open-feature/flagd/bufbuild/connect-go v1.9.0-20230720212818-3675556880a1.1/go.mod h1:7EjC+x8QSHYXzDCeYfDN3mS/46eboAZLXChIe8iUrF8=
7-
buf.build/gen/go/open-feature/flagd/protocolbuffers/go v1.29.1-20230317150644-afd1cc2ef580.1 h1:CWgXoLTajc7QagTz76kplcFnjjWIkxhhDdmKYtVShOU=
8-
buf.build/gen/go/open-feature/flagd/protocolbuffers/go v1.29.1-20230317150644-afd1cc2ef580.1/go.mod h1:WWnccsJMW7QwvXkdXUuQmg28sx+ZoX36+J2TAjcy6u4=
94
buf.build/gen/go/open-feature/flagd/protocolbuffers/go v1.31.0-20230720212818-3675556880a1.1 h1:4KG4mmtBU0USgznO6QuhB3oTnCrlI+ayBaGjRfgsXeM=
105
buf.build/gen/go/open-feature/flagd/protocolbuffers/go v1.31.0-20230720212818-3675556880a1.1/go.mod h1:kmgvCcQsQkpZ5yNLgO2B22ysHjnfm3IyzymmFHB60vY=
11-
github.com/bufbuild/connect-go v1.9.0 h1:JIgAeNuFpo+SUPfU19Yt5TcWlznsN5Bv10/gI/6Pjoc=
12-
github.com/bufbuild/connect-go v1.9.0/go.mod h1:CAIePUgkDR5pAFaylSMtNK45ANQjp9JvpluG20rhpV8=
136
github.com/bufbuild/connect-go v1.10.0 h1:QAJ3G9A1OYQW2Jbk3DeoJbkCxuKArrvZgDt47mjdTbg=
147
github.com/bufbuild/connect-go v1.10.0/go.mod h1:CAIePUgkDR5pAFaylSMtNK45ANQjp9JvpluG20rhpV8=
158
github.com/bufbuild/connect-opentelemetry-go v0.4.0 h1:6JAn10SNqlQ/URhvRNGrIlczKw1wEXknBUUtmWqOiak=
@@ -25,15 +18,10 @@ github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+Licev
2518
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
2619
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
2720
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
28-
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
2921
github.com/hashicorp/golang-lru/v2 v2.0.4 h1:7GHuZcgid37q8o5i3QI9KMT4nCWQQ3Kx3Ov6bb9MfK0=
3022
github.com/hashicorp/golang-lru/v2 v2.0.4/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
31-
github.com/open-feature/flagd/core v0.6.0 h1:sf8BR3YcggLJuUrpWKiknfhhSv2gVQ6hvQgZYmzQMok=
32-
github.com/open-feature/flagd/core v0.6.0/go.mod h1:gYf76egLbU3gYIX5B0720O0HPXnRiMRr4YTvAgQBTFc=
3323
github.com/open-feature/flagd/core v0.6.2 h1:kE687GgvJrbzfwBeywuG52he9UtxQm4LB+1CbaESfN8=
3424
github.com/open-feature/flagd/core v0.6.2/go.mod h1:9ojqWYYJqsHnAC8kNTrMxCpP6OOE3zLxZip/C0Gt6h0=
35-
github.com/open-feature/go-sdk v1.5.1 h1:ja1+XtWwqLqgJSFJ31sh+MCioVW4vWj5ya/e/f81y38=
36-
github.com/open-feature/go-sdk v1.5.1/go.mod h1:yllFTs5yJguao9zdcmYYGJBHTyBGwO2zC+GP2JeFR0o=
3725
github.com/open-feature/go-sdk v1.6.0 h1:9Wi8J77ORVKvm/8d1ZGKI7+/Uq+5JrpxylQ50DvZZnA=
3826
github.com/open-feature/go-sdk v1.6.0/go.mod h1:xR4RHexQNwvE/7IOR0LOiCuH+2wlQyoZwpAc4bp508o=
3927
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -77,7 +65,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
7765
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
7866
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
7967
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
80-
google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
8168
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
8269
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
8370
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

providers/flagd/internal/mock/service_mock.go

+59-50
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

providers/flagd/internal/model/error.go

-24
This file was deleted.

providers/flagd/pkg/cache.go

-8
This file was deleted.

0 commit comments

Comments
 (0)