Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
node-version: [20.x, 22.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,21 @@ jobs:
- uses: apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
with:
e2e-file: test/e2e.yaml
- name: Dump Docker State On Failure
if: failure()
run: |
echo "=== docker ps -a ==="
docker ps -a

for service in generate-traffic selenium-hub chrome provider testui ui oap; do
echo "=== logs for ${service} ==="
ids="$(docker ps -aq --filter "label=com.docker.compose.service=${service}")"
if [ -z "${ids}" ]; then
echo "No containers found for service ${service}"
continue
fi
for id in ${ids}; do
echo "--- container ${id} ---"
docker logs "${id}" || true
done
done
1,360 changes: 825 additions & 535 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"ts-loader": "^9.2.1",
"tslint": "^5.20.1",
"typescript": "^4.9.5",
"webpack": "^5.75.0",
"webpack": "^5.105.0",
"webpack-cli": "^5.0.1",
"webpack-concat-files-plugin": "^0.5.2",
"webpack-dev-server": "^5.2.1"
Expand Down
4 changes: 4 additions & 0 deletions test/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ services:
- e2e
expose:
- 4444
healthcheck:
disable: true
depends_on:
testui:
condition: service_started
Expand All @@ -94,6 +96,8 @@ services:
- e2e
volumes:
- /dev/shm:/dev/shm
healthcheck:
disable: true
depends_on:
selenium-hub:
condition: service_started
Expand Down
2 changes: 2 additions & 0 deletions test/docker/Dockerfile.generate-traffic
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ COPY docker/test.py .

RUN pip3 install selenium==4.9.1

ENV PYTHONUNBUFFERED=1

CMD ["python3", "/test.py"]
2 changes: 1 addition & 1 deletion test/docker/Dockerfile.provider
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

FROM python:3.7
FROM python:3.9
ARG SW_AGENT_PYTHON_COMMIT

WORKDIR /app
Expand Down
2 changes: 1 addition & 1 deletion test/docker/Dockerfile.test-ui
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

FROM node:18.12 AS builder
FROM node:22 AS builder

ADD . /skywalking-client-js
WORKDIR /skywalking-client-js
Expand Down
62 changes: 49 additions & 13 deletions test/docker/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,28 +15,64 @@

import os
import time
from urllib import request

from selenium import webdriver as wd
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities as DC
from selenium.webdriver.chrome.options import Options

hub_remote_url = os.environ.get("HUB_REMOTE_URL", "http://selenium-hub:4444/wd/hub")
test_url = os.environ.get("TEST_URL", "http://testui:80/")
retry_interval = int(os.environ.get("RETRY_INTERVAL", "5"))
page_interval = int(os.environ.get("PAGE_INTERVAL", "10"))
hub_status_url = os.environ.get("HUB_STATUS_URL", "http://selenium-hub:4444/wd/hub/status")


def log(message):
print(message, flush=True)


def test_screenshot():
try:
driver.get(test_url)
except Exception as e:
print(e)
log("Opening %s" % test_url)
driver.get(test_url)
log("Loaded %s" % driver.current_url)

try:
driver = wd.Remote(
command_executor=hub_remote_url,
desired_capabilities=DC.CHROME)

def wait_for_hub():
while True:
test_screenshot()
time.sleep(10)
try:
with request.urlopen(hub_status_url, timeout=5) as response:
body = response.read().decode("utf-8", errors="replace")
log("Selenium hub is ready: %s" % body)
return
except Exception as e:
log("Waiting for Selenium hub at %s: %s" % (hub_status_url, e))
time.sleep(retry_interval)

def create_driver():
wait_for_hub()
options = Options()
options.set_capability("browserName", "chrome")
log("Creating remote Chrome driver via %s" % hub_remote_url)
return wd.Remote(command_executor=hub_remote_url, options=options)

finally:
driver.quit()

driver = None

while True:
try:
if driver is None:
driver = create_driver()
log("Remote Chrome driver created")

test_screenshot()
time.sleep(page_interval)
except Exception as e:
log("Traffic generator loop failed: %s" % e)
if driver is not None:
try:
driver.quit()
log("Closed remote Chrome driver")
except Exception as quit_error:
log("Failed to close remote Chrome driver: %s" % quit_error)
driver = None
time.sleep(retry_interval)
42 changes: 21 additions & 21 deletions test/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ setup:
fi
cleanup:
# always never success failure
on: always
on: success

trigger:
action: http
Expand All @@ -65,79 +65,79 @@ verify:
cases:
# service
- expected: expected/service.yml
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser service ls test-ui
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser service ls test-ui 2>/dev/null
# version
- expected: expected/version.yml
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser version ls --service-name test-ui
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser version ls --service-name test-ui 2>/dev/null
# page
- expected: expected/page.yml
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser page ls --service-name test-ui
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser page ls --service-name test-ui 2>/dev/null
# browser error log
- expected: expected/error-log.yml
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser logs ls --service-name test-ui --version-name v1.0.0
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql browser logs ls --service-name test-ui --version-name v1.0.0 2>/dev/null
# browser service metrics
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_pv --service-id dGVzdC11aQ==.1 |yq e 'to_entries' -
--name=browser_app_pv --service-id dGVzdC11aQ==.1 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_error_sum --service-id dGVzdC11aQ==.1 |yq e 'to_entries' -
--name=browser_app_error_sum --service-id dGVzdC11aQ==.1 2>/dev/null |yq e 'to_entries' -
# browser version metrics
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_single_version_pv --service-id dGVzdC11aQ==.1 --instance-name v1.0.0 |yq e 'to_entries' -
--name=browser_app_single_version_pv --service-id dGVzdC11aQ==.1 --instance-name v1.0.0 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_single_version_error_sum --service-id dGVzdC11aQ==.1 --instance-name v1.0.0 |yq e 'to_entries' -
--name=browser_app_single_version_error_sum --service-id dGVzdC11aQ==.1 --instance-name v1.0.0 2>/dev/null |yq e 'to_entries' -
# browser page metrics
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_pv --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_pv --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_error_sum --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_error_sum --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_js_error_sum --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_js_error_sum --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
# # browser performance metrics
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_dom_analysis_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_dom_analysis_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_dom_ready_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_dom_ready_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_load_page_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_load_page_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear \
--name=browser_app_page_ttl_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries' -
--name=browser_app_page_ttl_avg --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries' -
- expected: expected/metrics-has-value-percentile.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear \
--name=browser_app_page_dom_ready_percentile --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
--name=browser_app_page_dom_ready_percentile --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
- expected: expected/metrics-has-value-percentile.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear \
--name=browser_app_page_load_page_percentile --service-id dGVzdC11aQ==.1 --endpoint-name index.html |yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
--name=browser_app_page_load_page_percentile --service-id dGVzdC11aQ==.1 --endpoint-name index.html 2>/dev/null |yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
# dependency service
- expected: expected/dependency.yml
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql dependency service --service-id dGVzdC11aQ==.1
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql dependency service --service-id dGVzdC11aQ==.1 2>/dev/null
# trace
- expected: expected/traces.yml
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace ls
query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace ls 2>/dev/null
- expected: expected/trace-detail.yml
query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace $( \
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace ls | grep -A 5 'index.html' | tail -n1 | awk -F ' ' '{print $2}')
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace ls 2>/dev/null | grep -A 5 'index.html' | tail -n1 | awk -F ' ' '{print $2}') 2>/dev/null
1 change: 0 additions & 1 deletion webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
* limitations under the License.
*/
const path = require('path');
const webpack = require('webpack');
const WebpackConcatPlugin = require('webpack-concat-files-plugin');

const isDev = process.env.NODE_ENV !== 'production';
Expand Down
Loading