Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
ae56f79
Creating tests and a server for open telemetry within the pwa-kit-rea…
larnelleankunda Jun 20, 2025
b442012
Creating tests and a server for open telemetry within the pwa-kit-rea…
larnelleankunda Jun 20, 2025
6f50178
Updating my package lock.json file for the pwa-kit-react-sdk folder w…
larnelleankunda Jun 23, 2025
c6c1d89
Updated the open telemetry tests
larnelleankunda Jun 23, 2025
f03ca23
Linted open telemetry files
larnelleankunda Jun 23, 2025
245f60d
Linted open telemetry files
larnelleankunda Jun 23, 2025
a6d0bb7
Linted open telemetry files
larnelleankunda Jun 23, 2025
dc48667
updated open telemetry files
larnelleankunda Jun 25, 2025
e246905
Merge branch 'feature/opentelemetry' into W-18759755-opentelemetry-se…
larnelleankunda Jun 25, 2025
40c3da9
made changes to server and test files
larnelleankunda Jun 26, 2025
8095da0
made changes to server and test files
larnelleankunda Jun 26, 2025
6cc769a
made changes to server and test files
larnelleankunda Jun 27, 2025
c2f1b91
made changes to test files
larnelleankunda Jun 27, 2025
9130b9a
made changes to test and server files
larnelleankunda Jun 30, 2025
cb22899
Merge pull request #2617 from SalesforceCommerceCloud/W-18759755-open…
larnelleankunda Jul 1, 2025
17a3b2b
Created opentelemetry.js file with utility functions to log OTel span…
larnelleankunda Jul 2, 2025
cae20be
Updated change log file
larnelleankunda Jul 2, 2025
682baf4
Merge branch 'feature/opentelemetry' into W-18759774-opentelemetry-util
larnelleankunda Jul 2, 2025
20eb9b4
initial file
jeremy-jung1 Jul 2, 2025
abbcf6d
Linted utility and test files
larnelleankunda Jul 2, 2025
c13f041
Linted utility and test files
larnelleankunda Jul 2, 2025
d3124b7
updated utility tests
larnelleankunda Jul 2, 2025
7b349b6
Uncomment global.performance
jeremy-jung1 Jul 2, 2025
07b1206
Merge branch 'W-18759774-opentelemetry-util' into W-18760780-performa…
jeremy-jung1 Jul 2, 2025
ea66f26
updated utility functions for open telemetry
larnelleankunda Jul 7, 2025
3326746
Some comments and namespacing
jeremy-jung1 Jul 7, 2025
051ea73
linting
jeremy-jung1 Jul 7, 2025
f801b5b
Some dev only flags and mods
jeremy-jung1 Jul 8, 2025
ce666ec
more info
jeremy-jung1 Jul 8, 2025
ef27e9c
More dev
jeremy-jung1 Jul 8, 2025
02cbb52
Update performance.test.js
jeremy-jung1 Jul 8, 2025
bb36629
remove some console logs
jeremy-jung1 Jul 8, 2025
1e905cf
Updates
jeremy-jung1 Jul 8, 2025
0dd809d
Update performance.test.js
jeremy-jung1 Jul 8, 2025
1e586d9
Dev mod
jeremy-jung1 Jul 8, 2025
1afef73
updated utility functions for open telemetry
larnelleankunda Jul 8, 2025
9a1e0ec
brought back open telemetry server files
larnelleankunda Jul 8, 2025
2c54543
brought back open telemetry server files
larnelleankunda Jul 8, 2025
01da556
brought back open telemetry server files
larnelleankunda Jul 8, 2025
f6ffadf
edited open telemetry js and test file
larnelleankunda Jul 9, 2025
48ff1b9
Add tests and more functionality
jeremy-jung1 Jul 9, 2025
299039c
Merge branch 'W-18759774-opentelemetry-util' into W-18760780-performa…
jeremy-jung1 Jul 9, 2025
0a83204
edited open telemetry server and test file
larnelleankunda Jul 10, 2025
dfb8812
Fix tests and add cleanup
jeremy-jung1 Jul 10, 2025
20b8c96
linting
jeremy-jung1 Jul 10, 2025
1d9a905
fix tests
jeremy-jung1 Jul 10, 2025
fc1f8f5
Merge branch 'W-18759774-opentelemetry-util' into W-18760780-performa…
jeremy-jung1 Jul 10, 2025
7171b8f
remove dev only changes and add more tests
jeremy-jung1 Jul 10, 2025
943a40c
Remove handling of detail being an object
jeremy-jung1 Jul 10, 2025
4072966
Some temporary? changes to get it to work
jeremy-jung1 Jul 10, 2025
6c5430d
Update config
jeremy-jung1 Jul 10, 2025
24b37e0
bundlesize increase
jeremy-jung1 Jul 11, 2025
6c301c5
Update CHANGELOG.md
jeremy-jung1 Jul 11, 2025
5a0f754
Update react-rendering.js
jeremy-jung1 Jul 11, 2025
d344dc9
reverting jest config changes
larnelleankunda Jul 11, 2025
c68195a
linted files
larnelleankunda Jul 11, 2025
4fa34a2
Merge pull request #2705 from SalesforceCommerceCloud/W-18759774-open…
larnelleankunda Jul 11, 2025
e8dc896
Apply feedback
jeremy-jung1 Jul 14, 2025
894549b
Apply feedback
jeremy-jung1 Jul 16, 2025
7cb6bc4
Enhancing observability by adding more granular tracing to the react.…
larnelleankunda Jul 16, 2025
0d75e65
Merge pull request #2722 from SalesforceCommerceCloud/W-18760780-perf…
jeremy-jung1 Jul 16, 2025
0aaec7a
updating change log
larnelleankunda Jul 16, 2025
763b6ca
updating change log
larnelleankunda Jul 17, 2025
335a0b1
linted files and re-wrote as well as removed some tests
larnelleankunda Jul 18, 2025
5e020e7
linted files and re-wrote as well as removed some tests
larnelleankunda Jul 18, 2025
c12b090
linted files and re-wrote as well as removed some tests
larnelleankunda Jul 18, 2025
7c9a845
Fixing flaky lighthouse test
larnelleankunda Jul 18, 2025
c09eae1
Fixing flaky lighthouse test and addressing reviews
larnelleankunda Jul 21, 2025
7773fdd
Fixing flaky lighthouse test and addressing reviews
larnelleankunda Jul 21, 2025
bde002a
Making sure functions from spike file are added and addressing reviews
larnelleankunda Jul 21, 2025
0d165e4
adjusting bundle size
larnelleankunda Jul 21, 2025
d99604b
adjusting bundle size
larnelleankunda Jul 22, 2025
4f42efc
updating template retail react app change log after adjusting bundle …
larnelleankunda Jul 22, 2025
54f78e7
addressed reviews
larnelleankunda Jul 23, 2025
6f1c4f2
linted files and updated open telemetry file
larnelleankunda Jul 28, 2025
774e2b8
added tests to meet coverage and linted files
larnelleankunda Jul 29, 2025
b271958
added tests to meet coverage and linted files
larnelleankunda Jul 29, 2025
bd3ddc4
added tests to meet coverage and linted files
larnelleankunda Jul 29, 2025
7b72e9e
added tests to meet coverage and linted files
larnelleankunda Jul 29, 2025
eaa434d
linted files and updated open telemetry file
larnelleankunda Jul 29, 2025
c7272f1
linted files and updated open telemetry file
larnelleankunda Jul 29, 2025
c65cd0d
linted files and updated open telemetry file
larnelleankunda Jul 29, 2025
66fc626
Merge branch 'feature/opentelemetry' into W-18760633-react-rendering1
larnelleankunda Jul 29, 2025
ac83343
linted files and updated open telemetry file
larnelleankunda Jul 29, 2025
9d96d50
added tests and linted files
larnelleankunda Jul 29, 2025
87ed6d5
added tests and linted files
larnelleankunda Jul 29, 2025
4b5b7ac
made sure the logs output span data without the open telemetry span d…
larnelleankunda Jul 30, 2025
1b0259e
made sure the logs output span data without the open telemetry span d…
larnelleankunda Jul 30, 2025
7948946
made sure the logs output span data without the open telemetry span d…
larnelleankunda Jul 30, 2025
0f7c8a2
made sure the logs output span data without the open telemetry span d…
larnelleankunda Jul 30, 2025
44af93c
removing duplicate span names from monitoring cloud
larnelleankunda Jul 30, 2025
7e70ce5
removing duplicate span names from monitoring cloudand making sure al…
larnelleankunda Jul 30, 2025
8c86d7a
updating open telemetry tests
larnelleankunda Jul 31, 2025
dbf5f66
addressing reviews and linting files
larnelleankunda Aug 3, 2025
d9fd6a2
addressing reviews and linting files
larnelleankunda Aug 3, 2025
dce3111
addressing reviews and linting files
larnelleankunda Aug 3, 2025
f4c43f3
making sure duplicates dont show in monitoring cloud
larnelleankunda Aug 4, 2025
d5c2f5a
making sure duplicates dont show in monitoring cloud
larnelleankunda Aug 4, 2025
62911c4
adressing reviews
larnelleankunda Aug 5, 2025
dcd19f5
addressed reviews and made sure spans are showing on monitoring cloud…
larnelleankunda Aug 7, 2025
4c26116
addressed reviews and made sure spans are showing on monitoring cloud…
larnelleankunda Aug 7, 2025
479759c
reverting a package.json change
larnelleankunda Aug 7, 2025
3a111f5
addressing reviews
larnelleankunda Aug 7, 2025
c6de2f3
addressing reviews
larnelleankunda Aug 8, 2025
a59a4f2
addressing reviews
larnelleankunda Aug 8, 2025
04704d7
addressing reviews
larnelleankunda Aug 8, 2025
9659a6d
addressing reviews
larnelleankunda Aug 8, 2025
10cfe2d
Remove indentations
jeremy-jung1 Aug 13, 2025
ece79ec
try removing node env checks
jeremy-jung1 Aug 13, 2025
6654144
linting
jeremy-jung1 Aug 13, 2025
e2d325d
remove some new lines
jeremy-jung1 Aug 13, 2025
c715911
remove unnecessary change
jeremy-jung1 Aug 14, 2025
23485f5
Remove unused functions
jeremy-jung1 Aug 15, 2025
7437757
Fix duration issue
jeremy-jung1 Aug 18, 2025
ce2a0d1
Remove changelog from retail app
jeremy-jung1 Aug 18, 2025
5aba23f
Modify changelog
jeremy-jung1 Aug 19, 2025
7fb0ef8
Merge pull request #2834 from SalesforceCommerceCloud/W-18760633-reac…
jeremy-jung1 Aug 19, 2025
6473a3b
@W-18760799 - E2E tests for SSR logs with B3-Traceid header (#3028)
larnelleankunda Aug 19, 2025
f3ba1fb
Merge with develop
jeremy-jung1 Aug 19, 2025
b16d3c3
Merge branch 'develop' into feature/opentelemetry
jeremy-jung1 Aug 19, 2025
79ce761
A changelog change
jeremy-jung1 Aug 19, 2025
56471ae
Updates supporting SERVER_TIMING env var, fix x-b3 headers sometimes …
jeremy-jung1 Aug 20, 2025
fb2b718
Merge branch 'develop' into feature/opentelemetry
jeremy-jung1 Aug 20, 2025
097e7d3
Bring back performanceTimer.log
jeremy-jung1 Aug 20, 2025
0b828c0
Update CHANGELOG.md
jeremy-jung1 Aug 21, 2025
310c2e1
Address some feedback
jeremy-jung1 Aug 25, 2025
70b1958
linting
jeremy-jung1 Aug 25, 2025
90b5fea
Decrease bundlesize by separating server-side logic
jeremy-jung1 Aug 25, 2025
5a2c6a2
Remove stack traces
jeremy-jung1 Aug 25, 2025
0b145cb
Merge branch 'develop' into feature/opentelemetry
jeremy-jung1 Aug 25, 2025
f391984
Update CHANGELOG.md
jeremy-jung1 Aug 25, 2025
a2e3d7c
Merge branch 'feature/opentelemetry' of github.com:SalesforceCommerce…
jeremy-jung1 Aug 25, 2025
cc8a9cf
Remove unused package
jeremy-jung1 Aug 25, 2025
d82eed4
Update CHANGELOG.md
jeremy-jung1 Aug 25, 2025
137f6ca
Apply more feedback
jeremy-jung1 Aug 27, 2025
cec8762
linting
jeremy-jung1 Aug 27, 2025
a4ac6fe
more linting
jeremy-jung1 Aug 27, 2025
2d25d59
Merge branch 'develop' into feature/opentelemetry
jeremy-jung1 Aug 27, 2025
6e7cbe8
Comment out problematic job
jeremy-jung1 Aug 28, 2025
4d40c03
Merge branch 'develop' into feature/opentelemetry
jeremy-jung1 Aug 28, 2025
f12c6f5
Update e2e-pr.yml
jeremy-jung1 Aug 28, 2025
91daa60
Merge branch 'feature/opentelemetry' of github.com:SalesforceCommerce…
jeremy-jung1 Aug 28, 2025
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
363 changes: 182 additions & 181 deletions .github/workflows/e2e-pr.yml

Large diffs are not rendered by default.

148 changes: 148 additions & 0 deletions e2e/tests/opentelemetry-b3-tracing.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/*
* Copyright (c) 2025, Salesforce, Inc.
* All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/

const {test, expect} = require('@playwright/test')
const config = require('../config')
const {answerConsentTrackingForm} = require('../scripts/pageHelpers.js')

test.beforeEach(async ({page}) => {
// Enable request interception to capture headers
await page.route('**/*', async (route) => {
await route.continue()
})
})

test('should inject B3 headers when __server_timing param is passed', async ({page}) => {
const url = `${config.RETAIL_APP_HOME}?__server_timing=true`

const responseHeaders = []
page.on('response', (response) => {
if (response.url().includes(config.RETAIL_APP_HOME)) {
const headers = response.headers()
responseHeaders.push({
url: response.url(),
headers: headers
})
}
})

await page.goto(url)
await answerConsentTrackingForm(page)

expect(responseHeaders.length).toBeGreaterThan(0)

const mainResponse = responseHeaders.find(
(r) => r.url.includes(config.RETAIL_APP_HOME) && !r.url.includes('static')
)

if (mainResponse) {
expect(mainResponse.headers).toBeDefined()

expect(mainResponse.headers['x-b3-traceid']).toBeDefined()
expect(mainResponse.headers['x-b3-spanid']).toBeDefined()
expect(mainResponse.headers['x-b3-sampled']).toBe('1')

// Verify trace ID format (should be 16 or 32 character hex string)
const traceId = mainResponse.headers['x-b3-traceid']
expect(traceId).toMatch(/^[0-9a-f]{16}$|^[0-9a-f]{32}$/)

// Verify span ID format (should be 16 character hex string)
const spanId = mainResponse.headers['x-b3-spanid']
expect(spanId).toMatch(/^[0-9a-f]{16}$/)
}
})

test('should not show Server Timing header if __server_timing param is not passed', async ({
page
}) => {
const url = config.RETAIL_APP_HOME // No __server_timing param

const responseHeaders = []
page.on('response', (response) => {
if (response.url().includes(config.RETAIL_APP_HOME)) {
const headers = response.headers()
responseHeaders.push({
url: response.url(),
headers: headers
})
}
})

await page.goto(url)
await answerConsentTrackingForm(page)

expect(responseHeaders.length).toBeGreaterThan(0)

const mainResponse = responseHeaders.find(
(r) => r.url.includes(config.RETAIL_APP_HOME) && !r.url.includes('static')
)

expect(mainResponse).toBeDefined()
expect(mainResponse.headers['server-timing']).toBeUndefined()
})

test('should validate performance marks in Server-Timing header have numeric durations', async ({
page
}) => {
const url = `${config.RETAIL_APP_HOME}?__server_timing=true`

const responseHeaders = []
page.on('response', (response) => {
if (response.url().includes(config.RETAIL_APP_HOME)) {
const headers = response.headers()
responseHeaders.push({
url: response.url(),
headers: headers
})
}
})

await page.goto(url)
await answerConsentTrackingForm(page)

expect(responseHeaders.length).toBeGreaterThan(0)

const mainResponse = responseHeaders.find(
(r) => r.url.includes(config.RETAIL_APP_HOME) && !r.url.includes('static')
)

if (mainResponse && mainResponse.headers['server-timing']) {
const serverTiming = mainResponse.headers['server-timing']

// Parse timing entries and validate durations
const timingEntries = serverTiming.split(', ')
timingEntries.forEach((entry) => {
const match = entry.match(/^([^;]+);dur=(\d+\.\d+)$/)
expect(match).toBeTruthy()

const markName = match[1]
const duration = parseFloat(match[2])

// Duration should be a positive number
expect(duration).toBeGreaterThan(0)
expect(duration).toBeLessThan(10000) // Reasonable upper bound

// Should be one of the expected performance marks
// Handle various suffixes by extracting the base mark name
// Remove any suffix after the base mark name (e.g., .1, .useCategory-0, .useProductSearch-2)
const baseMarkName = markName
.replace(/\.(useCategory|useProductSearch|useQuery)-\d+$/, '')
.replace(/\.\d+$/, '')
const expectedMarks = [
'ssr.total',
'ssr.render-to-string',
'ssr.route-matching',
'ssr.load-component',
'ssr.fetch-strategies',
'ssr.fetch-strategies.react-query.pre-render',
'ssr.fetch-strategies.react-query.use-query',
'ssr.fetch-strategies.get-prop'
]
expect(expectedMarks).toContain(baseMarkName)
})
}
})
4 changes: 2 additions & 2 deletions packages/pwa-kit-dev/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
## v3.12.0-dev (Jul 22, 2025)
## v3.11.0 (Jul 22, 2025)-
- Exclude opentelemetry packages from client side bundling [#3133](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3133)
- Add support for environment level base paths on /mobify routes [#2892](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/2892)

## v3.11.0 (Jul 22, 2025)

## v3.10.0 (May 22, 2025)
- Support source map for both client and server on MRT [#240](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/2240)
- Fix dependencies vulnerabilities [#2338](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/2338)
Expand Down
22 changes: 22 additions & 0 deletions packages/pwa-kit-dev/src/configs/webpack/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,17 @@ const client =
entry: {
main: getAppEntryPoint()
},
// Exclude OpenTelemetry packages from client bundle (server-only)
externals: [
{
'@opentelemetry/api': 'commonjs @opentelemetry/api',
'@opentelemetry/core': 'commonjs @opentelemetry/core',
'@opentelemetry/sdk-trace-node': 'commonjs @opentelemetry/sdk-trace-node',
'@opentelemetry/sdk-trace-base': 'commonjs @opentelemetry/sdk-trace-base',
'@opentelemetry/propagator-b3': 'commonjs @opentelemetry/propagator-b3',
'@opentelemetry/resources': 'commonjs @opentelemetry/resources'
}
],
plugins: [
...config.plugins,
new LoadablePlugin({writeToDisk: true}),
Expand Down Expand Up @@ -464,6 +475,17 @@ const clientOptional = baseConfig('web')
...optional('core-polyfill', resolve(projectDir, 'node_modules', 'core-js')),
...optional('fetch-polyfill', resolve(projectDir, 'node_modules', 'whatwg-fetch'))
},
// Exclude OpenTelemetry packages from client bundle (server-only)
externals: [
{
'@opentelemetry/api': 'commonjs @opentelemetry/api',
'@opentelemetry/core': 'commonjs @opentelemetry/core',
'@opentelemetry/sdk-trace-node': 'commonjs @opentelemetry/sdk-trace-node',
'@opentelemetry/sdk-trace-base': 'commonjs @opentelemetry/sdk-trace-base',
'@opentelemetry/propagator-b3': 'commonjs @opentelemetry/propagator-b3',
'@opentelemetry/resources': 'commonjs @opentelemetry/resources'
}
],
// use source map to make debugging easier
devtool:
mode === development || process.env.PWA_KIT_SOURCE_MAP === 'true'
Expand Down
1 change: 1 addition & 0 deletions packages/pwa-kit-react-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
## v3.12.0-dev (Jul 22, 2025)
- Opentelemetry integration for SSR tracing [#3133](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3133)
- Add support for environment level base paths on /mobify routes [#2892](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/2892)

## v3.11.0 (Jul 22, 2025)
Expand Down
Loading
Loading