Skip to content

Commit 66da810

Browse files
committed
[loadgenerator] added loadgeneratorFloodHomepage flagd
1 parent e18bb82 commit 66da810

File tree

5 files changed

+32
-1
lines changed

5 files changed

+32
-1
lines changed

docker-compose.minimal.yml

+1
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ services:
299299
- OTEL_RESOURCE_ATTRIBUTES
300300
- OTEL_SERVICE_NAME=loadgenerator
301301
- PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
302+
- FLAGD_HOST
302303
depends_on:
303304
frontend:
304305
condition: service_started

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": 100,
87+
"off": 0
88+
},
89+
"defaultVariant": "off"
8190
}
8291
}
8392
}

src/loadgenerator/locustfile.py

+18
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
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+
from openfeature.exception import OpenFeatureError
40+
3641
from playwright.async_api import Route, Request
3742

3843
logger_provider = LoggerProvider(resource=Resource.create(
@@ -64,6 +69,14 @@
6469
URLLib3Instrumentor().instrument()
6570
logging.info("Instrumentation complete")
6671

72+
# Initialize Flagd provider
73+
api.set_provider(FlagdProvider(host=os.environ.get('FLAGD_HOST', 'flagd'), port=os.environ.get('FLAGD_PORT', 8013)))
74+
75+
def get_flagd_value(FlagName):
76+
# Initialize OpenFeature
77+
client = api.get_client()
78+
return client.get_integer_value(FlagName, 0)
79+
6780
categories = [
6881
"binoculars",
6982
"telescopes",
@@ -153,6 +166,11 @@ def checkout_multi(self):
153166
checkout_person["userId"] = user
154167
self.client.post("/api/checkout", json=checkout_person)
155168

169+
@task(5)
170+
def flood_home(self):
171+
for _ in range(0, get_flagd_value("loadgeneratorFloodHomepage")):
172+
self.client.get("/")
173+
156174
def on_start(self):
157175
ctx = baggage.set_baggage("synthetic_request", "true")
158176
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)