diff --git a/CHANGELOG.md b/CHANGELOG.md index 044fdbe551..9fd345b405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ the release. * [load-generator] Change OpenFeature Evaluation to Remote Evaluation Protocol, based on [this issue in OpenFeature/python-sdk-contrib](https://github.com/open-feature/python-sdk-contrib/issues/198) ([#2114](https://github.com/open-telemetry/opentelemetry-demo/pull/2114)) +* [load-generator] Create well-named spans for each load task, to allow + enrichment with information like flag evaluations. + ([#2119](https://github.com/open-telemetry/opentelemetry-demo/pull/2119)) ## 2.0.1 diff --git a/src/load-generator/locustfile.py b/src/load-generator/locustfile.py index 4f86fe4b79..ceeb115a37 100644 --- a/src/load-generator/locustfile.py +++ b/src/load-generator/locustfile.py @@ -36,6 +36,7 @@ from openfeature import api from openfeature.contrib.provider.ofrep import OFREPProvider from openfeature.contrib.hook.opentelemetry import TracingHook +from opentelemetry.trace import Tracer from playwright.async_api import Route, Request @@ -106,16 +107,21 @@ def get_flagd_value(FlagName): class WebsiteUser(HttpUser): wait_time = between(1, 10) + # Creates a tracer from the global tracer provider + tracer = trace.get_tracer("load-generator") @task(1) + @tracer.start_as_current_span("view home") def index(self): self.client.get("/") @task(10) + @tracer.start_as_current_span("browse product") def browse_product(self): self.client.get("/api/products/" + random.choice(products)) @task(3) + @tracer.start_as_current_span("get recommendations") def get_recommendations(self): params = { "productIds": [random.choice(products)], @@ -123,6 +129,7 @@ def get_recommendations(self): self.client.get("/api/recommendations", params=params) @task(3) + @tracer.start_as_current_span("get ads") def get_ads(self): params = { "contextKeys": [random.choice(categories)], @@ -130,10 +137,12 @@ def get_ads(self): self.client.get("/api/data/", params=params) @task(3) + @tracer.start_as_current_span("view cart") def view_cart(self): self.client.get("/api/cart") @task(2) + @tracer.start_as_current_span("add to cart") def add_to_cart(self, user=""): if user == "": user = str(uuid.uuid1()) @@ -149,6 +158,7 @@ def add_to_cart(self, user=""): self.client.post("/api/cart", json=cart_item) @task(1) + @tracer.start_as_current_span("checkout with one item") def checkout(self): # checkout call with an item added to cart user = str(uuid.uuid1()) @@ -158,6 +168,7 @@ def checkout(self): self.client.post("/api/checkout", json=checkout_person) @task(1) + @tracer.start_as_current_span("checkout with multiple items") def checkout_multi(self): # checkout call which adds 2-4 different items to cart before checkout user = str(uuid.uuid1()) @@ -168,6 +179,7 @@ def checkout_multi(self): self.client.post("/api/checkout", json=checkout_person) @task(5) + @tracer.start_as_current_span("flood home") def flood_home(self): for _ in range(0, get_flagd_value("loadGeneratorFloodHomepage")): self.client.get("/")