Skip to content

Commit cd368e8

Browse files
committed
[loadgenerator] added loadgeneratorFloodHomepage flagd
1 parent 9ffee33 commit cd368e8

File tree

4 files changed

+40
-1
lines changed

4 files changed

+40
-1
lines changed

docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ services:
378378
- OTEL_RESOURCE_ATTRIBUTES
379379
- OTEL_SERVICE_NAME=loadgenerator
380380
- PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
381+
- FLAGD_HOST
381382
depends_on:
382383
frontend:
383384
condition: service_started

src/flagd/demo.flagd.json

+9
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,15 @@
7878
"off": false
7979
},
8080
"defaultVariant": "off"
81+
},
82+
"loadgeneratorFloodHomepage": {
83+
"description": "Flood the frontend with a large amount of requests.",
84+
"state": "ENABLED",
85+
"variants": {
86+
"on": true,
87+
"off": false
88+
},
89+
"defaultVariant": "off"
8190
}
8291
}
8392
}

src/loadgenerator/locustfile.py

+27
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@
3333
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
3434
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
3535
from opentelemetry.sdk.resources import Resource
36+
37+
from openfeature import api
38+
from openfeature.contrib.provider.flagd import FlagdProvider
39+
40+
# TODO: once openfeature otel hook for python is released, this will work
41+
# from openfeature.contrib.hooks.otel import TracingHook
42+
3643
from playwright.async_api import Route, Request
3744

3845
logger_provider = LoggerProvider(resource=Resource.create(
@@ -64,6 +71,20 @@
6471
URLLib3Instrumentor().instrument()
6572
logging.info("Instrumentation complete")
6673

74+
# Initialize Flagd provider
75+
api.set_provider(FlagdProvider(host=os.environ.get('FLAGD_HOST', 'flagd'), port=os.environ.get('FLAGD_PORT', 8013)))
76+
77+
# Get flagd value
78+
def check_flagd(flag_name: str):
79+
# Initialize OpenFeature
80+
client = api.get_client()
81+
# TODO: once openfeature otel hook for python is released, this will work
82+
# api.add_hooks(TracingHook())
83+
return client.get_boolean_value("loadgeneratorFloodHomepage", False)
84+
85+
# Amount of iterations
86+
flood_count = int(os.environ.get("FLOOD_COUNT", 100))
87+
6788
categories = [
6889
"binoculars",
6990
"telescopes",
@@ -153,6 +174,12 @@ def checkout_multi(self):
153174
checkout_person["userId"] = user
154175
self.client.post("/api/checkout", json=checkout_person)
155176

177+
@task(5)
178+
def flood_home(self):
179+
if check_flagd("loadgeneratorFloodHomepage"):
180+
for _ in range(0, flood_count):
181+
self.client.get("/")
182+
156183
def on_start(self):
157184
ctx = baggage.set_baggage("synthetic_request", "true")
158185
context.attach(ctx)

src/loadgenerator/requirements.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ opentelemetry-proto==1.23.0
3030
opentelemetry-sdk==1.23.0
3131
opentelemetry-semantic-conventions==0.44b0
3232
opentelemetry-util-http==0.44b0
33-
protobuf==4.25.0
33+
openfeature-sdk==0.5.0
34+
openfeature-provider-flagd==0.1.3
35+
protobuf==4.25.2
3436
psutil==5.9.6
3537
pyzmq==25.1.1
3638
requests==2.31.0

0 commit comments

Comments
 (0)