@elastic/synthetics 1.0.0-beta.2 → 1.0.0-beta.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.md +235 -0
  2. package/NOTICE.txt +250 -0
  3. package/README.md +2 -1
  4. package/dist/cli.js +87 -56
  5. package/dist/cli.js.map +1 -1
  6. package/dist/common_types.d.ts +116 -14
  7. package/dist/common_types.d.ts.map +1 -1
  8. package/dist/config.d.ts +2 -5
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +5 -5
  11. package/dist/config.js.map +1 -1
  12. package/dist/core/browser-service.js +5 -5
  13. package/dist/core/browser-service.js.map +1 -1
  14. package/dist/core/expect.d.ts +177 -0
  15. package/dist/core/expect.d.ts.map +1 -0
  16. package/dist/core/expect.js +33 -0
  17. package/dist/core/expect.js.map +1 -0
  18. package/dist/core/gatherer.d.ts +4 -7
  19. package/dist/core/gatherer.d.ts.map +1 -1
  20. package/dist/core/gatherer.js +39 -12
  21. package/dist/core/gatherer.js.map +1 -1
  22. package/dist/core/index.d.ts +5 -5
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +2 -2
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/logger.d.ts +0 -1
  27. package/dist/core/logger.d.ts.map +1 -1
  28. package/dist/core/logger.js +3 -16
  29. package/dist/core/logger.js.map +1 -1
  30. package/dist/core/runner.d.ts +54 -45
  31. package/dist/core/runner.d.ts.map +1 -1
  32. package/dist/core/runner.js +181 -71
  33. package/dist/core/runner.js.map +1 -1
  34. package/dist/dsl/journey.d.ts +13 -4
  35. package/dist/dsl/journey.d.ts.map +1 -1
  36. package/dist/dsl/journey.js +40 -1
  37. package/dist/dsl/journey.js.map +1 -1
  38. package/dist/formatter/javascript.d.ts +73 -0
  39. package/dist/formatter/javascript.d.ts.map +1 -0
  40. package/dist/formatter/javascript.js +274 -0
  41. package/dist/formatter/javascript.js.map +1 -0
  42. package/dist/helpers.d.ts +33 -12
  43. package/dist/helpers.d.ts.map +1 -1
  44. package/dist/helpers.js +108 -54
  45. package/dist/helpers.js.map +1 -1
  46. package/dist/index.d.ts +8 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +6 -7
  49. package/dist/index.js.map +1 -1
  50. package/dist/parse_args.d.ts +5 -2
  51. package/dist/parse_args.d.ts.map +1 -1
  52. package/dist/parse_args.js +59 -16
  53. package/dist/parse_args.js.map +1 -1
  54. package/dist/plugins/browser-console.d.ts +5 -8
  55. package/dist/plugins/browser-console.d.ts.map +1 -1
  56. package/dist/plugins/browser-console.js +27 -8
  57. package/dist/plugins/browser-console.js.map +1 -1
  58. package/dist/plugins/network.d.ts +23 -20
  59. package/dist/plugins/network.d.ts.map +1 -1
  60. package/dist/plugins/network.js +149 -124
  61. package/dist/plugins/network.js.map +1 -1
  62. package/dist/plugins/performance.d.ts +5 -5
  63. package/dist/plugins/performance.d.ts.map +1 -1
  64. package/dist/plugins/performance.js +5 -5
  65. package/dist/plugins/performance.js.map +1 -1
  66. package/dist/plugins/plugin-manager.d.ts +11 -11
  67. package/dist/plugins/plugin-manager.d.ts.map +1 -1
  68. package/dist/plugins/plugin-manager.js +40 -24
  69. package/dist/plugins/plugin-manager.js.map +1 -1
  70. package/dist/plugins/tracing.d.ts +10 -25
  71. package/dist/plugins/tracing.d.ts.map +1 -1
  72. package/dist/plugins/tracing.js +40 -26
  73. package/dist/plugins/tracing.js.map +1 -1
  74. package/dist/reporters/base.d.ts +0 -1
  75. package/dist/reporters/base.d.ts.map +1 -1
  76. package/dist/reporters/base.js +34 -32
  77. package/dist/reporters/base.js.map +1 -1
  78. package/dist/reporters/json.d.ts +46 -59
  79. package/dist/reporters/json.d.ts.map +1 -1
  80. package/dist/reporters/json.js +188 -70
  81. package/dist/reporters/json.js.map +1 -1
  82. package/dist/reporters/junit.d.ts.map +1 -1
  83. package/dist/reporters/junit.js +7 -7
  84. package/dist/reporters/junit.js.map +1 -1
  85. package/dist/sdk/lh-trace-processor.d.ts +304 -0
  86. package/dist/sdk/lh-trace-processor.d.ts.map +1 -0
  87. package/dist/sdk/lh-trace-processor.js +832 -0
  88. package/dist/sdk/lh-trace-processor.js.map +1 -0
  89. package/dist/sdk/trace-metrics.d.ts +61 -0
  90. package/dist/sdk/trace-metrics.d.ts.map +1 -0
  91. package/dist/sdk/trace-metrics.js +252 -0
  92. package/dist/sdk/trace-metrics.js.map +1 -0
  93. package/dist/sdk/trace-processor.d.ts +106 -0
  94. package/dist/sdk/trace-processor.d.ts.map +1 -0
  95. package/dist/sdk/trace-processor.js +74 -0
  96. package/dist/sdk/trace-processor.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -1575
  98. package/package.json +27 -16
  99. package/src/cli.ts +68 -45
  100. package/src/common_types.ts +138 -14
  101. package/src/config.ts +2 -5
  102. package/src/core/expect.ts +187 -0
  103. package/src/core/gatherer.ts +48 -24
  104. package/src/core/index.ts +6 -6
  105. package/src/core/logger.ts +1 -12
  106. package/src/core/runner.ts +259 -112
  107. package/src/dsl/journey.ts +28 -6
  108. package/src/formatter/javascript.ts +330 -0
  109. package/src/helpers.ts +114 -24
  110. package/src/index.ts +7 -6
  111. package/src/parse_args.ts +97 -22
  112. package/src/plugins/browser-console.ts +30 -13
  113. package/src/plugins/network.ts +175 -159
  114. package/src/plugins/performance.ts +7 -7
  115. package/src/plugins/plugin-manager.ts +47 -36
  116. package/src/plugins/tracing.ts +43 -54
  117. package/src/reporters/base.ts +29 -23
  118. package/src/reporters/json.ts +259 -80
  119. package/src/reporters/junit.ts +1 -1
  120. package/src/sdk/lh-trace-processor.ts +1033 -0
  121. package/src/sdk/trace-metrics.ts +287 -0
  122. package/src/sdk/trace-processor.ts +147 -0
@@ -23,23 +23,11 @@
23
23
  *
24
24
  */
25
25
 
26
- import {
27
- CDPSession,
28
- chromium,
29
- ChromiumBrowser,
30
- ChromiumBrowserContext,
31
- Page,
32
- } from 'playwright-chromium';
26
+ import { chromium, ChromiumBrowser, BrowserContext } from 'playwright-chromium';
33
27
  import { PluginManager } from '../plugins';
34
28
  import { RunOptions } from './runner';
35
29
  import { log } from './logger';
36
-
37
- export type Driver = {
38
- browser: ChromiumBrowser;
39
- context: ChromiumBrowserContext;
40
- page: Page;
41
- client: CDPSession;
42
- };
30
+ import { Driver } from '../common_types';
43
31
 
44
32
  /**
45
33
  * Purpose of the Gatherer is to set up the necessary browser driver
@@ -49,36 +37,72 @@ export class Gatherer {
49
37
  static browser: ChromiumBrowser;
50
38
 
51
39
  static async setupDriver(options: RunOptions): Promise<Driver> {
40
+ log('Gatherer: setup driver');
41
+ const { wsEndpoint, playwrightOptions, networkConditions } = options;
42
+
52
43
  if (Gatherer.browser == null) {
53
- const { wsEndpoint, headless, sandbox = false } = options;
54
44
  if (wsEndpoint) {
55
45
  log(`Gatherer: connecting to WS endpoint: ${wsEndpoint}`);
56
- Gatherer.browser = await chromium.connect({ wsEndpoint });
46
+ Gatherer.browser = await chromium.connect(wsEndpoint);
57
47
  } else {
58
48
  Gatherer.browser = await chromium.launch({
59
- headless,
60
- chromiumSandbox: sandbox,
49
+ ...playwrightOptions,
50
+ args: [
51
+ ...(playwrightOptions?.headless ? ['--disable-gpu'] : []),
52
+ ...(playwrightOptions?.args ?? []),
53
+ ],
61
54
  });
62
55
  }
63
56
  }
64
- const context = await Gatherer.browser.newContext();
57
+ const context = await Gatherer.browser.newContext({
58
+ ...playwrightOptions,
59
+ userAgent: await Gatherer.getUserAgent(playwrightOptions?.userAgent),
60
+ });
61
+ await Gatherer.setNetworkConditions(context, networkConditions);
62
+
65
63
  const page = await context.newPage();
66
64
  const client = await context.newCDPSession(page);
67
65
  return { browser: Gatherer.browser, context, page, client };
68
66
  }
69
67
 
68
+ static async getUserAgent(userAgent?: string) {
69
+ const syntheticsIdentifier = ' Elastic/Synthetics';
70
+ if (!userAgent) {
71
+ const session = await Gatherer.browser.newBrowserCDPSession();
72
+ ({ userAgent } = await session.send('Browser.getVersion'));
73
+ }
74
+ return userAgent + syntheticsIdentifier;
75
+ }
76
+
77
+ static async setNetworkConditions(
78
+ context: BrowserContext,
79
+ networkConditions: RunOptions['networkConditions']
80
+ ) {
81
+ if (networkConditions) {
82
+ context.on('page', async page => {
83
+ const context = page.context();
84
+ const client = await context.newCDPSession(page);
85
+ await client.send(
86
+ 'Network.emulateNetworkConditions',
87
+ networkConditions
88
+ );
89
+ });
90
+ }
91
+ }
92
+
70
93
  /**
71
94
  * Starts recording all events related to the v8 devtools protocol
72
95
  * https://chromedevtools.github.io/devtools-protocol/v8/
73
96
  */
74
97
  static async beginRecording(driver: Driver, options: RunOptions) {
75
98
  log('Gatherer: started recording');
76
- const { filmstrips, network, metrics } = options;
99
+ const { network, metrics } = options;
77
100
  const pluginManager = new PluginManager(driver);
78
- pluginManager.start('browserconsole');
79
- filmstrips && (await pluginManager.start('trace'));
80
- network && (await pluginManager.start('network'));
81
- metrics && (await pluginManager.start('performance'));
101
+ pluginManager.registerAll(options);
102
+ const plugins = [await pluginManager.start('browserconsole')];
103
+ network && plugins.push(await pluginManager.start('network'));
104
+ metrics && plugins.push(await pluginManager.start('performance'));
105
+ await Promise.all(plugins);
82
106
  return pluginManager;
83
107
  }
84
108
 
package/src/core/index.ts CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  import { Journey, JourneyCallback, JourneyOptions } from '../dsl';
27
27
  import Runner from './runner';
28
- import { VoidCallback } from '../common_types';
28
+ import { VoidCallback, HooksCallback } from '../common_types';
29
29
  import { log } from './logger';
30
30
 
31
31
  /**
@@ -43,7 +43,7 @@ export const journey = (
43
43
  options: JourneyOptions | string,
44
44
  callback: JourneyCallback
45
45
  ) => {
46
- log(`register journey: ${options}`);
46
+ log(`register journey: ${JSON.stringify(options)}`);
47
47
  if (typeof options === 'string') {
48
48
  options = { name: options, id: options };
49
49
  }
@@ -57,22 +57,22 @@ export const step = (name: string, callback: VoidCallback) => {
57
57
  return runner.currentJourney?.addStep(name, callback);
58
58
  };
59
59
 
60
- export const beforeAll = (callback: VoidCallback) => {
60
+ export const beforeAll = (callback: HooksCallback) => {
61
61
  runner.addHook('beforeAll', callback);
62
62
  };
63
63
 
64
- export const afterAll = (callback: VoidCallback) => {
64
+ export const afterAll = (callback: HooksCallback) => {
65
65
  runner.addHook('afterAll', callback);
66
66
  };
67
67
 
68
- export const before = (callback: VoidCallback) => {
68
+ export const before = (callback: HooksCallback) => {
69
69
  if (!runner.currentJourney) {
70
70
  throw new Error('before is called outside of the journey context');
71
71
  }
72
72
  return runner.currentJourney.addHook('before', callback);
73
73
  };
74
74
 
75
- export const after = (callback: VoidCallback) => {
75
+ export const after = (callback: HooksCallback) => {
76
76
  if (!runner.currentJourney) {
77
77
  throw new Error('after is called outside of the journey context');
78
78
  }
@@ -23,20 +23,9 @@
23
23
  *
24
24
  */
25
25
 
26
- import SonicBoom from 'sonic-boom';
27
26
  import { grey, cyan, dim, italic } from 'kleur/colors';
28
27
  import { now } from '../helpers';
29
28
 
30
- const defaultFd = process.stdout.fd;
31
- let logger = new SonicBoom({ fd: defaultFd, sync: true });
32
-
33
- export const setLogger = (fd: number) => {
34
- if (fd && fd !== defaultFd) {
35
- logger = new SonicBoom({ fd });
36
- }
37
- return logger;
38
- };
39
-
40
29
  export function log(msg) {
41
30
  if (!process.env.DEBUG || !msg) {
42
31
  return;
@@ -45,5 +34,5 @@ export function log(msg) {
45
34
  msg = JSON.stringify(msg);
46
35
  }
47
36
  const time = dim(cyan(`at ${parseInt(String(now()))} ms `));
48
- logger.write(time + italic(grey(msg)) + '\n');
37
+ console.log(time + italic(grey(msg)) + '\n');
49
38
  }