Skip to content

Commit f25b46f

Browse files
[ffs] - Allow setting initial feature flag values (open-telemetry#1319)
* remove timestamps from FeatureFlag message Signed-off-by: Pierre Tessier <pierre@pierretessier.com> * remove timestamps from FeatureFlag message Signed-off-by: Pierre Tessier <pierre@pierretessier.com> * init feature flags using sql Signed-off-by: Pierre Tessier <pierre@pierretessier.com> * allows initial feature flags values Signed-off-by: Pierre Tessier <pierre@pierretessier.com> * Update src/ffs_postgres/20-ffs_data.sql Co-authored-by: Juliano Costa <julianocosta89@outlook.com> * Remove sporadically from cartServiceFailure --------- Signed-off-by: Pierre Tessier <pierre@pierretessier.com> Co-authored-by: Juliano Costa <julianocosta89@outlook.com>
1 parent 3895edc commit f25b46f

File tree

18 files changed

+1147
-1276
lines changed

18 files changed

+1147
-1276
lines changed

.licenserc.json

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828
"# Copyright The OpenTelemetry Authors",
2929
"# SPDX-License-Identifier: Apache-2.0"
3030
],
31+
"**/*.sql": [
32+
"-- Copyright The OpenTelemetry Authors",
33+
"-- SPDX-License-Identifier: Apache-2.0"
34+
],
3135
"**/{Dockerfile,Makefile}": [
3236
"# Copyright The OpenTelemetry Authors",
3337
"# SPDX-License-Identifier: Apache-2.0"

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ release.
1616
([#1313](https://github.com/open-telemetry/opentelemetry-demo/pull/1313))
1717
* [accountingservice] Update dependencies and semconv
1818
* ([#1316](https://github.com/open-telemetry/opentelemetry-demo/pull/1316))
19+
* [featureflagservice] Allow setting initial feature flag values
20+
([#1319](https://github.com/open-telemetry/opentelemetry-demo/pull/1319))
1921

2022
## 1.7.0
2123

docker-compose.yml

+3
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,9 @@ services:
552552
- POSTGRES_USER=ffs
553553
- POSTGRES_DB=ffs
554554
- POSTGRES_PASSWORD=ffs
555+
volumes:
556+
- ./src/ffs_postgres/10-ffs_schema.sql:/docker-entrypoint-initdb.d/10-ffs_schema.sql
557+
- ./src/ffs_postgres/20-ffs_data.sql:/docker-entrypoint-initdb.d/20-ffs_data.sql
555558
healthcheck:
556559
test: ["CMD-SHELL", "pg_isready -d ffs -U ffs"]
557560
interval: 10s

pb/demo.proto

-4
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
syntax = "proto3";
1616

17-
import "google/protobuf/timestamp.proto";
18-
1917
package oteldemo;
2018

2119
option go_package = "genproto/oteldemo";
@@ -277,8 +275,6 @@ message Flag {
277275
string name = 1;
278276
string description = 2;
279277
bool enabled = 3;
280-
google.protobuf.Timestamp created_at = 4;
281-
google.protobuf.Timestamp updated_at = 5;
282278
}
283279

284280
message GetFlagRequest {

src/accountingservice/genproto/oteldemo/demo.pb.go

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

src/accountingservice/genproto/oteldemo/demo_grpc.pb.go

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

src/checkoutservice/genproto/oteldemo/demo.pb.go

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

src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go

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

src/featureflagservice/lib/featureflagservice/feature_flags.ex

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ defmodule Featureflagservice.FeatureFlags do
3535
3636
## Examples
3737
38-
iex> get_feature_flag!(123)
38+
iex> get_feature_flag!(foo)
3939
%FeatureFlag{}
4040
41-
iex> get_feature_flag!(456)
41+
iex> get_feature_flag!(bar)
4242
** (Ecto.NoResultsError)
4343
4444
"""
45-
def get_feature_flag!(id), do: Repo.get!(FeatureFlag, id)
45+
def get_feature_flag!(name), do: Repo.get!(FeatureFlag, name)
4646

4747
@doc """
4848
Gets a single feature_flag by name.

src/featureflagservice/lib/featureflagservice/feature_flags/feature_flag.ex

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ defmodule Featureflagservice.FeatureFlags.FeatureFlag do
55
use Ecto.Schema
66
import Ecto.Changeset
77

8-
schema "featureflags" do
8+
@primary_key {:name, :string, autogenerate: false}
9+
@derive {Phoenix.Param, key: :name}
10+
11+
schema "featureflags" do
912
field :description, :string
1013
field :enabled, :float, default: 0.0
11-
field :name, :string
12-
13-
timestamps()
1414
end
1515

1616
@doc false

src/featureflagservice/priv/repo/migrations/.formatter.exs

-4
This file was deleted.

src/featureflagservice/priv/repo/migrations/20220524172636_create_featureflags.exs

-50
This file was deleted.

src/featureflagservice/priv/repo/seeds.exs

-13
This file was deleted.

src/featureflagservice/src/ffs_service.erl

+2-10
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ get_flag(Ctx, #{name := Name}) ->
3434
{grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}};
3535
#{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag',
3636
description := Description,
37-
enabled := Enabled,
38-
inserted_at := CreatedAt,
39-
updated_at := UpdatedAt
37+
enabled := Enabled
4038
} ->
4139
RandomNumber = rand:uniform(100), % Generate a random number between 0 and 100
4240
Probability = trunc(Enabled * 100), % Convert the Enabled value to a percentage
@@ -46,15 +44,9 @@ get_flag(Ctx, #{name := Name}) ->
4644
?set_attribute('app.featureflag.raw_value', Enabled),
4745
?set_attribute('app.featureflag.enabled', FlagEnabledValue),
4846

49-
{ok, Epoch} = 'Elixir.NaiveDateTime':from_erl({{1970, 1, 1}, {0, 0, 0}}),
50-
CreatedAtSeconds = 'Elixir.NaiveDateTime':diff(CreatedAt, Epoch),
51-
UpdatedAtSeconds = 'Elixir.NaiveDateTime':diff(UpdatedAt, Epoch),
52-
5347
Flag = #{name => Name,
5448
description => Description,
55-
enabled => FlagEnabledValue,
56-
created_at => #{seconds => CreatedAtSeconds, nanos => 0},
57-
updated_at => #{seconds => UpdatedAtSeconds, nanos => 0}},
49+
enabled => FlagEnabledValue},
5850

5951
{ok, #{flag => Flag}, Ctx}
6052
end.

src/ffs_postgres/10-ffs_schema.sql

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- Copyright The OpenTelemetry Authors
2+
-- SPDX-License-Identifier: Apache-2.0
3+
4+
CREATE TABLE public.featureflags (
5+
name character varying(255),
6+
description character varying(255),
7+
enabled double precision DEFAULT 0.0 NOT NULL
8+
);
9+
10+
ALTER TABLE ONLY public.featureflags ADD CONSTRAINT featureflags_pkey PRIMARY KEY (name);
11+
12+
CREATE UNIQUE INDEX featureflags_name_index ON public.featureflags USING btree (name);
13+

src/ffs_postgres/20-ffs_data.sql

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-- Copyright The OpenTelemetry Authors
2+
-- SPDX-License-Identifier: Apache-2.0
3+
4+
-- Feature Flags created and initialized on startup
5+
-- 'enabled' is a decimal value between 0 and 1 (inclusive)
6+
-- 0.0 is always disabled
7+
-- 1.0 is always enabled
8+
-- All values between set a percentage chance on each request
9+
-- example: 0.55 is enabled 55% of the time
10+
INSERT INTO public.featureflags (name, description, enabled)
11+
VALUES
12+
('productCatalogFailure', 'Fail product catalog service on a specific product', 0),
13+
('recommendationCache', 'Cache recommendations', 0),
14+
('adServiceFailure', 'Fail ad service requests', 0),
15+
('cartServiceFailure', 'Fail cart service requests', 0);

0 commit comments

Comments
 (0)