Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging upstream changes #50

Merged
merged 85 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
f25b46f
[ffs] - Allow setting initial feature flag values (#1319)
puckpuck Jan 8, 2024
6a142a7
Update affiliation (#1323)
julianocosta89 Jan 8, 2024
47d9f5d
[cartservice] Bump OTel .NET SDK to 1.7.0 together with other depende…
Kielek Jan 16, 2024
494808a
Re-generate protobuf to fix deprecated go modules (#1321)
tranngoclam Jan 16, 2024
bfc18c7
[loadgenerator and recommendationservice] Update python base image (#…
julianocosta89 Jan 16, 2024
9e624d7
update version numbers (#1331)
austinlparker Jan 16, 2024
ea3fbfd
[grafana] - update grafana to 10.2.3 (#1332)
puckpuck Jan 16, 2024
c5484eb
[currency] - fix rpc.service attribute (#1333)
puckpuck Jan 19, 2024
c1365ed
use GitHub markdown syntax (#1342)
puckpuck Jan 19, 2024
69a28d6
[frontendproxy] enable envoy environment resource detector (#1291)
rlankfo Jan 19, 2024
0051599
[currency] - fix metricreader export and temporality (#1335)
puckpuck Jan 19, 2024
0d9cf78
update to latest helm release (#1341)
puckpuck Jan 20, 2024
9ed7785
[postgres] Define and use image for postgres (#1338)
puckpuck Jan 22, 2024
c9224a9
Update wiki url (#1346)
pankdev Jan 25, 2024
120381a
Fix crashlooping for two services with insufficient privileges on ope…
LouisParkin Jan 29, 2024
022ba90
Add browser traffic in loadgenerator and export traces in frontend (#…
jordibisbal8 Jan 30, 2024
ee7907f
Major version update (version 2.0.0) for OTel Java instrumentation (#…
mviitane Feb 1, 2024
cbea332
Align env variables for OTLP ports (#1353)
mviitane Feb 1, 2024
26b1710
Update dependent services - Collector, Grafana, Jaeger, Prometheus, e…
mviitane Feb 1, 2024
e15affc
[opensearch] - Use opensearch exporter & remove dataprepper (#1356)
puckpuck Feb 2, 2024
b0c1d27
[chore] update Go SDKs, & fix metrics filters and transforms (#1357)
puckpuck Feb 2, 2024
d2eae5f
build(go): upgrade golang:1.21.6 (#1360)
tranngoclam Feb 2, 2024
14bc74a
[chore] update SDKs and remove metric transforms (#1358)
puckpuck Feb 5, 2024
23094bf
always run cleanup job (#1366)
austinlparker Feb 5, 2024
d1575de
[loadgenerator] fix browser traffic enabled flag (#1359)
puckpuck Feb 7, 2024
3a9e507
Bump gradle/wrapper-validation-action from 1.1.0 to 2.0.1 (#1370)
dependabot[bot] Feb 7, 2024
059dfb9
chore(go): update go 1.22 (#1367)
tranngoclam Feb 7, 2024
b8cc894
Bump gradle/wrapper-validation-action from 2.0.1 to 2.1.0 (#1373)
dependabot[bot] Feb 8, 2024
ab6c1a7
[productcatalog] - allow products to be extended (#1363)
puckpuck Feb 9, 2024
1c6b68b
Bump gradle/wrapper-validation-action from 2.1.0 to 2.1.1 (#1376)
dependabot[bot] Feb 13, 2024
1b2214e
build(deps): upgrade go.opentelemetry.io/otel and go.opentelemetry.io…
tranngoclam Feb 14, 2024
2d16971
[chore] fix trace tests (#1377)
puckpuck Feb 14, 2024
e37e626
[cartservice] Bump .NET to 8.0.2 (#1380)
Kielek Feb 14, 2024
371b36f
Add Google Cloud fork to demos list (#1381)
damemi Feb 15, 2024
816ee5a
[currencyservice] Add OTLP logs (#1378)
julianocosta89 Feb 16, 2024
9d77fdf
prep for release (#1379)
austinlparker Feb 16, 2024
a87872e
replace featureflag service with flagd
austinlparker Feb 18, 2024
d533938
remove ff from gha
austinlparker Feb 18, 2024
c30d793
update changelog
austinlparker Feb 18, 2024
4d77b4b
fix sanity checker
austinlparker Feb 19, 2024
b5fb5e2
add python
austinlparker Feb 19, 2024
1ea0441
fix sanity
austinlparker Feb 19, 2024
e8e3553
refactor(checkoutservice): reuse grpc service client (#1387)
tranngoclam Feb 19, 2024
b503f31
Merge branch 'main' into flagd-spike
austinlparker Feb 19, 2024
6eab783
chore: use semantic convention v1.24.0 (#1385)
tranngoclam Feb 19, 2024
59e0528
bump dependencies (#1390)
julianocosta89 Feb 19, 2024
64eb66e
Update trace test sem conv (#1394)
julianocosta89 Feb 20, 2024
6f38f5f
update to 1.8.0 release (#1395)
puckpuck Feb 21, 2024
f9053b7
[chore] make: fix restart, add redeploy targets (#1397)
puckpuck Feb 21, 2024
0d7e94b
[chore] - memory for collector and jaeger (#1396)
puckpuck Feb 21, 2024
1b9b117
[chore]: nightly build and publish (#1398)
puckpuck Feb 21, 2024
6bd2ede
use nightly releases (#1399)
puckpuck Feb 22, 2024
ef31bfd
[chore]: remove integration tests (#1406)
puckpuck Feb 22, 2024
63a1e8a
Merge branch 'main' into flagd-spike
austinlparker Feb 22, 2024
df75996
add flagd provider to python
austinlparker Feb 23, 2024
cf7bac7
chore(checkoutservice): add producer interceptor for tracing (#1400)
tranngoclam Feb 24, 2024
4f7285f
Update src/adservice/build.gradle
austinlparker Feb 25, 2024
16f2428
Merge branch 'main' into flagd-spike
austinlparker Feb 25, 2024
e07f5b2
fix(accountingservice): fix graceful shutdown and log issues (#1401)
tranngoclam Feb 26, 2024
993fc7e
Merge branch 'main' into flagd-spike
austinlparker Feb 26, 2024
9f9f258
cleanup ad service eval
austinlparker Feb 26, 2024
3f6958a
only run nightly for main repo (#1407)
puckpuck Feb 26, 2024
ca56690
fix(productcatalogservice): fix graceful shutdown issues (#1402)
tranngoclam Feb 26, 2024
e6ef65d
Merge branch 'main' into flagd-spike
austinlparker Feb 26, 2024
940dfca
Test: Run integration tests on PR approval (#1414)
austinlparker Feb 26, 2024
b1e26c3
[CartService] - Add Host Detector (#1415)
julianocosta89 Feb 27, 2024
0a1ad08
docs(readme): add Dash0 to the list of forks (#1416)
basti1302 Feb 27, 2024
c462cda
Merge branch 'main' into flagd-spike
austinlparker Feb 27, 2024
71f0e96
[frontend] update sharp to latest to avoid docker build issue on M1 (…
basti1302 Feb 27, 2024
06f020c
[frontend] fix typo in ShippingGateway (#1418)
basti1302 Mar 1, 2024
b7c7891
fix kafka producer spans (#1428)
puckpuck Mar 2, 2024
24c82cf
Merge branch 'main' into flagd-spike
austinlparker Mar 2, 2024
71e428b
chore: upgrade go.opentelemetry.io otel and contrib dependencies (#1408)
tranngoclam Mar 2, 2024
ff19083
fix adservice
austinlparker Mar 4, 2024
52b35bf
Merge branch 'main' into flagd-spike
austinlparker Mar 4, 2024
d70b823
fixup gomod
austinlparker Mar 5, 2024
75533ab
add otel hooks for .net flags
austinlparker Mar 5, 2024
2f8861e
add otel hooks for productcatalog
austinlparker Mar 5, 2024
8430bbf
Remove trailing space
julianocosta89 Mar 6, 2024
87618d3
add stub for python otel hook
austinlparker Mar 6, 2024
c8b8e08
refactor(checkoutservice): use exception.message key from semantic co…
tranngoclam Mar 6, 2024
dc6d2db
remove unneeded key from flags
austinlparker Mar 6, 2024
334fe69
Merge branch 'main' into flagd-spike
austinlparker Mar 6, 2024
45a04f5
Merge branch 'flagd-spike' of github.com:austinlparker/opentelemetry-…
lukekraus45 Mar 28, 2024
d1e675b
removing integration tests
lukekraus45 Apr 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
replace featureflag service with flagd
  • Loading branch information
austinlparker committed Feb 18, 2024
commit a87872e3d45e2515435e999fb4b58a77d323c710
3 changes: 3 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ FEATURE_FLAG_SERVICE_HOST=feature-flag-service
FEATURE_FLAG_GRPC_SERVICE_PORT=50053
FEATURE_FLAG_GRPC_SERVICE_ADDR=featureflagservice:${FEATURE_FLAG_GRPC_SERVICE_PORT}

# flagd
FLAGD_HOST=flagd

# Frontend
FRONTEND_PORT=8080
FRONTEND_ADDR=frontend:${FRONTEND_PORT}
Expand Down
83 changes: 17 additions & 66 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ services:
- "${AD_SERVICE_PORT}"
environment:
- AD_SERVICE_PORT
- FEATURE_FLAG_GRPC_SERVICE_ADDR
- FLAGD_HOST
- OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP}
- OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
- OTEL_RESOURCE_ATTRIBUTES
Expand Down Expand Up @@ -91,7 +91,7 @@ services:
- "${CART_SERVICE_PORT}"
environment:
- CART_SERVICE_PORT
- FEATURE_FLAG_GRPC_SERVICE_ADDR
- FLAGD_HOST
- REDIS_ADDR
- OTEL_EXPORTER_OTLP_ENDPOINT
- OTEL_RESOURCE_ATTRIBUTES
Expand Down Expand Up @@ -203,36 +203,20 @@ services:
condition: service_started
logging: *logging

# Feature Flag service
featureflagservice:
image: ${IMAGE_NAME}:${IMAGE_VERSION}-featureflagservice
container_name: feature-flag-service
build:
context: ./
dockerfile: ./src/featureflagservice/Dockerfile
cache_from:
- ${IMAGE_NAME}:${IMAGE_VERSION}-featureflagservice
deploy:
resources:
limits:
memory: 175M
restart: unless-stopped
flagd:
image: ghcr.io/open-feature/flagd:latest
container_name: flagd
command: [
"start",
"--uri",
"file:./etc/flagd/demo.flagd.json"
]
ports:
- "${FEATURE_FLAG_SERVICE_PORT}" # Feature Flag Service UI
- "${FEATURE_FLAG_GRPC_SERVICE_PORT}" # Feature Flag Service gRPC API
environment:
- FEATURE_FLAG_SERVICE_PORT
- FEATURE_FLAG_GRPC_SERVICE_PORT
- OTEL_EXPORTER_OTLP_ENDPOINT
- OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=grpc
- OTEL_SERVICE_NAME=featureflagservice
- DATABASE_URL=ecto://ffs:ffs@ffspostgres:5432/ffs
healthcheck:
test: ["CMD", "curl", "-H", "baggage: synthetic_request=true", "-f", "http://localhost:${FEATURE_FLAG_SERVICE_PORT}"]
depends_on:
ffspostgres:
condition: service_healthy
logging: *logging
- 8013
volumes:
- ./src/flagd:/etc/flagd
logging:
*logging

# Fraud Detection service
frauddetectionservice:
Expand Down Expand Up @@ -333,8 +317,6 @@ services:
environment:
- FRONTEND_PORT
- FRONTEND_HOST
- FEATURE_FLAG_SERVICE_PORT
- FEATURE_FLAG_SERVICE_HOST
- LOCUST_WEB_HOST
- LOCUST_WEB_PORT
- GRAFANA_SERVICE_PORT
Expand All @@ -349,8 +331,6 @@ services:
depends_on:
frontend:
condition: service_started
featureflagservice:
condition: service_started
loadgenerator:
condition: service_started
jaeger:
Expand Down Expand Up @@ -436,7 +416,7 @@ services:
- "${PRODUCT_CATALOG_SERVICE_PORT}"
environment:
- PRODUCT_CATALOG_SERVICE_PORT
- FEATURE_FLAG_GRPC_SERVICE_ADDR
- FLAGD_HOST
- OTEL_EXPORTER_OTLP_ENDPOINT
- OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
- OTEL_RESOURCE_ATTRIBUTES
Expand Down Expand Up @@ -493,16 +473,14 @@ services:
environment:
- RECOMMENDATION_SERVICE_PORT
- PRODUCT_CATALOG_SERVICE_ADDR
- FEATURE_FLAG_GRPC_SERVICE_ADDR
- FLAGD_HOST
- OTEL_PYTHON_LOG_CORRELATION=true
- OTEL_EXPORTER_OTLP_ENDPOINT
- OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
- OTEL_RESOURCE_ATTRIBUTES
- OTEL_SERVICE_NAME=recommendationservice
- PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
depends_on:
featureflagservice:
condition: service_started
productcatalogservice:
condition: service_started
otelcol:
Expand Down Expand Up @@ -539,33 +517,6 @@ services:
# ******************
# Dependent Services
# ******************
# Postgres used by Feature Flag service
ffspostgres:
image: ${IMAGE_NAME}:${IMAGE_VERSION}-ffspostgres
container_name: ffs-postgres
build:
context: ./
dockerfile: ./src/ffspostgres/Dockerfile
cache_from:
- ${IMAGE_NAME}:${IMAGE_VERSION}-ffspostgres
deploy:
resources:
limits:
memory: 120M
restart: unless-stopped
environment:
- POSTGRES_USER=ffs
- POSTGRES_DB=ffs
- POSTGRES_PASSWORD=ffs
volumes:
- ./src/ffspostgres/update-scripts/99-ffs_update.sql:/docker-entrypoint-initdb.d/99-ffs_update.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -d ffs -U ffs"]
interval: 10s
timeout: 5s
retries: 5
logging: *logging

# Kafka used by Checkout, Accounting, and Fraud Detection services
kafka:
image: ${IMAGE_NAME}:${IMAGE_VERSION}-kafka
Expand Down
4 changes: 3 additions & 1 deletion src/adservice/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ dependencies {
"io.opentelemetry:opentelemetry-api",
"io.opentelemetry:opentelemetry-sdk",
"io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations",
"org.apache.logging.log4j:log4j-core:2.21.1"
"org.apache.logging.log4j:log4j-core:2.21.1",
"dev.openfeature.contrib.providers:flagd:0.6.9",
'dev.openfeature:sdk:1.7.3'

runtimeOnly "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}",
"com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}",
Expand Down
43 changes: 17 additions & 26 deletions src/adservice/src/main/java/oteldemo/AdService.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@
import oteldemo.Demo.AdRequest;
import oteldemo.Demo.AdResponse;
import oteldemo.Demo.GetFlagResponse;
import oteldemo.FeatureFlagServiceGrpc.FeatureFlagServiceBlockingStub;
import dev.openfeature.contrib.providers.flagd.FlagdOptions;
import dev.openfeature.contrib.providers.flagd.FlagdProvider;
import dev.openfeature.sdk.Client;
import dev.openfeature.sdk.OpenFeatureAPI;


public final class AdService {

Expand Down Expand Up @@ -72,18 +76,18 @@ private void start() throws IOException {
"environment vars: AD_SERVICE_PORT must not be null")));
healthMgr = new HealthStatusManager();

String featureFlagServiceAddr =
Optional.ofNullable(System.getenv("FEATURE_FLAG_GRPC_SERVICE_ADDR")).orElse("");
FeatureFlagServiceBlockingStub featureFlagServiceStub = null;
if (!featureFlagServiceAddr.isEmpty()) {
featureFlagServiceStub =
oteldemo.FeatureFlagServiceGrpc.newBlockingStub(
ManagedChannelBuilder.forTarget(featureFlagServiceAddr).usePlaintext().build());
}
// Create a flagd instance with OpenTelemetry
FlagdOptions options =
FlagdOptions.builder()
.withGlobalTelemetry(true)
.build();

FlagdProvider flagdProvider = new FlagdProvider(options);
// Set flagd as the OpenFeature Provider
OpenFeatureAPI.getInstance().setProvider(flagdProvider);

server =
ServerBuilder.forPort(port)
.addService(new AdServiceImpl(featureFlagServiceStub))
.addService(healthMgr.getHealthService())
.build()
.start();
Expand Down Expand Up @@ -122,12 +126,6 @@ private static class AdServiceImpl extends oteldemo.AdServiceGrpc.AdServiceImplB

private static final String ADSERVICE_FAIL_FEATURE_FLAG = "adServiceFailure";

private final FeatureFlagServiceBlockingStub featureFlagServiceStub;

private AdServiceImpl(FeatureFlagServiceBlockingStub featureFlagServiceStub) {
this.featureFlagServiceStub = featureFlagServiceStub;
}

/**
* Retrieves ads based on context provided in the request {@code AdRequest}.
*
Expand Down Expand Up @@ -194,21 +192,14 @@ public void getAds(AdRequest req, StreamObserver<AdResponse> responseObserver) {
}

boolean checkAdFailure() {
if (featureFlagServiceStub == null) {
return false;
}

Client client = OpenFeatureAPI.getInstance().getClient();
Boolean boolValue = client.getBooleanValue("adServiceFailure", false);
// Flip a coin and fail 1/10th of the time if feature flag is enabled
if (random.nextInt(10) != 1) {
return false;
}

GetFlagResponse response =
featureFlagServiceStub.getFlag(
oteldemo.Demo.GetFlagRequest.newBuilder()
.setName(ADSERVICE_FAIL_FEATURE_FLAG)
.build());
return response.getFlag().getEnabled();
return boolValue;
}
}

Expand Down
14 changes: 9 additions & 5 deletions src/cartservice/src/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using System;

using cartservice.cartstore;
using cartservice.featureflags;
using cartservice.services;

using Microsoft.AspNetCore.Builder;
Expand All @@ -17,6 +16,8 @@
using OpenTelemetry.ResourceDetectors.Container;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using OpenFeature;
using OpenFeature.Contrib.Providers.Flagd;

var builder = WebApplication.CreateBuilder(args);
string redisAddress = builder.Configuration["REDIS_ADDR"];
Expand All @@ -37,13 +38,16 @@
return store;
});

builder.Services.AddSingleton<FeatureFlagHelper>();
builder.Services.AddSingleton(x => new CartService(x.GetRequiredService<ICartStore>(),
new RedisCartStore(x.GetRequiredService<ILogger<RedisCartStore>>(), "badhost:1234"),
x.GetRequiredService<FeatureFlagHelper>()));
new RedisCartStore(x.GetRequiredService<ILogger<RedisCartStore>>(), "badhost:1234"), x.GetRequiredService<IFeatureClient>()));

builder.Services.AddSingleton<IFeatureClient>(x => {
var flagdProvider = new FlagdProvider();
Api.Instance.SetProviderAsync(flagdProvider).GetAwaiter().GetResult();
var client = Api.Instance.GetClient();
return client;
});

// see https://opentelemetry.io/docs/instrumentation/net/getting-started/

Action<ResourceBuilder> appResourceBuilder =
resource => resource
Expand Down
2 changes: 2 additions & 0 deletions src/cartservice/src/cartservice.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.ResourceDetectors.Container" Version="1.0.0-beta.6" />
<PackageReference Include="StackExchange.Redis" Version="2.7.17" />
<PackageReference Include="OpenFeature.Contrib.Providers.Flagd" Version="0.1.8" />
<PackageReference Include="OpenFeature" Version="1.4.1" />
</ItemGroup>

<ItemGroup>
Expand Down
38 changes: 0 additions & 38 deletions src/cartservice/src/featureflags/FeatureFlagHelper.cs

This file was deleted.

8 changes: 4 additions & 4 deletions src/cartservice/src/services/CartService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Grpc.Core;
using OpenTelemetry.Trace;
using cartservice.cartstore;
using cartservice.featureflags;
using OpenFeature;
using Oteldemo;

namespace cartservice.services;
Expand All @@ -15,9 +15,9 @@ public class CartService : Oteldemo.CartService.CartServiceBase
private static readonly Empty Empty = new();
private readonly ICartStore _badCartStore;
private readonly ICartStore _cartStore;
private readonly FeatureFlagHelper _featureFlagHelper;
private readonly IFeatureClient _featureFlagHelper;

public CartService(ICartStore cartStore, ICartStore badCartStore, FeatureFlagHelper featureFlagService)
public CartService(ICartStore cartStore, ICartStore badCartStore, IFeatureClient featureFlagService)
{
_badCartStore = badCartStore;
_cartStore = cartStore;
Expand Down Expand Up @@ -60,7 +60,7 @@ public override async Task<Empty> EmptyCart(EmptyCartRequest request, ServerCall

try
{
if (await _featureFlagHelper.GenerateCartError())
if (await _featureFlagHelper.GetBooleanValue("cartServiceFailure", false))
{
await _badCartStore.EmptyCartAsync(request.UserId);
}
Expand Down
Loading