All notable changes to this project will be documented in this file.
For detailed release notes, please refer to the GitHub releases page.
- Improve the performance of push command when monitors are created or updated by chunking the monitors #666
- Add an example lightweight monitor yaml file when a new synthetics project is
created via
init
command #650
- Parse varying NDJSON chunked responses sizes from Kibana when the API endpoint is behind a proxy #680
- Skip adding empty values for locations when creating new synthetics project
using
init
command #658
-
Improve the validation of project monitor
schedule
for both browser and lightweight monitors. Error would be thrown if users would configure monitor schedule that are not supported. For lightweight monitors, we would save the schedule to the nearest supported schedule frequency #622Current allowed schedule values are 1, 3, 5, 10, 15, 30, 60 minutes respectively.
-
Improve the push command experience by showing the monitor management URL link once the push has been completed successfully #637
- Pick the correct loader when bundling TypeScript or JavaScript journey files during push command #626
- fix an issue in newer versions of sharp by creating separate sharp instance to produce screenshots data #623
In addition to pushing Project based browser monitors to Monitor management UI, the agent now supports pushing existing lightweight monitors directly from the heartbeat.yml
files #542. Users can directly import the existing heartbeat.yml
files in to their Synthetics project and configure the required project settings (Kibana host, auth key, locations, etc.) and run the push
command.
- Create a new Synthetics project using
npx @elastic/synthetics init <dir-name>
and configure the project related settings. - Copy the existing
heartbeat.yml
files in to the synthetics project directory. Example
// heartbeat.yml example
- type: http
enabled: true
id: my-monitor
name: My Monitor
urls: ["http://localhost:9200"]
schedule: @every 10m
locations: ["singapore"]
timeout: 16s
- Override the
schedule
,locations
andprivate locations
for specific monitors. Otherwise the defaults would be picked fromsynthetics.config.ts
files. - Run the push command
SYNTHETICS_API_KEY=<key> npm run push
.
- Playwright version has been updated to
1.26.0
, this means the tests will be run onGoogle Chrome/106.0.5249.30
.
- Transfer size of network requests now includes both the response header and body sizes #615
- Agent now prompts a warning question in interactive mode when users attempt to run push command without any active monitors which would nuke an entire project #598
- Users can suppress all prompt questions when running push command with
--yes
flag #602SYNTHETICS_API_KEY="key" npx @ealstic/synthetics push --yes
-
Synthetics push command now supports bundling external packages from
node_modules
folder for browser monitors, users can now use external packages utility packages likelodash, moment.js, etc,
in their synthetics scripts and push them instantaneously to Kibana. elastic#580Example journey code below using an external package
is-positive
from NPM.// test.journey.ts import { journey, step, monitor, expect } from '@elastic/synthetics'; import isPositive from 'is-positive'; journey('bundle test', ({ page, params }) => { step('check if positive', () => { expect(isPositive(4)).toBe(true); }); });
If you run
npm run push
inside the synthetics project, we would bundle the whole journey file along with the packageis-positive
to make the experience smooth. However, there are a few caveats when pushing external modules.- Packages that use native bindings will not work.
- Users cannot push bundles that are more than
800 Kilobytes
.
-
Introduce configuring project monitor settings in the Synthetics config file elastic#592. Comes in handy when running
push
command, users would be able to configure project-related settings likeprojectId
,kibana host
, andschedule
and save them for successive runs. -
Support the
SYNTHETICS_API_KEY
env variable for Kibana authentication when pushing monitors to Kibana elastic#588
Full Changelog: https://github.com/elastic/synthetics/compare/v1.0.0-beta.33...v1.0.0-beta.34
- Issue individual requests when pushing monitors to Kibana. This is to avoid timeout issues when monitors are pushed without streaming support #586
- Improve the scaffolding experience of
init
command by setting up a brand new synthetics project by automatically connecting to your Kibana instance. With this, creating synthetics monitors and pushing them to Kibana becomes a lot easier #566
npx @elastic/synthetics init [project]
cd <project> && SYNTHETICS_API_KEY=<api-key> npm run push
Setting up the project is a one time operation, Once the init command is done,
Synthetics agent stores the project releated settings under project.json
file.
From then, users can push all the synthetics monitors by specifying just the
authentication key. If users want to push the monitors under different Kibana
instance, project, spaces etc. They can do so by passing the CLI options
explicitly.
npx @elastic/synthetics --url <url> --project <name> --space <kibana-spaces>
- Introduce a new CLI command
locations
to list all the available public and private locations for running synthetic monitoring across the globe #571
// List all the available global locations managed by Elastic for
// running synthetics monitors
npx @elastic/synthetics locations
// List all managed locations as well as custom private locations
npx @elastic/synthetics locations --url <kibana-host> --auth <api-key>
- Warns when users accidently trying to push same sets of monitors under different project name #566
- Push command now can display progress in the terminal whenever monitors are created, updated and deleted along with errors #576
- Report error when monitors with duplicate ids are pushed to Kibana #568
- Allow CLI sub commands(push, locations, init) to receive common options #572
- Bundled push monitor contents must be idempotent, this caused performance issues in the Kibana side when monitors were updated everytime user ran the push command #579
- Report warnings in the terminal when Kibana fails to delete stale monitors #565
- Expose request context as part of the Journey if you want to make calls to the HTTP API of your application #555
- Push command fails to push the monitors in windows platform #553
- Use fixed playwright version to avoid running in to dependency issues #540
- Setup github workflow template correctly #529
- Stop pushing monitors on bundle errors #530
- Delete stale monitors by default on push command #534
- Allow controlling timeouts via actions #532
- Remove trailing slash from Kibana host #536
- Now that push only supports configurations in the current working directory, it also allows users to use the
--match
,--pattern
and--tags
flags to filter which journeys to push #523 - The
init
command now generates more detailed examples, and includes documentation reference #524
- Upgrade sharp version to avoid known vulnerabilities #519
- Update
source-map-support
so that we use correct filepaths when bundling and pushing monitors #520
- Use Kibana Uptime APIKeys instead of Basic Auth for pushing monitors #512
- Update all the available Synthetics test node locations #515
- Interactive scaffolding using the
npx @elastic/synthetics init <dir>
command, allows users to choose default test location and schedule for the monitors to be pushed to Kibana #508
- Write
.gitignore
files for scaffolding instead of managing under assets #510 - Preserve the original User-Agent string if the user configured the value and do not append 'Elastic/Synthetics' identifier #514
- Override the PlaywrightOptions when configured via CLI and Synthetics config file #517
- Introduce new
npx @elastic/synthetics push
command that allows users to manage the monitors in the Kibana Monitor Management UI from the command line #482 - Allow users to scaffolding a brand new Synthetics project from scratch using
the
npx @elastic/synthetics init
command #502 - Custom Reporter interface that allows for more extensability when building new reporters for the Synthetics runner #492
- Expose monitor DSL along with journey and step that allows configuring each individual monitors #493
- Use network events emitted from playwright browser context, This would allow the synthetics agent to capture network requests that are part of popups and other page objects #488
- Update the playwright to version
1.20.1
to address issues related to core dumps #485
- With the playwright update to version
1.20.1
, Synthetics agent offically dropped support for CentOS and Heartbeat images will be distributed based on ubuntu 20.04 which is supported by Playwright as well.
- Add location metadata for journeys and step #474
- Export Action type from the Synthetics formatter #454
- Enhance the synthetics formatter to control when the step begins and ends #457
- Add ability to add subcommands to the cli in #475
- Empty the write buffer before exit the Node.js process #446
- Reduce the network information data by writing only the necessary fields #466
- Do not override User agent string when doing device emulation #462
- Capture syntax errors inside inline journeys without throwing promise rejection errors #450
- Ensure
journey/end
is written to file descriptor by flushing out the last bytes in underlying stream #446 - Debug logs should be logged to stdout instead of using the reporter file descriptor #423
- Do not read configuration files for inline journeys unless a --config parameter is passed #426
- Stop runner from hanging indefinitely within ubuntu docker images [elastic/beats#29681] #441
- Remove 'suiteparams' CLI option which was depreacted in the previous releases.
Use
--params
instead #406
- Add support for
--playwright-options
CLI flag that lets user specify all browser and context options that Playwright supports in addition to passing it viasynthetics.config.js
file #405
- Timestamp of
journey/end
event reflects the time when the event happens instead of the time event was written to the output stream. This fixes issue when duration is calculated based onjourney/start
andjourney/end
#409 - Rewrite screenshot timestamp based on when screenshot was taken instead of when the screenshot was processed and reconstructed #411
- Revert to Playwright
1.14.0
as the newer versions of chromium breaks CentOS7. As a result of this revert, network events from other contexts like popups, iframes, tabs would not get captured #402
- Drop support for Node 12 #397
- Enable trace events when invoked via Heartbeat, enables step level metrics like FCP, LCP and other performance metrics for all journeys #387
- Use network events from playwright context which captures network requests from iframes, new tabs, etc. #372
- Add default network emulation for journeys to be able to capture performance
measurements more effectively. Default is 5Mbps download, 3Mbps Upload and 20ms latency.
Users can control network throttling with
--throttling '10d/2u/30l'
flag or can disable the throttling via--no-throttling
flag #284 - Add
Elastic/Synthetics
user-agent identifier to all network requests. This enables users to analyze traffic from Elastic Synthetic monitoring platform #232 - Introduce more assetion commands to formatter #385
- Account for page closing while capturing network events #398
- Bring back
--suite-params
flag support to support Heartbeat 7.15 #379
- Add step level tracing API which enables capturing performance metrics (core web vitals) for each navigation as part of the journey #369
- Capture all page errors and unhandled exceptions as part of the journeys #374
- Introduce synthetics script generator which can transform the recorder actions into code #375
- Add support for expect assertions for inline suites #365
- Add
ignore-https-errors
to the CLI to ignore any HTTPS errors during navigation #361
- Drop support for Heartbeat 7.13 #354
- Add quiet mode for Heartbeat via
--quiet-exit-code
and make it default for > 7.14 Heartbeat versions #357
- Record correct screenshots for popups in new tabs and windows #353
- Capture URL correctly for steps that involve navigations inside popups and windows #352
- Populate journey id when its not explicitly specified #346
- Remove Node.js 12 version restriction #343
- Capture screenshots correctly when using device emulation #340
- Deprecate 'suiteparams' infavor of 'params' #331
- Bring
--network
flag back till 7.14 is released #336
- Bring
--json
flag back till 7.14 is released #333
- Add support for passing playwright context and browser options via synthetics config #317
- Compability bug with FS apis on Node 12 #328
- Add fallback symbols for non utf8 support in windows #324
- Remove -e from CLI args and use
NODE_ENV
for controlling the environment #318
- Add new screenshots options -
on|off|only-on-failure
to manage capturing the step screenshots #311 - Enable screenshot deduplication feature by default when the agent is invoked via Heartbeat #322
- Avoid creating duplicate screenshot JSON docs for each journey #320
- Associate
beforeAll
hook errors across all journeys #316 - Provide journey isolation via context #314
- Capture all core-vitals and user experience metrics like FPC, LCP, CLS, User timing metrics, etc via chrome tracing #194
- Split the captured screenshot from each step in to 64 blocks to optimzie the storage when indexed the same block in Elaticsearch #290
- Add support for filtering journeys by name and tags #300
- Expose
expect
assetion method in the API #201 - Update Cumulative Layout Shift(CLS) metric based on
maximum session window with 1 second gap, capped at 5 seconds
#301 - Expose time taken to complete single step under
step.duration.us
#302 - Expose new capabilities via
--capability
through CLI options #295 - Add new flag
--rich-events
which mimicks heartbeat behaviour #289. - Expose suite parameters from CLI and config file to all hooks and journeys callbacks#272
- Move all of the trace events like FCP, LCP, User timings under
browser.relative_trace
#303 - Prioritize suite params from CLI over config file #298
- Report errors from
before
andafter
hooks #273
- Allow dynamic suite parameters configuration via
synthetics.config.{js|ts}
#270
- Improve execution time of test suites by spawning journeys in isolated context instead of launcing browser for each run #274
- Exclude all data URI requests from network events #267
- Default to JPEG images with quality 80 for individual step screenshots#233
- Keep journey callback types to be synchronous to match with how steps are executed synchronously#256
- Report correct page URL on navigation failures#255
NOTE: Playwright version is updated to 1.10.0
- Add support for custom reporters for the Synthetics runner #254
- Remove duplicate payload fields and keep the network fields under ECS #252
- Measure the network timings for aborted and inflight network requests correctly#251
- Record transfer size and resource size for all network events #220
- Report the number of journeys as part of the new
synthetics/metadata
event which would be used by heartbeat eventually for sharding #247
- Expose driver type information from the agent #239
Exposing the types allows developers to import the driver type information directly from the synthetics package instead of using via playwright specific packages which would result in inconsistent types (version mismatch or browser specific types).
- Move all the ECS specific fields under
root_fields
#164 - Add support for Junit reporter #149
- Expose status field for
step/end
andjourney/end
#230
- Disable chromium sandboxing by default #225
- Add runtime seccomp profiler for the synthetics agent #181