Skip to content

Commit 747b39c

Browse files
alanwestcartersochajulianocosta89
authored andcommitted
Generate random errors in cartservice (open-telemetry#824)
* Generate random errors from cart service * Update migration script? * Update changelog * Update changelog * Add Copyright to FeatureFlagHelper.cs --------- Co-authored-by: Carter Socha <43380952+cartersocha@users.noreply.github.com> Co-authored-by: Juliano Costa <julianocosta89@outlook.com>
1 parent 466e4e7 commit 747b39c

File tree

6 files changed

+67
-2
lines changed

6 files changed

+67
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ release.
77

88
## Unreleased
99

10+
* Add cartServiceFailure feature flag triggering Cart Service errors
11+
([#824](https://github.com/open-telemetry/opentelemetry-demo/pull/824))
1012
* [paymentservice] update JS SDKs to 1.12.0/0.38.0
1113
([#853](https://github.com/open-telemetry/opentelemetry-demo/pull/853))
1214
* [frontend] update JS SDKs to 1.12.0/0.38.0

docker-compose.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ services:
9191
- "${CART_SERVICE_PORT}"
9292
environment:
9393
- CART_SERVICE_PORT
94+
- FEATURE_FLAG_GRPC_SERVICE_ADDR
9495
- REDIS_ADDR
9596
- OTEL_EXPORTER_OTLP_ENDPOINT
9697
- OTEL_RESOURCE_ATTRIBUTES

src/cartservice/src/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44

55
using cartservice.cartstore;
6+
using cartservice.featureflags;
67
using cartservice.services;
78

89
using Microsoft.AspNetCore.Builder;
@@ -30,6 +31,7 @@
3031
Console.WriteLine("Initialization completed");
3132

3233
builder.Services.AddSingleton<ICartStore>(cartStore);
34+
builder.Services.AddSingleton<FeatureFlagHelper>();
3335

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
using System;
4+
using System.Threading.Tasks;
5+
using Oteldemo;
6+
7+
namespace cartservice.featureflags;
8+
9+
public class FeatureFlagHelper
10+
{
11+
private readonly static Random Random = new Random();
12+
private readonly FeatureFlagService.FeatureFlagServiceClient _featureFlagServiceClient;
13+
14+
public FeatureFlagHelper()
15+
{
16+
var featureFlagServiceUri = new Uri($"http://{Environment.GetEnvironmentVariable("FEATURE_FLAG_GRPC_SERVICE_ADDR")}");
17+
var channel = Grpc.Net.Client.GrpcChannel.ForAddress(featureFlagServiceUri);
18+
_featureFlagServiceClient = new FeatureFlagService.FeatureFlagServiceClient(channel);
19+
}
20+
21+
public async Task<bool> GenerateCartError()
22+
{
23+
if (Random.Next(10) != 1)
24+
{
25+
return false;
26+
}
27+
28+
var getFlagRequest = new GetFlagRequest { Name = "cartServiceFailure" };
29+
var getFlagResponse = await _featureFlagServiceClient.GetFlagAsync(getFlagRequest);
30+
return getFlagResponse.Flag.Enabled;
31+
}
32+
}

src/cartservice/src/services/CartService.cs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,24 @@
33
using System.Diagnostics;
44
using System.Threading.Tasks;
55
using Grpc.Core;
6+
using OpenTelemetry.Trace;
67
using cartservice.cartstore;
8+
using cartservice.featureflags;
79
using Oteldemo;
810

911
namespace cartservice.services
1012
{
1113
public class CartService : Oteldemo.CartService.CartServiceBase
1214
{
1315
private readonly static Empty Empty = new Empty();
16+
private readonly static ICartStore BadCartStore = new RedisCartStore("badhost:1234");
1417
private readonly ICartStore _cartStore;
18+
private readonly FeatureFlagHelper _featureFlagHelper;
1519

16-
public CartService(ICartStore cartStore)
20+
public CartService(ICartStore cartStore, FeatureFlagHelper featureFlagService)
1721
{
1822
_cartStore = cartStore;
23+
_featureFlagHelper = featureFlagService;
1924
}
2025

2126
public async override Task<Empty> AddItem(AddItemRequest request, ServerCallContext context)
@@ -52,7 +57,24 @@ public async override Task<Empty> EmptyCart(EmptyCartRequest request, ServerCall
5257
activity?.SetTag("app.user.id", request.UserId);
5358
activity?.AddEvent(new("Empty cart"));
5459

55-
await _cartStore.EmptyCartAsync(request.UserId);
60+
try
61+
{
62+
if (await _featureFlagHelper.GenerateCartError())
63+
{
64+
await BadCartStore.EmptyCartAsync(request.UserId);
65+
}
66+
else
67+
{
68+
await _cartStore.EmptyCartAsync(request.UserId);
69+
}
70+
}
71+
catch (RpcException ex)
72+
{
73+
Activity.Current?.RecordException(ex);
74+
Activity.Current?.SetStatus(ActivityStatusCode.Error, ex.Message);
75+
throw;
76+
}
77+
5678
return Empty;
5779
}
5880
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,17 @@ defmodule Featureflagservice.Repo.Migrations.CreateFeatureflags do
3232
name: "adServiceFailure",
3333
description: "Fail ad service requests sporadically",
3434
enabled: false})
35+
36+
repo().insert(%Featureflagservice.FeatureFlags.FeatureFlag{
37+
name: "cartServiceFailure",
38+
description: "Fail cart service requests sporadically",
39+
enabled: false})
3540
end
3641

3742
defp execute_down do
3843
repo().delete(%Featureflagservice.FeatureFlags.FeatureFlag{name: "productCatalogFailure"})
3944
repo().delete(%Featureflagservice.FeatureFlags.FeatureFlag{name: "recommendationCache"})
4045
repo().delete(%Featureflagservice.FeatureFlags.FeatureFlag{name: "adServiceFailure"})
46+
repo().delete(%Featureflagservice.FeatureFlags.FeatureFlag{name: "cartServiceFailure"})
4147
end
4248
end

0 commit comments

Comments
 (0)