Skip to content

Commit

Permalink
Added web browser traffic in loadgenerator (open-telemetry#1266)
Browse files Browse the repository at this point in the history
* Added playwright on load generator docker image

* Added locust plugins as a dependency

* Increased memory constrains and introduced LOCUST_BROWSER_TRAFFIC_ENABLED environment variable

* Added playwright user to generate browser traffic

* Updated changelog message

* Added skipping line + renamed event

* Downgraded greenlet to 3.0.0

---------

Co-authored-by: Juliano Costa <julianocosta89@outlook.com>
Co-authored-by: Austin Parker <austin@ap2.io>
  • Loading branch information
3 people committed Nov 28, 2023
1 parent d2e0db5 commit fd448b5
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 3 deletions.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ LOCUST_HOST=http://${FRONTEND_PROXY_ADDR}
LOCUST_WEB_HOST=loadgenerator
LOCUST_AUTOSTART=true
LOCUST_HEADLESS=false
LOCUST_BROWSER_TRAFFIC_ENABLED=false

# Payment Service
PAYMENT_SERVICE_PORT=50051
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ release.
([#1239](https://github.com/open-telemetry/opentelemetry-demo/pull/1239))
* update PHP quoteservice to use 1.0.0
([#1236](https://github.com/open-telemetry/opentelemetry-demo/pull/1236))
* enable browser traffic in loadgenerator using playwright ([#1266](https://github.com/open-telemetry/opentelemetry-demo/pull/1266))

## 1.6.0

Expand Down
3 changes: 2 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ services:
deploy:
resources:
limits:
memory: 120M
memory: 1G
restart: unless-stopped
ports:
- "${LOCUST_WEB_PORT}"
Expand All @@ -379,6 +379,7 @@ services:
- LOCUST_HOST
- LOCUST_HEADLESS
- LOCUST_AUTOSTART
- LOCUST_BROWSER_TRAFFIC_ENABLED
- OTEL_EXPORTER_OTLP_ENDPOINT
- OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
- OTEL_RESOURCE_ATTRIBUTES
Expand Down
4 changes: 3 additions & 1 deletion kubernetes/opentelemetry-demo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9818,6 +9818,8 @@ spec:
value: "false"
- name: LOCUST_AUTOSTART
value: "true"
- name: LOCUST_BROWSER_TRAFFIC_ENABLED
value: "false"
- name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
value: python
- name: OTEL_EXPORTER_OTLP_ENDPOINT
Expand All @@ -9826,7 +9828,7 @@ spec:
value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo
resources:
limits:
memory: 120Mi
memory: 1Gi
---
# Source: opentelemetry-demo/templates/component.yaml
apiVersion: apps/v1
Expand Down
2 changes: 2 additions & 0 deletions src/loadgenerator/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ WORKDIR /usr/src/app/
COPY --from=builder /reqs /usr/local
COPY ./src/loadgenerator/locustfile.py .
COPY ./src/loadgenerator/people.json .
ENV LOCUST_PLAYWRIGHT=1
RUN playwright install --with-deps chromium
ENTRYPOINT locust
33 changes: 33 additions & 0 deletions src/loadgenerator/locustfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@


import json
import os
import random
import uuid
from locust import HttpUser, task, between
from locust_plugins.users.playwright import PlaywrightUser, pw, PageWithRetry, event

from opentelemetry import context, baggage, trace
from opentelemetry.metrics import set_meter_provider
Expand Down Expand Up @@ -129,3 +131,34 @@ def on_start(self):
ctx = baggage.set_baggage("synthetic_request", "true")
context.attach(ctx)
self.index()


browser_traffic_enabled = os.environ.get('LOCUST_BROWSER_TRAFFIC_ENABLED', False)

if browser_traffic_enabled:
class WebsiteBrowserUser(PlaywrightUser):
headless = True # to use a headless browser, without a GUI
multiplier = 1 # run concurrent playwright sessions/browsers for each Locust user
wait_time = between(1, 10)

@task
@pw
async def open_cart_browser_page(self, page: PageWithRetry):
try:
async with event(self, "Load up Cart Page"):
await page.goto("/cart")
except:
pass

@task
@pw
async def open_home_browser_page(self, page: PageWithRetry):
try:
async with event(self, "Load up Astronomy Shop home page"):
await page.goto("/")
async with event(self, "Click on Go Shopping button"):
async with page.expect_navigation(wait_until="domcontentloaded"):
await page.click('button:has-text("Go Shopping")')
except:
pass

3 changes: 2 additions & 1 deletion src/loadgenerator/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ flask-cors==4.0.0
gevent==23.9.1
geventhttpclient==2.0.11
googleapis-common-protos==1.61.0
greenlet==3.0.1
greenlet==3.0.0
idna==3.4
itsdangerous==2.1.2
jinja2==3.1.2
locust_plugins==3.4.0
locust==2.18.2
markupsafe==2.1.3
msgpack==1.0.7
Expand Down

0 comments on commit fd448b5

Please sign in to comment.