mirror of
https://github.com/cypress-io/cypress.git
synced 2026-02-10 00:59:47 -06:00
* initial commit, a kinda working prototype * Ready to test in CI * "SyntaxError: Cannot use import statement outside a module" I blame VS code for always inserting the wrong dependency * try using built js instead of the ts file * typescript fixes? * get version correctly, don't use optional chaining in child process. * trying this, idk * try running telemetry for driver-integration-tests-chrome * fix missing spans, add more attributes for some spans * fix missing spans and add suite spans * types * Remove un-used require * remove spans for describe blocks in favor of the full title for tests * migrate to sync resource discovery, start new custom exporters for spans * encrypted * localhost * don't do things on child process * latest changes * update server start span time / add v8 snapshot span & update command span names * prepare for sync * don't send blank key * make telemetry work again for sending directly to honeycomb * web-socket exporter * Add in IPC exporter and message the child process before disconnecting * Use the cloud api by default * move cloud span exporter into telemetry package * shutdown fixes * fix enabled * improve types * run in ci * yml is the worst * type! * add spans for timing insights for visible areas of improvement * type errors * lets try sending data to staging * types * types again * remove problematic attributes * clean up exporters * i like this better even though it doesn't seem to matter much * some self review cleanup * Update comment * add debug messages * mocha tests * actually exit with the right code... oops * simple mistake... have to look into how to fix with ts... * try this i guess * don't return undefined * read me diagram * color? * no rect * moar diagram * docs! * formatting * build more binaries * Supposedly fix cypress in cypress test failures * test 'fixes' * try this instead * do not transpile cypress packages dir * lets try escaping our regex string * Add some diagnostics to help test the built binary.... * try a more complex solution * fix tests probably * just ignore the specific file * fix unit tests * cr updates * Apply suggestions from code review Co-authored-by: Matt Schile <mschile@cypress.io> Co-authored-by: Bill Glesias <bglesias@gmail.com> * Pr updates * don't change the command queue * move encoding and decoding telemetry context for ipc to the telemetry package * build darn it * plead for mercy from the testing gods, i merely wished to have named test reports, but clearly i have overreached. * pr updates, send record key * pr review * optional chaining fails tests * Apply suggestions from code review Co-authored-by: Bill Glesias <bglesias@gmail.com> * tests for cloud-span-exporter * bad merge * adding tests for the remaining exporters * note * docs * Correctly set test under the current run span for component testing * gate sending the message. * pr updates * finally, fingers crossed. --------- Co-authored-by: Emily Rohrbough <emilyrohrbough@yahoo.com> Co-authored-by: Matt Schile <mschile@cypress.io> Co-authored-by: Bill Glesias <bglesias@gmail.com>
83 lines
2.8 KiB
JavaScript
83 lines
2.8 KiB
JavaScript
const electronApp = require('./lib/util/electron-app')
|
|
const { telemetry, OTLPTraceExporterCloud } = require('@packages/telemetry')
|
|
const { apiRoutes } = require('./lib/cloud/routes')
|
|
const encryption = require('./lib/cloud/encryption')
|
|
|
|
// are we in the main node process or the electron process?
|
|
const isRunningElectron = electronApp.isRunning()
|
|
|
|
const pkg = require('@packages/root')
|
|
|
|
if (isRunningElectron) {
|
|
// To pass unencrypted telemetry data to an independent open telemetry endpoint,
|
|
// disable the encryption header, update the url, and add any other required headers.
|
|
// For example:
|
|
// const exporter = new OTLPTraceExporterCloud({
|
|
// url: 'https://api.honeycomb.io/v1/traces',
|
|
// headers: {
|
|
// 'x-honeycomb-team': 'key',
|
|
// },
|
|
// })
|
|
// See additional information here: https://github.com/cypress-io/cypress/blob/develop/packages/telemetry/README.md#otlptraceexportercloud
|
|
const exporter = new OTLPTraceExporterCloud({
|
|
url: apiRoutes.telemetry(),
|
|
encryption,
|
|
})
|
|
|
|
telemetry.init({
|
|
namespace: 'cypress:server',
|
|
version: pkg.version,
|
|
exporter,
|
|
})
|
|
|
|
const { debugElapsedTime } = require('./lib/util/performance_benchmark')
|
|
|
|
const v8SnapshotStartupTime = debugElapsedTime('v8-snapshot-startup-time')
|
|
const endTime = v8SnapshotStartupTime + global.cypressServerStartTime
|
|
|
|
telemetry.startSpan({ name: 'cypress', attachType: 'root', active: true, opts: { startTime: global.cypressBinaryStartTime } })
|
|
|
|
const v8SnapshotSpan = telemetry.startSpan({ name: 'v8snapshot:startup', opts: { startTime: global.cypressServerStartTime } })
|
|
|
|
v8SnapshotSpan?.end(endTime)
|
|
|
|
telemetry.startSpan({ name: 'binary:startup' })
|
|
}
|
|
|
|
const { patchFs } = require('./lib/util/patch-fs')
|
|
const fs = require('fs')
|
|
|
|
// prevent EMFILE errors
|
|
patchFs(fs)
|
|
|
|
// override tty if we're being forced to
|
|
require('./lib/util/tty').override()
|
|
|
|
if (process.env.CY_NET_PROFILE && isRunningElectron) {
|
|
const netProfiler = require('./lib/util/net_profiler')()
|
|
|
|
process.stdout.write(`Network profiler writing to ${netProfiler.logPath}\n`)
|
|
}
|
|
|
|
require('./lib/unhandled_exceptions').handle()
|
|
|
|
process.env.UV_THREADPOOL_SIZE = 128
|
|
|
|
if (isRunningElectron) {
|
|
require('./lib/util/process_profiler').start()
|
|
}
|
|
|
|
// warn when deprecated callback apis are used in electron
|
|
// https://github.com/electron/electron/blob/master/docs/api/process.md#processenablepromiseapis
|
|
process.enablePromiseAPIs = process.env.CYPRESS_INTERNAL_ENV !== 'production'
|
|
|
|
// don't show any electron deprecation warnings in prod
|
|
process.noDeprecation = process.env.CYPRESS_INTERNAL_ENV === 'production'
|
|
|
|
// always show stack traces for Electron deprecation warnings
|
|
process.traceDeprecation = true
|
|
|
|
require('./lib/util/suppress_warnings').suppress()
|
|
|
|
module.exports = require('./lib/cypress').start(process.argv)
|