Skip to content
Open
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 guides/esm-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ When migrating some of these projects away from the `ts-node` entry [see `@packa
- [ ] packages/server **PARTIAL** - many source/test files in JS. highest priority
- [ ] packages/socket **PARTIAL** - entry point is JS. Tests are JS
- [x] packages/stderr-filtering ✅ **COMPLETED**
- [ ] packages/telemetry **PARTIAL** - entry point is JS
- [x] packages/telemetry ✅ **COMPLETED**
- [ ] packages/ts **PARTIAL** - ultimate goal is removal and likely not worth the effort to convert
- [x] packages/types ✅ **COMPLETED**
- [x] packages/v8-snapshot-require
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import Toast, { POSITION } from 'vue-toastification'
import 'vue-toastification/dist/index.css'
import { createWebsocket } from './runner'
import { getRunnerConfigFromWindow } from './runner/get-runner-config-from-window'
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'

// Grab the time just before loading config to include that in the cypress:app span
const now = performance.now()
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/runner/event-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { useStudioStore } from '../store/studio-store'
import { getAutIframeModel } from '.'
import { handlePausing } from './events/pausing'
import { addTelemetryListeners } from './events/telemetry'
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'
import { addCaptureProtocolListeners } from './events/capture-protocol'
import { getRunnerConfigFromWindow } from './get-runner-config-from-window'
import { usePromptStore } from '../store/prompt-store'
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/runner/events/telemetry.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'

export const addTelemetryListeners = (Cypress: Cypress.Cypress) => {
Cypress.on('test:before:run', (attributes, test) => {
Expand Down
2 changes: 1 addition & 1 deletion packages/driver/src/cypress.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ import type { CachedTestState, ReporterRunState, RunState } from '@packages/type
import { DocumentDomainInjection } from '@packages/network/lib/document-domain-injection'
import { setSpecContentSecurityPolicy } from './util/privileged_channel'

import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'

const debug = debugFn('cypress:driver:cypress')

Expand Down
2 changes: 1 addition & 1 deletion packages/driver/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import './config/bluebird'
import './config/jquery'
import './config/lodash'
import $Cypress from './cypress'
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'

// Telemetry has already been initialized in the 'app' package
// but since this is a different package we have to link up the instances.
Expand Down
2 changes: 1 addition & 1 deletion packages/proxy/lib/network-proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export class NetworkProxy {
isVerbose: true,
})

await this.http.handleHttpRequest(req, res, span).finally(() => {
await this.http.handleHttpRequest(req, res, span || undefined).finally(() => {
span?.end()
})
}
Expand Down
4 changes: 4 additions & 0 deletions packages/telemetry/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cjs/
esm/
browser/
!src/browser
18 changes: 13 additions & 5 deletions packages/telemetry/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,18 +140,18 @@ const { OTLPTraceExporterIPC } = require('@packages/telemetry')

### Browser

To access the browser telemetry singleton use the browser export directly.
To access the browser telemetry singleton use the browser export.

```js
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'

telemetry.init({options})
```

The browser singleton is also stored on window, in some cases when the telemetry package is included in multiple packages you can use the `attach` method to retrieve and setup the singleton from the instance saved on window.

```js
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'

telemetry.attach()
```
Expand Down Expand Up @@ -198,7 +198,7 @@ const { telemetry } = require('@packages/telemetry')
Browser:

```js
import { telemetry } from '@packages/telemetry/src/browser'
import { telemetry } from '@packages/telemetry/browser/client'
```

### Spans
Expand Down Expand Up @@ -290,4 +290,12 @@ The metrics api is tbd.
## Open Telemetry Links

* [otel docs](https://opentelemetry.io/docs/)
* [otel sdk](https://open-telemetry.github.io/opentelemetry-js/index.html)
* [otel sdk](https://open-telemetry.github.io/opentelemetry-js/index.html)

### Bundling

For the frontend telemetry collector, we use `rollup` to bundle the telemetry collector for frontend consumption. This DOES ship with the binary.

For the server, we bundle a CommonJS version to be used in the Node.js context.

We also build an ESM version of `@packages/scaffold-config` for the `node` client but it isn't currently in use as the consumption server-side is CommonJS currently.
5 changes: 0 additions & 5 deletions packages/telemetry/index.js

This file was deleted.

26 changes: 18 additions & 8 deletions packages/telemetry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
"version": "0.0.0-development",
"description": "open telemetry wrapper used throughout the cypress monorepo to instrument the cypress app",
"private": true,
"main": "dist/node.js",
"browser": "src/browser.ts",
"main": "cjs/node.js",
"scripts": {
"build": "tsc",
"check-ts": "tsc --noEmit && yarn -s tslint",
"clean": "rimraf dist",
"build": "yarn build:esm && yarn build:cjs && yarn build:browser",
"build-prod": "yarn build",
"build:browser": "rimraf browser && rollup -c rollup.config.mjs",
"build:cjs": "rimraf cjs && tsc -p tsconfig.cjs.json",
"build:esm": "rimraf esm && tsc -p tsconfig.esm.json",
"check-ts": "tsc -p tsconfig.cjs.json --noEmit && yarn -s tslint -p tsconfig.cjs.json",
"clean": "rimraf esm cjs",
"clean-deps": "rimraf node_modules",
"test": "yarn test-unit",
"test-debug": "vitest --inspect-brk --no-file-parallelism --test-timeout=0",
"test-unit": "vitest run",
Expand All @@ -28,12 +32,18 @@
},
"devDependencies": {
"@packages/ts": "0.0.0-development",
"@rollup/plugin-typescript": "12.0.0",
"rimraf": "6.0.1",
"rollup": "4.52.0",
"typescript": "5.6.3",
"vitest": "^3.2.4"
},
"files": [
"dist",
"src"
"esm",
"cjs",
"browser"
],
"types": "src/node.ts",
"types": "cjs/node.d.ts",
"module": "esm/node.js",
"nx": {}
}
20 changes: 20 additions & 0 deletions packages/telemetry/rollup.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import typescript from '@rollup/plugin-typescript'

// inline all the values/imports from the entry point client.ts into the browser/client.js bundle
// and provides declarations for the browser/client.d.ts bundle
const config = [
{
input: 'src/client.ts',
output: {
file: 'browser/client.js',
format: 'esm',
},
plugins: [
typescript({
tsconfig: 'tsconfig.browser.json',
}),
],
},
]

export default config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Span, Attributes } from '@opentelemetry/api'
import type { startSpanOptions, findActiveSpanOptions, contextObject } from './index'
import { Telemetry as TelemetryClass, TelemetryNoop } from './index'
import type { startSpanOptions, findActiveSpanOptions, contextObject } from './telemetry/index'
import { Telemetry as TelemetryClass, TelemetryNoop } from './telemetry/index'
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'
import { browserDetectorSync } from '@opentelemetry/resources'
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
Expand Down
4 changes: 2 additions & 2 deletions packages/telemetry/src/node.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { Span } from '@opentelemetry/api'
import type { startSpanOptions, findActiveSpanOptions, contextObject } from './index'
import type { startSpanOptions, findActiveSpanOptions, contextObject } from './telemetry/index'
import {
envDetectorSync, hostDetectorSync, osDetectorSync, processDetectorSync,
} from '@opentelemetry/resources'
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'
import { circleCiDetectorSync } from './detectors/circleCiDetectorSync'
import { enabledValues, Telemetry as TelemetryClass, TelemetryNoop } from './index'
import { enabledValues, Telemetry as TelemetryClass, TelemetryNoop } from './telemetry/index'
import { OTLPTraceExporter as OTLPTraceExporterCloud } from './span-exporters/cloud-span-exporter'
import { OTLPTraceExporter as OTLPTraceExporterIpc } from './span-exporters/ipc-span-exporter'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import openTelemetry from '@opentelemetry/api'
import { detectResourcesSync, Resource } from '@opentelemetry/resources'
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'
import { OnStartSpanProcessor } from './processors/on-start-span-processor'
import { ConsoleTraceLinkExporter } from './span-exporters/console-trace-link-exporter'
import { OnStartSpanProcessor } from '../processors/on-start-span-processor'
import { ConsoleTraceLinkExporter } from '../span-exporters/console-trace-link-exporter'

import type { Span, SpanOptions, Tracer, Context, Attributes } from '@opentelemetry/api'
import type { BasicTracerProvider, SimpleSpanProcessor, BatchSpanProcessor, SpanExporter } from '@opentelemetry/sdk-trace-base'
Expand Down Expand Up @@ -350,29 +350,31 @@ export class Telemetry implements TelemetryApi {
* all operations.
*/
export class TelemetryNoop implements TelemetryApi {
startSpan () {
startSpan (arg: startSpanOptions): Span | undefined {
return undefined
}
getSpan () {
getSpan (name: string): Span | undefined {
return undefined
}
findActiveSpan () {
findActiveSpan (fn: findActiveSpanOptions): Span | undefined {
return undefined
}
endActiveSpanAndChildren () {
endActiveSpanAndChildren (span?: Span | undefined): void {
return undefined
}
getActiveContextObject (): contextObject {
return {}
}
getResources () {
getResources (): Attributes {
return {}
}
shutdown () {
shutdown (): Promise<void> {
return Promise.resolve()
}
getExporter () {
getExporter (): SpanExporter | undefined {
return undefined
}
setRootContext (rootContextObject?: contextObject): void {
return undefined
}
setRootContext () {}
}
4 changes: 2 additions & 2 deletions packages/telemetry/test/browser.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
global.window = {}

import { describe, it, expect, beforeAll } from 'vitest'
import { telemetry } from '../src/browser'
import { Telemetry as TelemetryClass } from '../src/index'
import { telemetry } from '../src/client'
import { Telemetry as TelemetryClass } from '../src/telemetry/index'

describe('telemetry is disabled', () => {
describe('init', () => {
Expand Down
Loading
Loading