+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
Resources
+
+ -
+
+ Grafana k6 Docs
+
+
+ -
+
+ Grafana Cloud k6 Docs
+
+
+ -
+
+ Extensions
+
+
+ -
+
+ Integrations
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+);
diff --git a/src/layouts/doc-layout/doc-layout.view.js b/src/layouts/doc-layout/doc-layout.view.js
index 60e4a887ec..efb9d7cb35 100644
--- a/src/layouts/doc-layout/doc-layout.view.js
+++ b/src/layouts/doc-layout/doc-layout.view.js
@@ -26,7 +26,7 @@ import {
} from 'react-cookie-banner';
import { childrenToList, isInIFrame } from 'utils';
import AlgoliaQueries from 'utils/algolia';
-import { main, app } from 'utils/urls';
+import { main } from 'utils/urls';
import styles from './doc-layout.module.scss';
import ArrowLeft from './svg/arrow-left.inline.svg';
@@ -378,8 +378,11 @@ export const DocLayout = ({
k6.io
-
- app.k6.io
+
+ Grafana Cloud k6
From eed3f192298dbec1d0a73b71076cbe995ceed8f6 Mon Sep 17 00:00:00 2001
From: Pepe Cano <825430+ppcano@users.noreply.github.com>
Date: Thu, 4 Jul 2024 12:53:37 +0200
Subject: [PATCH 03/11] Update header menu
---
gatsby-node.js | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/gatsby-node.js b/gatsby-node.js
index fdca45f847..1d304555d7 100644
--- a/gatsby-node.js
+++ b/gatsby-node.js
@@ -176,19 +176,11 @@ const getPageVersions = (
const topLevelLinks = [
{
label: 'guides',
- to: '/',
+ to: 'https://grafana.com/docs/k6/latest/',
},
{
label: 'JAVASCRIPT API',
- to: '/javascript-api/',
- submenu: [
- { label: 'k6 API', to: `/javascript-api/` },
- {
- label: 'xk6-disruptor',
- to: `/javascript-api/xk6-disruptor/`,
- },
- { label: 'jslib', to: `/javascript-api/jslib/` },
- ],
+ to: 'https://grafana.com/docs/k6/latest/javascript-api/',
},
{
label: 'Cloud Docs',
@@ -203,15 +195,15 @@ const topLevelLinks = [
},
{
label: 'Extensions',
- to: '/extensions/',
+ to: 'https://grafana.com/docs/k6/latest/extensions/',
},
{
label: 'Integrations',
- to: '/integrations/',
+ to: 'https://grafana.com/docs/k6/latest/misc/integrations/',
},
{
label: 'examples',
- to: '/examples/',
+ to: 'https://grafana.com/docs/k6/latest/examples/',
},
];
From 2b209378c3c32b5c878fd5d5053cfe8baecf69fe Mon Sep 17 00:00:00 2001
From: Pepe Cano <825430+ppcano@users.noreply.github.com>
Date: Thu, 4 Jul 2024 13:15:55 +0200
Subject: [PATCH 04/11] Update homepage
---
.../doc-welcome/use-cases/use-cases.view.js | 47 +++++++++++++------
src/templates/docs/guides.js | 15 +-----
2 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/src/components/pages/doc-welcome/use-cases/use-cases.view.js b/src/components/pages/doc-welcome/use-cases/use-cases.view.js
index a7f8e3d2c1..639f46a82b 100644
--- a/src/components/pages/doc-welcome/use-cases/use-cases.view.js
+++ b/src/components/pages/doc-welcome/use-cases/use-cases.view.js
@@ -1,6 +1,5 @@
import { Heading } from 'components/shared/heading';
import { useI18n } from 'contexts/i18n-provider';
-import { useLocale } from 'contexts/locale-provider';
import { Link } from 'gatsby';
import React from 'react';
@@ -8,7 +7,6 @@ import styles from './use-cases.module.scss';
export const UseCases = () => {
const { t } = useI18n();
- const { urlLocale } = useLocale();
return (
@@ -26,9 +24,7 @@ export const UseCases = () => {
spike
@@ -37,9 +33,7 @@ export const UseCases = () => {
stress
@@ -48,9 +42,7 @@ export const UseCases = () => {
soak tests
@@ -65,7 +57,10 @@ export const UseCases = () => {
{t('welcome.use-cases.browser-testing.pre-description')}
-
+
k6 browser
{t('welcome.use-cases.browser-testing.description')}
@@ -76,8 +71,15 @@ export const UseCases = () => {
{t('welcome.use-cases.chaos-testing.title')}
- {t('welcome.use-cases.chaos-testing.description')}
-
+ You can use k6 to simulate traffic as part of your chaos
+ experiments, trigger them from your k6 tests or inject different
+ types of faults in Kubernetes with{' '}
+
xk6-disruptor
.
@@ -87,7 +89,22 @@ export const UseCases = () => {
{t('welcome.use-cases.performance-monitoring.title')}
-
{t('welcome.use-cases.performance-monitoring.description')}
+
+ With k6, you can automate and schedule to trigger tests very
+ frequently with a small load to continuously validate the
+ performance and availability of your production environment. You can
+ also use{' '}
+
+ Grafana Cloud Synthetic Monitoring
+ {' '}
+ for a managed solution built specifically for synthetic monitoring
+ that supports k6 test scripts.
+
diff --git a/src/templates/docs/guides.js b/src/templates/docs/guides.js
index bd41628542..aa300b3fcb 100644
--- a/src/templates/docs/guides.js
+++ b/src/templates/docs/guides.js
@@ -1,13 +1,7 @@
import classNames from 'classnames';
import { DocPageNavigation } from 'components/pages/doc-page/doc-page-navigation';
import TableOfContents from 'components/pages/doc-page/table-of-contents';
-import {
- Features,
- Manifesto,
- Quickstart,
- WhatIs,
-} from 'components/pages/doc-welcome';
-import { K6DoesNot } from 'components/pages/doc-welcome/k6-does-not';
+import { WhatIs } from 'components/pages/doc-welcome';
import { UseCases } from 'components/pages/doc-welcome/use-cases';
import { PageInfo } from 'components/shared/page-info';
import { SEO } from 'components/shared/seo';
@@ -23,8 +17,7 @@ import { flattenSidebarTree } from 'utils/utils';
const pageInfo = {
en: {
title: 'Welcome to the k6 documentation',
- description:
- 'This documentation will help you go from a total beginner to a seasoned k6 expert!',
+ description: '',
},
es: {
title: 'Bienvenido a la documentación de k6',
@@ -66,12 +59,8 @@ const GuidesContent = ({
-
-
-
-
Date: Thu, 4 Jul 2024 15:29:27 +0200
Subject: [PATCH 05/11] Guides: add redirect and removed child pages
---
.../en/01 Get started/02 Installation.md | 1 +
.../02 Installation/01 Troubleshooting.md | 38 -
.../en/01 Get started/03 Running k6.md | 1 +
.../en/01 Get started/04 Results Output.md | 1 +
.../en/01 Get started/05 resources.md | 1 +
.../en/02 Using k6/01 HTTP requests.md | 1 +
.../en/02 Using k6/02 Metrics.md | 1 +
.../02 Using k6/02 Metrics/000-reference.md | 106 --
.../02 Metrics/100 Create custom metrics.md | 106 --
.../en/02 Using k6/03 Checks.md | 1 +
.../en/02 Using k6/04 Thresholds.md | 1 +
.../en/02 Using k6/05 k6 Options.md | 1 +
.../en/02 Using k6/05 k6 Options/01 How to.md | 227 ---
.../02 Using k6/05 k6 Options/02 Reference.md | 1507 -----------------
.../en/02 Using k6/06 Test lifecycle.md | 1 +
.../en/02 Using k6/07 Modules.md | 1 +
.../en/02 Using k6/08 Tags and Groups.md | 1 +
.../en/02 Using k6/09 Cookies.md | 1 +
.../en/02 Using k6/10 Protocols.md | 1 +
.../en/02 Using k6/10 Protocols/01 HTTP-2.md | 48 -
.../02 Using k6/10 Protocols/02 WebSockets.md | 205 ---
.../en/02 Using k6/10 Protocols/03 gRPC.md | 19 -
.../en/02 Using k6/10 Protocols/04 SSL-TLS.md | 36 -
...line Certificate Status Protocol -OCSP-.md | 78 -
.../04 SSL-TLS/SSL-TLS client certificates.md | 88 -
.../04 SSL-TLS/SSL-TLS version and ciphers.md | 136 --
.../02 Using k6/11 Environment variables.md | 1 +
.../12 Execution context variables.md | 1 +
.../en/02 Using k6/14 Scenarios.md | 1 +
.../02 Using k6/14 Scenarios/00 Concepts.md | 19 -
.../00 Concepts/00 Open-vs-closed.md | 126 --
.../00 Concepts/01 Graceful stop.md | 97 --
.../02 Arrival-rate VU allocation.md | 123 --
.../00 Concepts/03 Dropped iterations.md | 41 -
.../02 Using k6/14 Scenarios/01 Executors.md | 51 -
.../01 Executors/01 shared-iterations.md | 88 -
.../01 Executors/02 per-vu-iterations.md | 75 -
.../01 Executors/03 constant-vus.md | 69 -
.../01 Executors/04 ramping-vus.md | 107 --
.../01 Executors/05 constant-arrival-rate.md | 105 --
.../01 Executors/06 ramping-arrival-rate.md | 143 --
.../01 Executors/07 externally-controlled.md | 66 -
.../images/constant-arrival-rate.png | Bin 99858 -> 0 bytes
.../01 Executors/images/constant-vus.png | Bin 86157 -> 0 bytes
.../01 Executors/images/per-vu-iterations.png | Bin 80290 -> 0 bytes
.../images/ramping-arrival-rate.png | Bin 42084 -> 0 bytes
.../01 Executors/images/ramping-vus.png | Bin 129513 -> 0 bytes
.../01 Executors/images/shared-iterations.png | Bin 90422 -> 0 bytes
.../14 Scenarios/02 Advanced Examples.md | 199 ---
.../en/02 Using k6/17 HTTP debugging.md | 2 +
.../19 Javascript Compatibility Mode.md | 2 +
.../20 Workaround Iteration Duration.md | 64 -
.../en/03 Using k6 browser/01 Overview.md | 1 +
.../02 Running browser tests.md | 1 +
.../en/03 Using k6 browser/03 Metrics.md | 1 +
.../04 Migrating to k6 v0-46.md | 3 +-
.../100 Recommended Practices.md | 1 +
.../01 Page object model pattern.md | 96 --
.../02 Selecting elements.md | 32 -
.../en/04 Results output/000-Overview.md | 1 +
.../en/04 Results output/100 End-of-test.md | 1 +
.../100 End-of-test/150-custom-summary.md | 448 -----
.../en/04 Results output/200 Real-time.md | 1 +
.../200 Real-time/00 Amazon CloudWatch.md | 101 --
.../200 Real-time/00 Apache Kafka.md | 77 -
.../04 Results output/200 Real-time/00 CSV.md | 83 -
.../200 Real-time/00 Cloud.md | 146 --
.../200 Real-time/00 DataDog.md | 105 --
.../200 Real-time/00 Dynatrace.md | 59 -
.../200 Real-time/00 Elasticsearch.md | 77 -
.../00 Grafana Cloud Prometheus.md | 95 --
.../200 Real-time/00 InfluxDB.md | 57 -
.../200 Real-time/00 JSON.md | 146 --
.../200 Real-time/00 Netdata.md | 61 -
.../200 Real-time/00 NewRelic.md | 179 --
.../00 Prometheus remote write.md | 257 ---
.../200 Real-time/00 StatsD.md | 42 -
.../200 Real-time/00 TimescaleDB.md | 52 -
...-stream-k6-results-to-grafana-cloud-k6.png | Bin 482610 -> 0 bytes
.../CloudWatch/cloudwatch-k6-dashboard.png | Bin 54093 -> 0 bytes
.../CloudWatch/cloudwatch-k6-metrics.png | Bin 98974 -> 0 bytes
.../datadog-performance-testing-metrics.png | Bin 250193 -> 0 bytes
.../images/DataDog/k6-datadog-dashboard.png | Bin 181548 -> 0 bytes
.../images/Dynatrace/dynatrace-api-token.png | Bin 329131 -> 0 bytes
.../images/Dynatrace/dynatrace-k6-metrics.png | Bin 144569 -> 0 bytes
.../Dynatrace/dynatrace-k6-test-result.png | Bin 313368 -> 0 bytes
.../kibana-discover-test-result.png | Bin 401431 -> 0 bytes
...cloud_create_api_key_metrics_publisher.png | Bin 194077 -> 0 bytes
.../GrafanaCloud/grafana_cloud_explore_k6.png | Bin 96890 -> 0 bytes
.../grafana_cloud_explore_k6_metrics.png | Bin 397817 -> 0 bytes
...loud_explore_k6_metrics_from_extension.png | Bin 151982 -> 0 bytes
.../GrafanaCloud/grafana_cloud_portal.png | Bin 357265 -> 0 bytes
...grafana_cloud_prometheus_configuration.png | Bin 95503 -> 0 bytes
.../grafana-configure-graph-panel.png | Bin 437492 -> 0 bytes
.../grafana-create-data-source.png | Bin 659348 -> 0 bytes
.../images/InfluxDB-Grafana/grafana-dave.png | Bin 175308 -> 0 bytes
.../InfluxDB-Grafana/grafana-edit-metric.png | Bin 506560 -> 0 bytes
.../grafana-new-dashboard.png | Bin 368213 -> 0 bytes
.../grafana-new-graph-panel.png | Bin 175782 -> 0 bytes
.../grafana-visualization.png | Bin 460647 -> 0 bytes
.../influxdb-data-explorer-k6-bucket.png | Bin 138996 -> 0 bytes
.../images/NewRelic/new-relic-dashboard.png | Bin 1741258 -> 0 bytes
.../NewRelic/new-relic-data-explorer.png | Bin 572674 -> 0 bytes
.../k6-prometheus-dashboard-part1.png | Bin 518117 -> 0 bytes
.../k6-prometheus-dashboard-part2.png | Bin 487539 -> 0 bytes
.../Prometheus/k6-prometheus-dashboard.png | Bin 534117 -> 0 bytes
...list-provisioned-prometheus-dashboards.png | Bin 137738 -> 0 bytes
.../Prometheus/prom-dashboard-test-result.png | Bin 261035 -> 0 bytes
.../Prometheus/prom-metric-explorer.png | Bin 6986 -> 0 bytes
...ry-k6-metrics-in-the-prometheus-web-ui.png | Bin 124188 -> 0 bytes
.../TimescaleDB/dashboard-test-result.png | Bin 976032 -> 0 bytes
.../TimescaleDB/dashboard-test-runs.png | Bin 302459 -> 0 bytes
.../300 Grafana dashboards.md | 1 +
.../en/05 Test authoring/01 test builder.md | 1 +
.../02 Create tests from recordings.md | 1 +
.../01 Using the browser recorder.md | 45 -
.../02 Using the HAR converter.md | 159 --
.../images/Recording-a-test-script/step-2.png | Bin 34268 -> 0 bytes
.../images/Recording-a-test-script/step-3.png | Bin 32773 -> 0 bytes
.../images/Recording-a-test-script/step-4.png | Bin 126698 -> 0 bytes
.../images/session_recorder_filter_domain.png | Bin 58294 -> 0 bytes
.../session_recorder_filter_domain_list.png | Bin 104598 -> 0 bytes
.../images/session_recorder_save_as_har.png | Bin 140185 -> 0 bytes
.../07 Testing Guides/01 API load testing.md | 1 +
.../02 Automated performance testing.md | 1 +
.../03 Load testing websites.md | 1 +
.../04 Running large tests.md | 1 +
.../05 Running distributed tests.md | 1 +
.../en/08 Misc/01 Usage collection.md | 1 +
.../en/08 Misc/02 IntelliSense.md | 1 +
.../en/08 Misc/03 Fine tuning OS.md | 1 +
.../en/08 Misc/04 k6 REST API.md | 2 +
.../en/08 Misc/06 Archive.md | 1 +
.../en/08 Misc/09 Glossary.md | 1 +
.../translated-guides/en/Test Types.md | 3 +-
.../translated-guides/en/Testing Guides.md | 1 +
136 files changed, 48 insertions(+), 6286 deletions(-)
delete mode 100644 src/data/markdown/translated-guides/en/01 Get started/02 Installation/01 Troubleshooting.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/000-reference.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/100 Create custom metrics.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/01 How to.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/02 Reference.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/01 HTTP-2.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/02 WebSockets.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/03 gRPC.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/Online Certificate Status Protocol -OCSP-.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS client certificates.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS version and ciphers.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/00 Open-vs-closed.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/01 Graceful stop.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/02 Arrival-rate VU allocation.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/03 Dropped iterations.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/01 shared-iterations.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/02 per-vu-iterations.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/03 constant-vus.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/04 ramping-vus.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/05 constant-arrival-rate.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/06 ramping-arrival-rate.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/07 externally-controlled.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/constant-arrival-rate.png
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/constant-vus.png
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/per-vu-iterations.png
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/ramping-arrival-rate.png
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/ramping-vus.png
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/shared-iterations.png
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/02 Advanced Examples.md
delete mode 100644 src/data/markdown/translated-guides/en/02 Using k6/20 Workaround Iteration Duration.md
delete mode 100644 src/data/markdown/translated-guides/en/03 Using k6 browser/100 Recommended Practices/01 Page object model pattern.md
delete mode 100644 src/data/markdown/translated-guides/en/03 Using k6 browser/100 Recommended Practices/02 Selecting elements.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/100 End-of-test/150-custom-summary.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Amazon CloudWatch.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Apache Kafka.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 CSV.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Cloud.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 DataDog.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Dynatrace.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Elasticsearch.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Grafana Cloud Prometheus.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 InfluxDB.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 JSON.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Netdata.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 NewRelic.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 Prometheus remote write.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 StatsD.md
delete mode 100755 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/00 TimescaleDB.md
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Cloud/screenshot-stream-k6-results-to-grafana-cloud-k6.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/CloudWatch/cloudwatch-k6-dashboard.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/CloudWatch/cloudwatch-k6-metrics.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/DataDog/datadog-performance-testing-metrics.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/DataDog/k6-datadog-dashboard.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Dynatrace/dynatrace-api-token.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Dynatrace/dynatrace-k6-metrics.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Dynatrace/dynatrace-k6-test-result.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Elasticsearch/kibana-discover-test-result.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/GrafanaCloud/grafana_cloud_create_api_key_metrics_publisher.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/GrafanaCloud/grafana_cloud_explore_k6.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/GrafanaCloud/grafana_cloud_explore_k6_metrics.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/GrafanaCloud/grafana_cloud_explore_k6_metrics_from_extension.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/GrafanaCloud/grafana_cloud_portal.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/GrafanaCloud/grafana_cloud_prometheus_configuration.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-configure-graph-panel.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-create-data-source.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-dave.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-edit-metric.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-new-dashboard.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-new-graph-panel.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB-Grafana/grafana-visualization.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/InfluxDB/influxdb-data-explorer-k6-bucket.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/NewRelic/new-relic-dashboard.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/NewRelic/new-relic-data-explorer.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/k6-prometheus-dashboard-part1.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/k6-prometheus-dashboard-part2.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/k6-prometheus-dashboard.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/list-provisioned-prometheus-dashboards.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/prom-dashboard-test-result.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/prom-metric-explorer.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/Prometheus/query-k6-metrics-in-the-prometheus-web-ui.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/TimescaleDB/dashboard-test-result.png
delete mode 100644 src/data/markdown/translated-guides/en/04 Results output/200 Real-time/images/TimescaleDB/dashboard-test-runs.png
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/01 Using the browser recorder.md
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/02 Using the HAR converter.md
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/images/Recording-a-test-script/step-2.png
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/images/Recording-a-test-script/step-3.png
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/images/Recording-a-test-script/step-4.png
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/images/session_recorder_filter_domain.png
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/images/session_recorder_filter_domain_list.png
delete mode 100644 src/data/markdown/translated-guides/en/05 Test authoring/02 Create tests from recordings/images/session_recorder_save_as_har.png
diff --git a/src/data/markdown/translated-guides/en/01 Get started/02 Installation.md b/src/data/markdown/translated-guides/en/01 Get started/02 Installation.md
index d5d706f7ed..73005b0b5b 100644
--- a/src/data/markdown/translated-guides/en/01 Get started/02 Installation.md
+++ b/src/data/markdown/translated-guides/en/01 Get started/02 Installation.md
@@ -2,6 +2,7 @@
title: 'Installation'
excerpt: 'k6 has packages for Linux, Mac, and Windows. As alternatives, you can also using a Docker container or a standalone binary.'
canonicalUrl: https://grafana.com/docs/k6/latest/set-up/install-k6/
+redirect: https://grafana.com/docs/k6/latest/set-up/install-k6/
---
k6 has packages for Linux, Mac, and Windows. Alternatively, you can use a Docker container or a standalone binary.
diff --git a/src/data/markdown/translated-guides/en/01 Get started/02 Installation/01 Troubleshooting.md b/src/data/markdown/translated-guides/en/01 Get started/02 Installation/01 Troubleshooting.md
deleted file mode 100644
index 0e2cc9172c..0000000000
--- a/src/data/markdown/translated-guides/en/01 Get started/02 Installation/01 Troubleshooting.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: 'Troubleshooting'
-excerpt: 'Instructions to fix the most common installation issues.'
-canonicalUrl: https://grafana.com/docs/k6/latest/set-up/install-k6/troubleshooting/
----
-
-## System lacks ca-certificates or gnupg2
-
-Some Linux distributions don't come bundled with the `ca-certificates` and `gnupg2` packages.
-If you use such a distribution, you'll need to install them with:
-
-```bash
-sudo apt-get update && sudo apt-get install -y ca-certificates gnupg2
-```
-
-This example is for Debian/Ubuntu and derivatives. Consult your distribution's documentation if you use another one.
-
-
-## Behind a firewall or proxy
-
-Some users have reported that they can't download the key from Ubuntu's keyserver.
-When they run the `gpg` command, their firewalls or proxies block their requests to download.
-If this issue affects you, you can try this alternative:
-
-
-```bash
-curl -s https://dl.k6.io/key.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/k6-archive-keyring.gpg
-```
-
-
-## Old rpm-based Linux distributions
-
-Distributions like Amazon Linux 2 and CentOS before version 8 don't support the PGP V4 signature we use.
-You'll need to disable the verification when you install k6:
-
-```bash
-sudo yum install --nogpgcheck k6
-```
diff --git a/src/data/markdown/translated-guides/en/01 Get started/03 Running k6.md b/src/data/markdown/translated-guides/en/01 Get started/03 Running k6.md
index 6f85eef30a..a7fb26501d 100644
--- a/src/data/markdown/translated-guides/en/01 Get started/03 Running k6.md
+++ b/src/data/markdown/translated-guides/en/01 Get started/03 Running k6.md
@@ -2,6 +2,7 @@
title: 'Running k6'
excerpt: 'Follow along to learn how to run a test, add virtual users, increase the test duration, and ramp the number of requests up and down as the test runs.'
canonicalUrl: https://grafana.com/docs/k6/latest/get-started/running-k6/
+redirect: https://grafana.com/docs/k6/latest/get-started/running-k6/
---
Follow along to learn how to:
diff --git a/src/data/markdown/translated-guides/en/01 Get started/04 Results Output.md b/src/data/markdown/translated-guides/en/01 Get started/04 Results Output.md
index e39b13457d..62a02742d6 100644
--- a/src/data/markdown/translated-guides/en/01 Get started/04 Results Output.md
+++ b/src/data/markdown/translated-guides/en/01 Get started/04 Results Output.md
@@ -2,6 +2,7 @@
title: 'Results output'
excerpt: 'For basic tests, the top-level summary that k6 provides might be enough. For detailed analysis, you can stream all data your test outputs to an external source.'
canonicalUrl: https://grafana.com/docs/k6/latest/get-started/results-output/
+redirect: https://grafana.com/docs/k6/latest/get-started/results-output/
---
As k6 generates load for your test, it also makes _metrics_ that measure the performance of the system.
diff --git a/src/data/markdown/translated-guides/en/01 Get started/05 resources.md b/src/data/markdown/translated-guides/en/01 Get started/05 resources.md
index 33b41eae34..a9c69c6fb3 100644
--- a/src/data/markdown/translated-guides/en/01 Get started/05 resources.md
+++ b/src/data/markdown/translated-guides/en/01 Get started/05 resources.md
@@ -3,6 +3,7 @@ title: k6 resources
excerpt: 'An overview of the k6 resources beyond the k6 docs: videos, repositories, test servers, courses, and more'
slug: '/get-started/resources/'
canonicalUrl: https://grafana.com/docs/k6/latest/get-started/resources/
+redirect: https://grafana.com/docs/k6/latest/get-started/resources/
---
The docs aim to cover everything necessary to use the core k6 products in your daily operational work.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/01 HTTP requests.md b/src/data/markdown/translated-guides/en/02 Using k6/01 HTTP requests.md
index a7c646066e..2d39197584 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/01 HTTP requests.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/01 HTTP requests.md
@@ -2,6 +2,7 @@
title: 'HTTP Requests'
excerpt: 'Define the HTTP requests and methods you want to use. k6 adds tags to the requests, making it easier to filter results. You can customize tags as you wish.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/http-requests/
+redirect: https://grafana.com/docs/k6/latest/using-k6/http-requests/
---
When testers create new load test, the first step is often to define the HTTP requests to test the system with.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics.md b/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics.md
index ac23dbdc40..84293030ea 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics.md
@@ -2,6 +2,7 @@
title: 'Metrics'
excerpt: 'This section covers the important aspect of metrics management in k6. How and what kind of metrics k6 collects automatically (_built-in_ metrics), and what custom metrics you can make k6 collect.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/metrics/
+redirect: https://grafana.com/docs/k6/latest/using-k6/metrics/
---
_Metrics_ measure how a system performs under test conditions.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/000-reference.md b/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/000-reference.md
deleted file mode 100644
index 3e826e6bca..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/000-reference.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-title: Built-in metrics
-slug: '/using-k6/metrics/reference'
-excerpt: A reference of built-in metrics for different supported protocols.
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/metrics/reference/
----
-
-Every k6 test emits built-in and [Custom metrics](/using-k6/metrics/create-custom-metrics).
-Each supported protocol also has its specific metrics.
-
-## Standard built-in metrics.
-
-k6 always collects the following metrics, no matter what protocol the test uses:
-
-| Metric Name | Type | Description |
-|--------------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| vus | Gauge | Current number of active virtual users |
-| vus_max | Gauge | Max possible number of virtual users (VU resources are [pre-allocated](/using-k6/scenarios/concepts/arrival-rate-vu-allocation/), to avoid affecting performance when scaling up load ) |
-| iterations | Counter | The aggregate number of times the VUs execute the JS script (the `default` function). |
-| iteration_duration | Trend | The time to complete one full iteration, including time spent in `setup` and `teardown`. To calculate the duration of the iteration's function for the specific scenario, [try this workaround](/using-k6/workaround-to-calculate-iteration_duration) |
-| dropped_iterations | Counter | The number of iterations that weren't started due to lack of VUs (for the arrival-rate executors) or lack of time (expired maxDuration in the iteration-based executors). [About dropped iterations](/using-k6/scenarios/concepts/dropped-iterations/) |
-| data_received | Counter | The amount of received data. [This example covers how to track data for an individual URL](/examples/track-transmitted-data-per-url). |
-| data_sent | Counter | The amount of data sent. [Track data for an individual URL](/examples/track-transmitted-data-per-url) to track data for an individual URL. |
-| checks | Rate | The rate of successful checks.
-
-## HTTP-specific built-in metrics {#http}
-
-These metrics are generated only when the test makes HTTP requests.
-
-
-
-For all `http_req_*` metrics, **the timestamp is emitted the end of the request.**
-In other words, the timestamp happens when k6 receives the end of the response body, or the request times out.
-
-
-
-| Metric Name | Type | Description |
-|--------------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| http_reqs | Counter | How many total HTTP requests k6 generated. |
-| http_req_blocked | Trend | Time spent blocked (waiting for a free TCP connection slot) before initiating the request. `float` |
-| http_req_connecting | Trend | Time spent establishing TCP connection to the remote host. `float` |
-| http_req_tls_handshaking | Trend | Time spent handshaking TLS session with remote host |
-| http_req_sending | Trend | Time spent sending data to the remote host. `float` |
-| http_req_waiting | Trend | Time spent waiting for response from remote host (a.k.a. “time to first byte”, or “TTFB”). `float` |
-| http_req_receiving | Trend | Time spent receiving response data from the remote host. `float` |
-| http_req_duration | Trend | Total time for the request. It's equal to `http_req_sending + http_req_waiting + http_req_receiving` (i.e. how long did the remote server take to process the request and respond, without the initial DNS lookup/connection times). `float` |
-| http_req_failed | Rate | The rate of failed requests according to [setResponseCallback](/javascript-api/k6-http/setresponsecallback). |
-
-## Browser metrics {#browser}
-
-The [k6 browser module](/using-k6-browser) emits its own metrics based on the [Core Web Vitals](https://web.dev/vitals/#core-web-vitals).
-
-
-These core metrics will evolve over time when technology changes, but for now, k6 tracks the following core web vitals:
-
-
-| Core Web Vital | Description |
-|-----------------------|--------------------------------------------------------------------------------------------------------------|
-| browser_web_vital_lcp | Measures a page's loading performance. Please refer to [Largest Contentful Paint](https://web.dev/lcp/) for more information. |
-| browser_web_vital_fid | Measures a page's interactivity. Please refer to [First Input Delay](https://web.dev/fid/) for more information. |
-| browser_web_vital_cls | Measures a page's visual stability. Please refer to [Cumulative Layout Shift](https://web.dev/cls/) for more information. |
-
-
-### Other Web Vitals
-
-Apart from the Core Web Vitals, the browser module also reports [Other Web Vitals](https://web.dev/vitals/#other-web-vitals).
-
-
-| Other Web Vital | Description |
-|-------------------------------- |--------------------------------------------------------------------------------------------------------------|
-| browser_web_vital_ttfb | Measures the time it takes between the browser request and the start of the response from a server. Please refer to [Time to First Byte](https://web.dev/ttfb/) for more information.|
-| browser_web_vital_fcp | Measures the time it takes for the browser to render the first DOM element on the page, whether that's a text, image or header. Please refer to [First Contentful Paint](https://web.dev/fcp/) for more information. |
-| browser_web_vital_inp | An experimental metric that measures a page's responsiveness. Please refer to [Interaction to Next Paint](https://web.dev/inp/) for more information. |
-
-
-
-## Built-in WebSocket metrics {#websockets}
-
-`k6` emits the following metrics when interacting with a WebSocket service through the [`experimental`](/javascript-api/k6-experimental/websockets) or legacy websockets API.
-
-| Metric name | Type | Description |
-|---------------------|---------|--------------------------------------------------------------------------------------------------------------|
-| ws_connecting | Trend | Total duration for the WebSocket connection request. |
-| ws_session_duration | Trend | Duration of the WebSocket session. Time between the start of the connection and the end of the VU execution. |
-| ws_sessions | Counter | Total number of started WebSocket sessions. |
-| ws_ping | Trend | Duration between a ping request and its pong reception |
-| ws_msgs_sent | Counter | Total number of messages sent |
-| ws_msgs_received | Counter | Total number of messages received |
-
-## Built-in gRPC metrics {#grpc}
-
-k6 emits the following metrics when it interacts with a service through the [`gRPC`](https://k6.io/docs/javascript-api/k6-net-grpc/) API.
-
-| Metric Name | Type | Description |
-|------------------------------|---------|-------------------------------------------|
-| `grpc_req_duration` | Trend | Time to receive response from remote host |
-| `grpc_streams` | Counter | Total number of started streams |
-| `grpc_streams_msgs_sent` | Counter | Total number of messages sent |
-| `grpc_streams_msgs_received` | Counter | Total number of messages received |
-
-
-
-
-Steams-related metrics (`grpc_streams*`) are available only with using `k6/experimental/grpc` module which is available since `k6` version `0.45.0`.
-
-
\ No newline at end of file
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/100 Create custom metrics.md b/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/100 Create custom metrics.md
deleted file mode 100644
index 5b93684cf7..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/02 Metrics/100 Create custom metrics.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-title: Create custom metrics
-excerpt: How to build custom k6 metrics for each metric type.
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/metrics/create-custom-metrics/
----
-
-Besides the [built-in metrics](/using-k6/metrics/reference), you can create custom metrics.
-For example, you can compute a metric for your business logic, or use the [Response.timings](/javascript-api/k6-http/response) object to create a metric for a specific set of endpoints.
-
-Each metric type has a [constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor) to create a custom metric.
-The constructor creates a metric object of the declared type. Each type has an `add` method to take metric measurements.
-
-If you need help constructing a custom metric, read the following sections of this document.
-They document the procedure and provide examples.
-If you're comfortable with these already, you might prefer to read the [reference documentation for each metric constructor](/javascript-api/k6-metrics).
-Each topic has examples to make a custom metric and create [thresholds](/using-k6/thresholds) from it.
-
-## Create a custom metric
-
-
-
-Custom metrics must be created in [init context](/using-k6/test-lifecycle).
-This limits memory and ensures that k6 can validate that all thresholds are evaluating defined metrics.
-
-
-
-The generic procedure to create a custom metric is as follows:
-
-1. Import the [`k6/metrics`](/javascript-api/k6-metrics/) module.
- Optionally, specify the type of metrics you want to create with a named import:
-
- ```
- import { Counter } from 'k6/metrics';
- ```
-
-1. In init context, construct a new custom-metric object.
-
- For example, the following creates a custom trend. The object in the script is called `myTrend`, and its metric appears in the results output as `waiting_time`.
-
- ```
- const myTrend = new Trend('waiting_time');
- ```
-
-1. In the VU iteration code, use the `add` method to take a measurement.
-
-## Example: create a trend metric for waiting time
-
-This VU code makes a request then adds the timing value of the request to the `myTrend` object.
-
-
-
-```javascript
-import http from 'k6/http';
-import { Trend } from 'k6/metrics';
-
-const myTrend = new Trend('waiting_time');
-
-export default function () {
- const r = http.get('https://httpbin.test.k6.io');
- myTrend.add(r.timings.waiting);
- console.log(myTrend.name); // waiting_time
-}
-```
-
-
-
-## View custom metric results
-
-Custom metrics appear in [Results output](/results-output) in both the end-of-test summary and in the granular data points.
-Each metric type has specific aggregation methods.
-You can also optionally [tag](/using-k6/tags-and-groups) any value for a custom metric.
-You can use these tags to filter test results.
-
-Here's how the output of the preceding script might look in the end-of-test summary.
-Since the metric is a trend, k6 calculates various trends based on the number of values and their summation.
-
-
-
-```bash
-$ k6 run script.js
-
- ...
- INFO[0001] waiting_time source=console
-
- ...
- iteration_duration.............: avg=1.15s min=1.15s med=1.15s max=1.15s p(90)=1.15s p(95)=1.15s
- iterations.....................: 1 0.864973/s
- waiting_time...................: avg=265.245396 min=265.245396 med=265.245396 max=265.245396 p(90)=265.245396 p(95)=265.245396
-```
-
-
-
-
-
-Custom metrics are collected from VU threads only at the end of a VU iteration.
-For long-running scripts, custom metrics might appear only after the test runs a while.
-
-
-
-## Read more
-
-The [`k6/metrics`](/javascript-api/k6-metrics/) has examples for defining each type of custom metric, and for defining a threshold on the metric.
-- [Counter](/javascript-api/k6-metrics/counter)
-- [Gauge](/javascript-api/k6-metrics/gauge)
-- [Rate](/javascript-api/k6-metrics/rate)
-- [Trend](/javascript-api/k6-metrics/trend)
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/03 Checks.md b/src/data/markdown/translated-guides/en/02 Using k6/03 Checks.md
index d64d138d9e..c707c2c2fc 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/03 Checks.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/03 Checks.md
@@ -2,6 +2,7 @@
title: 'Checks'
excerpt: 'Checks are like asserts but differ in that they do not halt the execution, instead, they just store the result of the check, pass or fail, and let the script execution continue.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/checks/
+redirect: https://grafana.com/docs/k6/latest/using-k6/checks/
---
Checks validate boolean conditions in your test.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/04 Thresholds.md b/src/data/markdown/translated-guides/en/02 Using k6/04 Thresholds.md
index 2fb87b57cd..766a927146 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/04 Thresholds.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/04 Thresholds.md
@@ -2,6 +2,7 @@
title: 'Thresholds'
excerpt: 'Thresholds are a pass/fail criteria used to specify the performance expectations of the system under test.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/thresholds/
+redirect: https://grafana.com/docs/k6/latest/using-k6/thresholds/
---
Thresholds are the pass/fail criteria that you define for your test metrics.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options.md b/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options.md
index f2625db5b8..b04da822b9 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options.md
@@ -3,6 +3,7 @@ title: 'Options'
slug: '/using-k6/k6-options'
excerpt: 'Options configure test-run behavior. You can set options in multiple locations. Examples for how to use options, and a complete reference.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/k6-options/
+redirect: https://grafana.com/docs/k6/latest/using-k6/k6-options/
---
Options configure test-run behavior.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/01 How to.md b/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/01 How to.md
deleted file mode 100644
index 15317c3007..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/01 How to.md
+++ /dev/null
@@ -1,227 +0,0 @@
----
-title: 'How to use options'
-slug: '/using-k6/k6-options/how-to'
-excerpt: 'How to set options in different places (with examples), how to override options, and how to access the value of an option as the test runs.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/k6-options/how-to/
----
-
-k6 provides multiple places to set options:
-
-- In CLI flags
-- In environment variables
-- In the script `options` object
-- In a configuration file
-
-Most likely, your use case will determine where you want to set the particular options for a particular test.
-You can also access option values as your test runs.
-
-## Order of precedence {#order-of-precedence}
-
-![Options passed as command-line flags override all other options: defaults < script options < environment variables < command-line flags](../images/Options/order-of-precedence.png)
-
-You can set options in multiple places.
-If there are conflicts, k6 uses the option from the place with the highest _order of precedence_.
-
-1. First, k6 uses the option's default value.
-1. Next, k6 uses the options set in a configuration file via the `--config` flag.
-1. Then, k6 uses the script value (if set).
-1. After, k6 uses the environment variable (if set).
-1. Finally, k6 takes the value from the CLI flag (if set).
-
-That is, **command-line flags have the highest order of precedence**.
-
-## Where to set options
-
-Sometimes, how you set options is a matter of personal preference.
-Other times, the context of your test dictates the most sensible place to put your options.
-
-
-
-Options in the script to version control and keep tests tidy.
-: The script `options` object is generally the best place to put your options.
-This provides automatic version control, allows for easy reuse, and lets you modularize your script.
-
-CLI flags to set options on the fly
-: When you want to run a quick test, command-line flags are convenient.
-: You can also use command-line flags to override files in your script (as determined by the [order of precedence](#order-of-precedence)).
- For example, if your script file sets the test duration at 60 seconds, you could use a CLI flag to run a one-time shorter test.
- With a flag like `--duration 30s`, the test would be half as long but otherwise identical.
-
-Environment variables to set options from your build chain
-: For example, you could derive the option from a variable in your Docker container definition, CI UI, or vault—wherever you declare environment variables.
-: The [block hostnames](/using-k6/k6-options/reference#block-hostnames) option is an example of an option that works well with environment variables.
-
-
-
-## Examples of setting options
-
-The following JS snippets show some examples of how you can set options.
-
-### Set options in the script
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- hosts: { 'test.k6.io': '1.2.3.4' },
- stages: [
- { duration: '1m', target: 10 },
- { duration: '1m', target: 20 },
- { duration: '1m', target: 0 },
- ],
- thresholds: { http_req_duration: ['avg<100', 'p(95)<200'] },
- noConnectionReuse: true,
- userAgent: 'MyK6UserAgentString/1.0',
-};
-
-export default function () {
- http.get('http://test.k6.io/');
-}
-```
-
-
-
-
-### Set options with environment variables
-
-You can also set the options from the previous example through environment variables and command-line flags:
-
-
-
-```bash
-$ K6_NO_CONNECTION_REUSE=true K6_USER_AGENT="MyK6UserAgentString/1.0" k6 run script.js
-
-$ k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js
-```
-
-```bash
-C:\k6> set "K6_NO_CONNECTION_REUSE=true" && set "K6_USER_AGENT=MyK6UserAgentString/1.0" && k6 run script.js
-
-C:\k6> k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js
-```
-
-```bash
-PS C:\k6> $env:K6_NO_CONNECTION_REUSE=true; $env:K6_USER_AGENT="MyK6UserAgentString/1.0"; k6 run script.js
-
-PS C:\k6> k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js
-```
-
-
-
-### Set options from k6 variables
-
-With the `--env` flag, you can use the CLI to define k6 variables.
-Then, you can use the variable to dynamically define an option's value in the script file.
-
-For example, you could define a variable for your user agent like this:
-
-```
-k6 run script.js --env MY_USER_AGENT="hello"
-```
-
-Then, your script could then set the `userAgent` option based on the variable's value.
-This allows for quick configuration.
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- userAgent: __ENV.MY_USER_AGENT,
-};
-
-export default function () {
- http.get('http://test.k6.io/');
-}
-```
-
-
-
-> **Note**: Though this method uses the `--env` flag, this is not the same as using an environment variable.
-> For an explanation, refer to the [environment variables document](/using-k6/environment-variables).
-
-### Set options with the --config flag
-
-k6 includes a [default configuration file](/using-k6/k6-options/reference/#config) that you can edit, or you can create a new file and then use a CLI flag to point to that file.
-If you use it, the options take the _second lowest order of precedence_ (after defaults).
-If you set options anywhere else, they will override the `--config` flag options.
-
-Use the `--config` flag to declare the file path to your options.
-
-```bash
-k6 run --config options.json script.js
-```
-
-This command would set test options according to the values in the `options.json` file.
-
-
-
-```json
-{
- "hosts": {
- "test.k6.io": "1.2.3.4"
- },
- "stages": [
- {
- "duration": "1m",
- "target": 10
- },
- {
- "duration": "1m",
- "target": 30
- },
- {
- "duration": "1m",
- "target": 0
- }
- ],
- "thresholds": {
- "http_req_duration": ["avg<100", "p(95)<200"]
- },
- "noConnectionReuse": true,
- "userAgent": "MyK6UserAgentString/1.0"
-}
-```
-
-
-
-For an alternative way to separate configuration from logic, you can use the `JSON.parse()` method in your script file:
-
-```javascript
-// load test config, used to populate exported options object:
-const testConfig = JSON.parse(open('./config/test.json'));
-// combine the above with options set directly:
-export const options = testConfig;
-```
-
-## Get an option value from the script
-
-The `k6/execution` API provides a [test.options](/javascript-api/k6-execution/#test) object.
-With `test.options`, you can access the consolidated and derived options of your script as the test runs.
-
-A common use of this feature is to log the value of a tag, but there are many possibilities.
-For example, this script accesses the value of the test's current stage:
-
-
-
-```javascript
-import exec from 'k6/execution';
-
-export const options = {
- stages: [
- { duration: '5s', target: 100 },
- { duration: '5s', target: 50 },
- ],
-};
-
-export default function () {
- console.log(exec.test.options.scenarios.default.stages[0].target); // 100
-}
-```
-
-
-
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/02 Reference.md b/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/02 Reference.md
deleted file mode 100644
index 2b10b27bb3..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/05 k6 Options/02 Reference.md
+++ /dev/null
@@ -1,1507 +0,0 @@
----
-title: 'Options reference'
-slug: '/using-k6/k6-options/reference'
-excerpt: 'A complete list of all k6 options, with descriptions, defaults, and examples of how to set the option in your script, config files, environment variables, or CLI.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/k6-options/reference/
----
-
-Options define test-run behavior.
-Most options can be passed in multiple places.
-If an option is defined in multiple places, k6 chooses the value from the highest [order of precedence](/using-k6/k6-options/how-to#order-of-precedence).
-
-## Quick reference of options
-
-Each option has its own detailed reference in a separate section.
-
-| Option | Description |
-| --------------------------------------------------------- | ----------------------------------------------------------------------------------- |
-| [Address](#address) | Address of the REST API server |
-| [Batch](#batch) | Max number of simultaneous connections of a `http.batch()` call |
-| [Batch per host](#batch-per-host) | Max number of simultaneous connections of a `http.batch()` call for a host |
-| [Blacklist IP](#blacklist-ip) | Blacklist IP ranges from being called |
-| [Block hostnames](#block-hostnames) | Block any requests to specific hostnames |
-| [Compatibility mode](#compatibility-mode) | Support running scripts with different ECMAScript modes |
-| [Config](#config) | Specify the config file in JSON format to read the options values |
-| [Console output](#console-output) | Redirects logs logged by `console` methods to the provided output file |
-| [Discard response bodies](#discard-response-bodies) | Specify whether response bodies should be discarded |
-| [DNS](#dns) | Configure DNS resolution behavior |
-| [Duration](#duration) | A string specifying the total duration of the test run; together with the [vus option](#vus), it's a shortcut for a single [scenario](/using-k6/scenarios) with a [constant VUs executor](/using-k6/scenarios/executors/constant-vus) |
-| [Execution segment](#execution-segment) | Limit execution to a segment of the total test |
-| [Exit on running](#exit-on-running) | Exits when test reaches the running status |
-| [Extension options](#extension-options) | An object used to set configuration options for cloud parameters and third-party collectors |
-| [Hosts](#hosts) | An object with overrides to DNS resolution |
-| [HTTP debug](#http-debug) | Log all HTTP requests and responses |
-| [Include system Env vars](#include-system-env-vars) | Pass the real system environment variables to the runtime |
-| [Insecure skip TLS verify](#insecure-skip-tls-verify) | A boolean specifying whether k6 should ignore TLS verifications for connections established from code |
-| [Iterations](#iterations) | A number specifying a fixed number of iterations to execute of the script; together with the [vus option](#vus), it's a shortcut for a single [scenario](/using-k6/scenarios) with a [shared iterations executor](/using-k6/scenarios/executors/shared-iterations) |
-| [Linger](#linger) | A boolean specifying whether k6 should linger around after test run completion |
-| [Local IPs](#local-ips) | A list of local IPs, IP ranges, and CIDRs from which VUs will make requests |
-| [Log output](#log-output) | Configuration about where logs from k6 should be send |
-| [LogFormat](#logformat) | Specify the format of the log output |
-| [Max redirects](#max-redirects) | The maximum number of HTTP redirects that k6 will follow |
-| [Minimum iteration duration](#minimum-iteration-duration) | Specify the minimum duration for every single execution |
-| [No color](#no-color) | A boolean specifying whether colored output is disabled |
-| [No connection reuse](#no-connection-reuse) | A boolean specifying whether k6 should disable keep-alive connections |
-| [No cookies reset](#no-cookies-reset) | This disables resetting the cookie jar after each VU iteration |
-| [No summary](#no-summary) | disables the [end-of-test summary](/results-output/end-of-test/) |
-| [No setup](#no-setup) | A boolean specifying whether `setup()` function should be run |
-| [No teardown](#no-teardown) | A boolean specifying whether `teardown()` function should be run |
-| [No thresholds](#no-thresholds) | Disables threshold execution |
-| [No usage report](#no-usage-report) | A boolean specifying whether k6 should send a usage report |
-| [No VU connection reuse](#no-vu-connection-reuse) | A boolean specifying whether k6 should reuse TCP connections |
-| [Paused](#paused) | A boolean specifying whether the test should start in a paused state |
-| [Quiet](#quiet) | A boolean specifying whether to show the progress update in the console or not |
-| [Results output](#results-output) | Specify the results output |
-| [RPS](#rps) | The maximum number of requests to make per second globally (discouraged, use [arrival-rate executors](/using-k6/scenarios/concepts/open-vs-closed) instead) |
-| [Scenarios](#scenarios) | Define advanced execution scenarios |
-| [Setup timeout](#setup-timeout) | Specify how long the `setup()` function is allow to run before it's terminated |
-| [Show logs](#show-logs) | A boolean specifying whether the cloud logs are printed out to the terminal |
-| [Stages](#stages) | A list of objects that specify the target number of VUs to ramp up or down; shortcut option for a single [scenario](/using-k6/scenarios) with a [ramping VUs executor](/using-k6/scenarios/executors/ramping-vus) |
-| [Supply environment variable](#supply-environment-variables) | Add/override environment variable with `VAR=value` |
-| [System tags](#system-tags) | Specify which System Tags will be in the collected metrics |
-| [Summary export](#summary-export) | Output the [end-of-test summary](/results-output/end-of-test) report to a JSON file (discouraged, use [handleSummary()](/results-output/end-of-test/custom-summary) instead) |
-| [Summary trend stats](#summary-trend-stats) | Define stats for trend metrics in the [end-of-test summary](/results-output/end-of-test) |
-| [Summary time unit](#summary-time-unit) | Time unit to be used for _all_ time values in the [end-of-test summary](/results-output/end-of-test) |
-| [Tags](#tags) | Specify tags that should be set test-wide across all metrics |
-| [Teardown timeout](#teardown-timeout) | Specify how long the teardown() function is allowed to run before it's terminated |
-| [Thresholds](#thresholds) | Configure under what conditions a test is successful or not |
-| [Throw](#throw) | A boolean specifying whether to throw errors on failed HTTP requests |
-| [TLS auth](#tls-auth) | A list of TLS client certificate configuration objects |
-| [TLS cipher suites](#tls-cipher-suites) | A list of cipher suites allowed to be used by in SSL/TLS interactions with a server |
-| [TLS version](#tls-version) | String or object representing the only SSL/TLS version allowed |
-| [User agent](#user-agent) | A string specifying the User-Agent header when sending HTTP requests |
-| [Verbose](#verbose) | A boolean specifying whether verbose logging is enabled |
-| [VUs](#vus) | A number specifying the number of VUs to run concurrently |
-
-The following sections detail all available options that you can be specify within a script.
-
-It also documents the equivalent command line flag, environment variables or option when executing `k6 run ...`
-and `k6 cloud ...`, which you can use to override options specified in the code.
-
-## Address
-
-Address of the API server. When executing scripts with `k6 run` an HTTP server with a REST API is spun up,
-which can be used to control some of the parameters of the test execution.
-By default, the server listens on `localhost:6565`. Read more on [k6 REST API](/misc/k6-rest-api).
-
-| Env | CLI | Code / Config file | Default |
-| --- | ----------------- | ------------------ | ---------------- |
-| N/A | `--address`, `-a` | N/A | `localhost:6565` |
-
-
-
-```bash
-$ k6 run --address "localhost:3000" script.js
-```
-
-
-
-## Batch
-
-The maximum number of simultaneous/parallel connections in total that an
-[`http.batch()`](/javascript-api/k6-http/batch) call in a VU can make. If you have a
-`batch()` call that you've given 20 URLs to and `--batch` is set to 15, then the VU will make 15
-requests right away in parallel and queue the rest, executing them as soon as a previous request is
-done and a slot opens. Available in both the `k6 run` and the `k6 cloud` commands
-
-| Env | CLI | Code / Config file | Default |
-| ---------- | --------- | ------------------ | ------- |
-| `K6_BATCH` | `--batch` | `batch` | `20` |
-
-
-
-```javascript
-export const options = {
- batch: 15,
-};
-```
-
-
-
-## Batch per host
-
-The maximum number of simultaneous/parallel connections for the same hostname that an
-[`http.batch()`](/javascript-api/k6-http/batch) call in a VU can make. If you have a
-`batch()` call that you've given 20 URLs to the _same_ hostname and `--batch-per-host` is set to 5, then the VU will make 5
-requests right away in parallel and queue the rest, executing them as soon as a previous request is
-done and a slot opens. This will not run more request in parallel then the value of `batch`. Available in both the `k6 run` and the `k6 cloud` commands
-
-| Env | CLI | Code / Config file | Default |
-| ------------------- | ------------------ | ------------------ | ------- |
-| `K6_BATCH_PER_HOST` | `--batch-per-host` | `batchPerHost` | `6` |
-
-
-
-```javascript
-export const options = {
- batchPerHost: 5,
-};
-```
-
-
-
-## Blacklist IP
-
-Blacklist IP ranges from being called. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | ---------------- | ------------------ | ------- |
-| `K6_BLACKLIST_IPS` | `--blacklist-ip` | `blacklistIPs` | `null` |
-
-
-
-```javascript
-export const options = {
- blacklistIPs: ['10.0.0.0/8'],
-};
-```
-
-
-
-
-## Block hostnames
-
-Blocks hostnames based on a list of glob match strings. The pattern matching string can have a single
-`*` at the beginning such as `*.example.com` that will match anything before that such as
-`test.example.com` and `test.test.example.com`.
-Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| -------------------- | ------------------- | ------------------ | ------- |
-| `K6_BLOCK_HOSTNAMES` | `--block-hostnames` | `blockHostnames` | `null` |
-
-
-
-```javascript
-export const options = {
- blockHostnames: ['test.k6.io', '*.example.com'],
-};
-```
-
-
-
-
-
-
-```bash
-$ k6 run --block-hostnames="test.k6.io,*.example.com" script.js
-```
-
-
-
-## Compatibility mode
-
-Support running scripts with different ECMAScript compatibility modes.
-
-Read about the different modes on the [JavaScript Compatibility Mode documentation](/using-k6/javascript-compatibility-mode).
-
-| Env | CLI | Code / Config file | Default |
-| ----------------------- | ---------------------- | ------------------ | ------------ |
-| `K6_COMPATIBILITY_MODE` | `--compatibility-mode` | N/A | `"extended"` |
-
-
-
-```bash
-$ k6 run --compatibility-mode=base script.js
-```
-
-
-
-## Config
-
-Specify the config file in JSON format.
-If the config file is not specified, k6 looks for `config.json` in the `loadimpact/k6` directory inside the regular directory for configuration files on the operating system.
-Default config locations on different operating systems are as follows:
-
-|OS|Default Config Path|
-|---|---|
-|Unix-based|`${HOME}/.config/loadimpact/k6/config.json`|
-|macOS|`${HOME}/Library/Application Support/loadimpact/k6/config.json`|
-|Windows|`%AppData%/loadimpact/k6/config.json`|
-
-Available in `k6 run` and `k6 cloud` commands:
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------------------------ | ------------------ | ------- |
-| N/A | `--config `, `-c ` | N/A | `null` |
-
-
-
-When running tests in k6 Cloud and using a non-default config.json file,
-specify the cloud token inside your config file to authenticate.
-
-
-
-
-## Console output
-
-Redirects logs logged by `console` methods to the provided output file. Available in `k6 cloud` and `k6 run` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | -------------------| ------------------ | ------- |
-| `K6_CONSOLE_OUTPUT` | `--console-output` | N/A | `null` |
-
-
-
-
-```bash
-$ k6 run --console-output "loadtest.log" script.js
-```
-
-
-
-## Discard response bodies
-
-Specify if response bodies should be discarded by changing the default value of
-[responseType](/javascript-api/k6-http/params) to `none` for all HTTP requests. Highly recommended to be set
-to `true` and then only for the requests where the response body is needed for scripting
-to set [responseType](/javascript-api/k6-http/params) to `text` or `binary`. Lessens the amount of memory
-required and the amount of GC - reducing the load on the testing machine, and probably producing
-more reliable test results.
-
-| Env | CLI | Code / Config file | Default |
-| ---------------------------- | --------------------------- | ----------------------- | ------- |
-| `K6_DISCARD_RESPONSE_BODIES` | `--discard-response-bodies` | `discardResponseBodies` | `false` |
-
-
-
-```javascript
-export const options = {
- discardResponseBodies: true,
-};
-```
-
-
-
-## DNS
-
-This is a composite option that provides control of DNS resolution behavior with
-configuration for cache expiration (TTL), IP selection strategy and IP version
-preference. The TTL field in the DNS record is currently not read by k6, so the
-`ttl` option allows manual control over this behavior, albeit as a fixed value
-for the duration of the test run.
-
-Note that DNS resolution is done only on new HTTP connections, and by default k6
-will try to reuse connections if HTTP keep-alive is supported. To force a certain
-DNS behavior consider enabling the [`noConnectionReuse`](#no-connection-reuse)
-option in your tests.
-
-
-| Env | CLI | Code / Config file | Default |
-| ---------| --------| -------------------| ---------------------------------------- |
-| `K6_DNS` | `--dns` | `dns` | `ttl=5m,select=random,policy=preferIPv4` |
-
-Possible `ttl` values are:
-- `0`: no caching at all - each request will trigger a new DNS lookup.
-- `inf`: cache any resolved IPs for the duration of the test run.
-- any time duration like `60s`, `5m30s`, `10m`, `2h`, etc.; if no unit is specified (e.g. `ttl=3000`), k6 assumes milliseconds.
-
-Possible `select` values are:
-- `first`: always pick the first resolved IP.
-- `random`: pick a random IP for every new connection.
-- `roundRobin`: iterate sequentially over the resolved IPs.
-
-Possible `policy` values are:
-- `preferIPv4`: use IPv4 addresses if available, otherwise fall back to IPv6.
-- `preferIPv6`: use IPv6 addresses if available, otherwise fall back to IPv4.
-- `onlyIPv4`: only use IPv4 addresses, ignore any IPv6 ones.
-- `onlyIPv6`: only use IPv6 addresses, ignore any IPv4 ones.
-- `any`: no preference, use all addresses.
-
-Here are some configuration examples:
-
-```bash
-K6_DNS="ttl=5m,select=random,policy=preferIPv4" k6 cloud script.js
-```
-
-
-
-```javascript
-export const options = {
- dns: {
- ttl: '1m',
- select: 'roundRobin',
- policy: 'any',
- },
-};
-```
-
-
-
-## Duration
-
-A string specifying the total duration a test run should be run for. During this time each
-VU will execute the script in a loop. Available in `k6 run` and `k6 cloud` commands.
-
-Together with the [`vus` option](#vus), `duration` is a shortcut for a single [scenario](/using-k6/scenarios) with a [constant VUs executor](/using-k6/scenarios/executors/constant-vus).
-
-| Env | CLI | Code / Config file | Default |
-| ------------- | ------------------ | ------------------ | ------- |
-| `K6_DURATION` | `--duration`, `-d` | `duration` | `null` |
-
-
-
-```javascript
-export const options = {
- vus: 100,
- duration: '3m',
-};
-```
-
-
-
-## Extension options
-
-An object used to set configuration options for cloud parameters and third-party collectors, like plugins. For more information about available parameters, refer to [Cloud options](/cloud/creating-and-running-a-test/cloud-scripting-extras/cloud-options/).
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | ------- |
-| N/A | N/A | `ext` | `null` |
-
-This is an example of how to specify the test name (test runs/executions with the same name will be
-logically grouped for trending and comparison) when streaming results to
-[k6 Cloud Performance Insights](/cloud/analyzing-results/performance-insights).
-
-
-
-```javascript
-export const options = {
- ext: {
- loadimpact: {
- name: 'My test name',
- },
- },
-};
-```
-
-
-
-## Execution segment
-
-These options specify how to partition the test run and which segment to run.
-If defined, k6 will scale the number of VUs and iterations to be run for that
-segment, which is useful in distributed execution. Available in `k6 run` and
-`k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------------------------ | -------------------------- | ------- |
-| N/A | `--execution-segment` | `executionSegment` | `"0:1"` |
-| N/A | `--execution-segment-sequence` | `executionSegmentSequence` | `"0,1"` |
-
-For example, to run 25% of a test, you would specify `--execution-segment '25%'`,
-which would be equivalent to `--execution-segment '0:1/4'`, i.e. run the first
-1/4 of the test.
-To ensure that each instance executes a specific segment, also specify the full
-segment sequence, e.g. `--execution-segment-sequence '0,1/4,1/2,1'`.
-This way one instance could run with `--execution-segment '0:1/4'`, another with
-`--execution-segment '1/4:1/2'`, etc. and there would be no overlap between them.
-
-
-
-## Exit on running
-
-A boolean, specifying whether the script should exit once the test status reaches `running`.
-When running scripts with `k6 cloud` by default scripts will run until the test reaches a finalized status.
-This could be problematic in certain environments (think of Continuous Integration and Delivery pipelines),
-since you'd need to wait until the test ends up in a finalized state.
-
-With this option, you can exit early and let the script run in the background. Available in `k6 cloud` command.
-
-| Env | CLI | Code / Config file | Default |
-| -------------------- | ------------------- | ------------------ | ------- |
-| `K6_EXIT_ON_RUNNING` | `--exit-on-running` | N/A | `false` |
-
-
-
-```bash
-$ k6 cloud --exit-on-running script.js
-```
-
-
-
-## Hosts
-
-An object with overrides to DNS resolution, similar to what you can do with `/etc/hosts` on
-Linux/Unix or `C:\Windows\System32\drivers\etc\hosts` on Windows. For instance, you could set
-up an override which routes all requests for `test.k6.io` to `1.2.3.4`.
-
-k6 also supports ways to narrow or widen the scope of your redirects:
-- You can redirect only from or to certain ports.
-- Starting from v0.42.0, you can use an asterisk (`*`) as a wild card at the start of the host name to avoid repetition. For example, `*.k6.io` would apply the override for all subdomains of `k6.io`.
-
-
-
-This does not modify the actual HTTP `Host` header, but rather where it will be routed.
-
-
-
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | ------- |
-| N/A | N/A | `hosts` | `null` |
-
-
-
-```javascript
-export const options = {
- hosts: {
- 'test.k6.io': '1.2.3.4',
- 'test.k6.io:443': '1.2.3.4:8443',
- '*.grafana.com': '1.2.3.4',
- },
-};
-```
-
-
-
-The preceding code will redirect requests made to `test.k6.io` to `1.2.3.4`, keeping the same port. If the request is done to port `443`, it will redirect it to port `8443` instead. It will also redirect requests to any subdomain of `grafana.com` to `1.2.3.4`.
-
-## HTTP debug
-
-Log all HTTP requests and responses. Excludes body by default, to include body use
-`--http-debug=full`. Available in `k6 run` and `k6 cloud` commands.
-
-Read more [here](/using-k6/http-debugging).
-
-| Env | CLI | Code / Config file | Default |
-| --------------- | --------------------------------------- | ------------------ | ------- |
-| `K6_HTTP_DEBUG` | `--http-debug`,
`--http-debug=full` | `httpDebug` | `false` |
-
-
-
-```javascript
-export const options = {
- httpDebug: 'full',
-};
-```
-
-
-
-## Include system env vars
-
-Pass the real system [environment variables](/using-k6/environment-variables) to the runtime. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | --------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------- |
-| N/A | `--include-system-env-vars` | N/A | `true` for `k6 run`, but `false` for all other commands to prevent inadvertent sensitive data leaks. |
-
-
-
-```bash
-$ k6 run --include-system-env-vars ~/script.js
-```
-
-
-
-## Insecure skip TLS verify
-
-A boolean, true or false. When this option is enabled (set to true), all of the verifications that
-would otherwise be done to establish trust in a server provided TLS certificate will be ignored.
-This only applies to connections created from code, such as HTTP requests.
-Available in `k6 run` and `k6 cloud` commands
-
-| Env | CLI | Code / Config file | Default |
-| ----------------------------- | ---------------------------- | ----------------------- | ------- |
-| `K6_INSECURE_SKIP_TLS_VERIFY` | `--insecure-skip-tls-verify` | `insecureSkipTLSVerify` | `false` |
-
-
-
-```javascript
-export const options = {
- insecureSkipTLSVerify: true,
-};
-```
-
-
-
-## Iterations
-
-An integer value, specifying the total number of iterations of the `default` function to execute in the test run, as opposed to specifying a duration of time during which the script would run in a loop. Available both in the `k6 run` and `k6 cloud` commands.
-
-Together with the [`vus` option](#vus), `iterations` is a shortcut for a single [scenario](/using-k6/scenarios) with a [shared iterations executor](/using-k6/scenarios/executors/shared-iterations).
-
-By default, the maximum duration of a `shared-iterations` scenario is 10 minutes. You can adjust that time via the `maxDuration` option of the scenario, or by also specifying the [`duration` global shortcut option](#duration).
-
-**Note that iterations aren't fairly distributed with this option, and a VU that executes faster will complete more iterations than others.** Each VU will try to complete as many iterations as possible, ["stealing"](https://en.wikipedia.org/wiki/Work_stealing) them from the total number of iterations for the test. So, depending on iteration times, some VUs may complete more iterations than others. If you want guarantees that every VU will complete a specific, fixed number of iterations, [use the per-VU iterations executor](/using-k6/scenarios/executors/per-vu-iterations).
-
-
-| Env | CLI | Code / Config file | Default |
-| --------------- | -------------------- | ------------------ | ------- |
-| `K6_ITERATIONS` | `--iterations`, `-i` | `iterations` | `1` |
-
-
-
-```javascript
-export const options = {
- vus: 5,
- iterations: 10,
-};
-```
-
-
-
-Or, to run 10 VUs 10 times each:
-
-
-
-```javascript
-export const options = {
- vus: 10,
- iterations: 100,
-};
-```
-
-
-
-## Linger
-
-A boolean, true or false, specifying whether the k6 process should linger around after test
-run completion. Available in the `k6 run` command.
-
-| Env | CLI | Code / Config file | Default |
-| ----------- | ---------------- | ------------------ | ------- |
-| `K6_LINGER` | `--linger`, `-l` | `linger` | `false` |
-
-
-
-```javascript
-export const options = {
- linger: true,
-};
-```
-
-
-
-## Local IPs
-
-A list of IPs, IP ranges and CIDRs from which VUs will make requests. The IPs will be sequentially
-given out to VUs. This option doesn't change anything on the OS level so the IPs need to be already
-configured on the OS level for k6 to use them. Also IPv4 CIDRs with more than 2
-IPs don't include the first and last IP as they are reserved for referring to the network itself and
-the broadcast address respectively.
-
-This option can be used for splitting the network traffic from k6 between multiple network cards, thus potentially increasing the available network throughput. For example, if you have 2 NICs, you can run k6 with `--local-ips=","` to balance the traffic equally between them - half of the VUs will use the first IP and the other half will use the second. This can scale to any number of NICs, and you can repeat some local IPs to give them more traffic. For example, `--local-ips=",,,"` will split VUs between 3 different source IPs in a 25%:25%:50% ratio.
-
-Available in the `k6 run` command.
-
-| Env | CLI | Code / Config file | Default |
-| -------------- | ---------------- | ------------------ | ------- |
-| `K6_LOCAL_IPS` | `--local-ips` | N/A | N/A |
-
-
-
-
-```bash
-$ k6 run --local-ips=192.168.20.12-192.168.20.15,192.168.10.0/27 script.js
-```
-
-
-
-## Log output
-
-This option specifies where to send logs to and another configuration connected to it. Available in the `k6 run` command.
-
-| Env | CLI | Code / Config file | Default |
-| --------------- | -------------- | ------------------ | -------- |
-| `K6_LOG_OUTPUT` | `--log-output` | N/A | `stderr` |
-
-
-
-```bash
-$ k6 run --log-output=stdout script.js
-```
-
-
-
-Possible values are:
-
-- none - disable
-- stdout - send to the standard output
-- stderr - send to the standard error output (this is the default)
-- loki - send logs to a loki server
-- file - write logs to a file
-
-### Loki
-
-Use the `log-output` option to configure [Loki](https://grafana.com/oss/loki/) as follows.
-For additional instructions and a step-by-step guide, check out the [Loki tutorial](https://k6.io/blog/using-loki-to-store-and-query-k6-logs/).
-
-
-
-```bash
-$ k6 run --log-output=loki=http://127.0.0.1:3100/loki/api/v1/push,label.something=else,label.foo=bar,limit=32,level=info,pushPeriod=5m32s,msgMaxSize=1231 script.js
-```
-
-
-
-Where all but the url in the beginning are not required.
-The possible keys with their meanings and default values:
-
-| key | description | default value |
-| --- | ----------- | ------------- |
-| `nothing` | the endpoint to which to send logs | `http://127.0.0.1:3100/loki/api/v1/push` |
-| allowedLabels | if set k6 will send only the provided labels as such and all others will be appended to the message in the form `key=value`. The value of the option is in the form `[label1,label2]` | N/A |
-| label.`labelName` | adds an additional label with the provided key and value to each message | N/A |
-| header.`headerName` | adds an additional HTTP header with the provided header name and value to each HTTP request made to Loki | N/A |
-| limit | the limit of message per pushPeriod, an additional log is send when the limit is reached, logging how many logs were dropped | 100 |
-| level | the minimal level of a message so it's send to loki | all |
-| pushPeriod | at what period to send log lines | 1s |
-| profile | whether to print some info about performance of the sending to loki | false |
-| msgMaxSize | how many symbols can there be at most in a message. Messages bigger will miss the middle of the message with an additional few characters explaining how many characters were dropped. | 1048576 |
-
-### File
-
-The file can be configured as below, where an explicit file path is required:
-
-
-
-```bash
-$ k6 run --log-output=file=./k6.log script.js
-```
-
-
-
-A valid file path is the unique mandatory field, the other optional fields listed below:
-
-| key | description | default value |
-| --- | ----------- | ------------- |
-| level | the minimal level of a message to write out of (in ascending order): trace, debug, info, warning, error, fatal, panic | trace |
-
-## LogFormat
-
-A value specifying the log format. By default, k6 includes extra debug information like date and log level. The other options available are:
-
-- `json`: print all the debug information in JSON format.
-
-- `raw`: print only the log message.
-
-| Env | CLI | Code / Config file | Default |
-| -------------- | ------------------- | ------------------ | ------- |
-| `K6_LOG_FORMAT` | `--log-format`, `-f` | N/A | |
-
-
-
-```bash
-$ k6 run --log-format raw test.js
-```
-
-
-
-## Max redirects
-
-The maximum number of HTTP redirects that k6 will follow before giving up on a request and
-erroring out. Available in both the `k6 run` and the `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | ----------------- | ------------------ | ------- |
-| `K6_MAX_REDIRECTS` | `--max-redirects` | `maxRedirects` | `10` |
-
-
-
-```javascript
-export const options = {
- maxRedirects: 10,
-};
-```
-
-
-
-## Minimum iteration duration
-
-Specifies the minimum duration of every single execution (i.e. iteration) of the `default`
-function. Any iterations that are shorter than this value will cause that VU to sleep for
-the remainder of the time until the specified minimum duration is reached.
-
-| Env | CLI | Code / Config file | Default |
-| --------------------------- | -------------------------- | ---------------------- | -------------- |
-| `K6_MIN_ITERATION_DURATION` | `--min-iteration-duration` | `minIterationDuration` | `0` (disabled) |
-
-
-
-```javascript
-export const options = {
- minIterationDuration: '10s',
-};
-```
-
-
-
-## No color
-
-A boolean specifying whether colored output is disabled. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------ | ------------------- | ------- |
-| N/A | `--no-color` | N/A | `false` |
-
-
-
-
-```bash
-$ k6 run --no-color script.js
-```
-
-
-
-## No connection reuse
-
-A boolean, true or false, specifying whether k6 should disable keep-alive connections.
-Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------------ | ----------------------- | ------------------- | ------- |
-| `K6_NO_CONNECTION_REUSE` | `--no-connection-reuse` | `noConnectionReuse` | `false` |
-
-
-
-```javascript
-export const options = {
- noConnectionReuse: true,
-};
-```
-
-
-
-## No cookies reset
-
-This disables the default behavior of resetting the cookie jar after each VU iteration. If
-it's enabled, saved cookies will be persisted across VU iterations.
-
-| Env | CLI | Code / Config file | Default |
-| --------------------- | --- | ------------------ | ------- |
-| `K6_NO_COOKIES_RESET` | N/A | `noCookiesReset` | `false` |
-
-
-
-```javascript
-export const options = {
- noCookiesReset: true,
-};
-```
-
-
-
-## No summary
-
-Disables [end-of-test summary](/results-output/end-of-test) generation,
-including calls to [`handleSummary()`](/results-output/end-of-test/custom-summary) and `--summary-export`.
-
-Available in the `k6 run` command.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | ----------------- | ------------------ | ------- |
-| `K6_NO_SUMMARY` | `--no-summary` | N/A | `false` |
-
-
-
-```bash
-$ k6 run --no-summary ~/script.js
-```
-
-
-
-## No setup
-
-A boolean specifying whether `setup()` function should be run. Available in `k6 cloud` and `k6 run` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | ----------------- | ------------------ | ------- |
-| `K6_NO_SETUP` | `--no-setup` | N/A | `false` |
-
-
-
-```bash
-$ k6 run --no-setup script.js
-```
-
-
-
-## No teardown
-
-A boolean specifying whether `teardown()` function should be run. Available in `k6 cloud` and `k6 run` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | ----------------- | ------------------ | ------- |
-| `K6_NO_TEARDOWN` | `--no-teardown` | N/A | `false` |
-
-
-
-```bash
-$ k6 run --no-teardown script.js
-```
-
-
-
-## No thresholds
-
-Disables threshold execution. Available in the `k6 run` command.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | ----------------- | ------------------ | ------- |
-| `K6_NO_THRESHOLDS` | `--no-thresholds` | N/A | `false` |
-
-
-
-```bash
-$ k6 run --no-thresholds ~/script.js
-```
-
-
-
-## No usage report
-
-A boolean, true or false. By default, k6 sends a usage report each time it is run, so that we can
-track how often people use it. If this option is set to true, no usage report will be made. To
-learn more, have a look at the [Usage reports](/misc/usage-collection) documentation. Available in
-`k6 run` commands.
-
-| Env | CLI | Config file | Default |
-| -------------------- | ------------------- | ------------------ | ------- |
-| `K6_NO_USAGE_REPORT` | `--no-usage-report` | `noUsageReport`\* | `false` |
-
-
-
-```bash
-$ k6 run --no-usage-report ~/script.js
-```
-
-
-
-\* Note that this option is not supported in the exported script options, but can be specified in a configuration file.
-
-
-## No VU connection reuse
-
-A boolean, true or false, specifying whether k6 should reuse TCP connections between iterations
-of a VU. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --------------------------- | -------------------------- | --------------------- | ------- |
-| `K6_NO_VU_CONNECTION_REUSE` | `--no-vu-connection-reuse` | `noVUConnectionReuse` | `false` |
-
-
-
-```javascript
-export const options = {
- noVUConnectionReuse: true,
-};
-```
-
-
-
-## Paused
-
-A boolean, true or false, specifying whether the test should start in a paused state. To resume
-a paused state you'd use the `k6 resume` command. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ----------- | ---------------- | ------------------ | ------- |
-| `K6_PAUSED` | `--paused`, `-p` | `paused` | `false` |
-
-
-
-```javascript
-export const options = {
- paused: true,
-};
-```
-
-
-
-## Quiet
-
-A boolean, true or false, that disables the progress update bar on the console output. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ---------------- | ------------------ | ------- |
-| N/A | `--quiet`, `-q` | N/A | `false` |
-
-
-
-```bash
-$ k6 run script.js -d 20s --quiet
-```
-
-
-
-## Results output
-
-Specify the results output.
-For information on all available outputs and how to configure them,
-refer to [Results output](/results-output/overview/).
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------- | ------------------ | ------- |
-| `K6_OUT` | `--out`, `-o` | N/A | `null` |
-
-
-
-```bash
-$ k6 run --out influxdb=http://localhost:8086/k6 script.js
-```
-
-
-
-## RPS
-
-The maximum number of requests to make per second, in total across all VUs. Available in `k6 run` and `k6 cloud` commands.
-
-
-
-**This option is discouraged.""
-
-The `--rps` option has caveats and is difficult to use correctly.
-
-For example, in the cloud or distributed execution, this option affects every k6 instance independently.
-That is, it is not sharded like VUs are.
-We strongly recommend the [arrival-rate executors](/using-k6/scenarios/concepts/open-vs-closed) to simulate constant RPS instead of this option.
-
-
-
-| Env | CLI | Code / Config file | Default |
-| -------- | ------- | ------------------ | --------------- |
-| `K6_RPS` | `--rps` | `rps` | `0` (unlimited) |
-
-
-
-```javascript
-export const options = {
- rps: 500,
-};
-```
-
-
-
-> ### Considerations when running in the cloud
->
-> The option is set per load generator which means that the value you set in the options object of your test script will be multiplied by the number of load generators your test run is using. At the moment we are hosting 300 VUs per load generator instance. In practice that means that if you set the option for 100 rps, and run a test with 1000 VUs, you will spin up 4 load gen instances and effective rps limit of your test run will be 400
-
-## Scenarios
-
-Define one or more execution patterns, with various VU and iteration scheduling
-settings, running different exported functions (besides `default`!), using different
-environment variables, tags, and more.
-
-See the [Scenarios](/using-k6/scenarios) article for details and more examples.
-
-Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | ------- |
-| N/A | N/A | `scenarios` | `null` |
-
-
-
-```javascript
-export const options = {
- scenarios: {
- my_api_scenario: {
- // arbitrary scenario name
- executor: 'ramping-vus',
- startVUs: 0,
- stages: [
- { duration: '5s', target: 100 },
- { duration: '5s', target: 0 },
- ],
- gracefulRampDown: '10s',
- env: { MYVAR: 'example' },
- tags: { my_tag: 'example' },
- },
- },
-};
-```
-
-
-
-## Setup timeout
-
-Specify how long the `setup()` function is allow to run before it's terminated and the test fails.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------ | --- | ------------------ | ------- |
-| `K6_SETUP_TIMEOUT` | N/A | `setupTimeout` | `"60s"` |
-
-
-
-```javascript
-export const options = {
- setupTimeout: '30s',
-};
-```
-
-
-
-## Show logs
-
-A boolean specifying whether the cloud logs are printed out to the terminal. Available in `k6 cloud` command.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------- | ------------------ | ------- |
-| N/A | `--show-logs` | N/A | `true` |
-
-
-
-
-```bash
-$ k6 cloud --show-logs=false script.js
-```
-
-
-
-
-## Stages
-
-A list of VU `{ target: ..., duration: ... }` objects that specify the target number of VUs to
-ramp up or down to for a specific period. Available in `k6 run` and `k6 cloud` commands.
-
-It is a shortcut option for a single [scenario](/using-k6/scenarios) with a [ramping VUs executor](/using-k6/scenarios/executors/ramping-vus). If used together with the [VUs](#vus) option, the `vus` value is used as the `startVUs` option of the executor.
-
-| Env | CLI | Code / Config file | Default |
-| ----------- | ------------------------------------------------------- | ------------------ | ------------------------------ |
-| `K6_STAGES` | `--stage :`, `-s :` | `stages` | Based on `vus` and `duration`. |
-
-
-
-```javascript
-// The following config would have k6 ramping up from 1 to 10 VUs for 3 minutes,
-// then staying flat at 10 VUs for 5 minutes, then ramping up from 10 to 35 VUs
-// over the next 10 minutes before finally ramping down to 0 VUs for another
-// 3 minutes.
-
-export const options = {
- stages: [
- { duration: '3m', target: 10 },
- { duration: '5m', target: 10 },
- { duration: '10m', target: 35 },
- { duration: '3m', target: 0 },
- ],
-};
-```
-
-```bash
-$ k6 run --stage 5s:10,5m:20,10s:5 script.js
-
-# or...
-
-$ K6_STAGES="5s:10,5m:20,10s:5" k6 run script.js
-```
-
-```bash
-C:\k6> k6 run --stage 5s:10,5m:20,10s:5 script.js
-
-# or...
-
-C:\k6> set "K6_STAGES=5s:10,5m:20,10s:5" && k6 run script.js
-
-```
-
-```bash
-C:\k6> k6 run --stage 5s:10,5m:20,10s:5 script.js
-
-# or...
-
-C:\k6> $env:K6_STAGES="5s:10,5m:20,10s:5"; k6 run script.js
-
-```
-
-
-
-## Summary export
-
-Save the end-of-test summary report to a JSON file that includes data for all test metrics, checks and thresholds.
-This is useful to get the aggregated test results in a machine-readable format, for integration with dashboards, external alerts, CI pipelines, etc.
-
-While this feature is not deprecated yet, [we now discourage it](/results-output/end-of-test#summary-export-to-a-json-file).
-For a better, more flexible JSON export, as well as export of the summary data to different formats (e.g. JUnit/XUnit/etc. XML, HTML, .txt) and complete summary customization, use the [`handleSummary()` function](/results-output/end-of-test/custom-summary).
-
-Available in the `k6 run` command.
-
-| Env | CLI | Code / Config file | Default |
-| ------------------- | ----------------------------- | ------------------ | ------- |
-| `K6_SUMMARY_EXPORT` | `--summary-export ` | N/A | `null` |
-
-
-
-```bash
-$ k6 run --summary-export export.json script.js
-
-# or...
-
-$ K6_SUMMARY_EXPORT="export.json" k6 run script.js
-```
-
-```bash
-C:\k6> k6 run --summary-export export.json script.js
-
-# or...
-
-C:\k6> set "K6_SUMMARY_EXPORT=export.json" && k6 run script.js
-
-```
-
-```bash
-C:\k6> k6 run --summary-export export.json script.js
-
-# or...
-
-C:\k6> $env:K6_SUMMARY_EXPORT="export.json"; k6 run script.js
-
-```
-
-
-
-See an example file on the [Results Output](/get-started/results-output#summary-export) page.
-
-## Supply environment variables
-
-Add/override an [environment variable](/using-k6/environment-variables) with `VAR=value`in a k6 script. Available in `k6 run` and `k6 cloud` commands.
-
-To make the system environment variables available in the k6 script via `__ENV`, use the [`--include-system-env-vars` option](#include-system-env-vars).
-
-
-
-**The `-e` flag does not configure options.**
-
-This flag just provides variables to the script, which the script can use or ignore.
-For example, `-e K6_ITERATIONS=120` does _not_ configure the script iterations.
-
-Compare this behavior with `K6_ITERATIONS=120 k6 run script.js`, which _does_ set iterations.
-
-
-
-
-
-
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------- | ------------------ | ------- |
-| N/A | `--env`, `-e` | N/A | `null` |
-
-
-
-```bash
-$ k6 run -e FOO=bar ~/script.js
-```
-
-
-
-## System tags
-
-Specify which [system tags](/using-k6/tags-and-groups#system-tags) will be in the collected
-metrics. Some collectors like the `cloud` one may require that certain system tags be used.
-You can specify the tags as an array from the JS scripts or as a comma-separated list via the
-CLI. Available in `k6 run` and `k6 cloud` commands
-
-| Env | CLI | Code / Config file | Default |
-| ---------------- | --------------- | ------------------ | ------------------------------------------------------------------------------------------------------------ |
-| `K6_SYSTEM_TAGS` | `--system-tags` | `systemTags` | `proto`,`subproto`,`status`,`method`,`url`,`name`,`group`,`check`,`error`,`error_code`,`tls_version`,`scenario`,`service`,`expected_response` |
-
-
-
-```javascript
-export const options = {
- systemTags: ['status', 'method', 'url'],
-};
-```
-
-
-
-## Summary time unit
-
-Define which time unit will be used for _all_ time values in the [end-of-test summary](/results-output/end-of-test). Possible values are `s` (seconds), `ms` (milliseconds) and `us` (microseconds). If no value is specified, k6 will use mixed time units, choosing the most appropriate unit for each value.
-
-| Env | CLI | Code / Config file | Default |
-| ---------------------- | --------------------- | ------------------- | ------- |
-| `K6_SUMMARY_TIME_UNIT` | `--summary-time-unit` | `summaryTimeUnit` | `null` |
-
-
-
-
-```javascript
-export const options = {
- summaryTimeUnit: 'ms',
-};
-```
-
-
-
-
-## Summary trend stats
-
-Define which stats for [`Trend` metrics](/javascript-api/k6-metrics/trend) (e.g. response times, group/iteration durations, etc.) will be shown in the [end-of-test summary](/results-output/end-of-test). Possible values include `avg` (average), `med` (median), `min`, `max`, `count`, as well as arbitrary percentile values (e.g. `p(95)`, `p(99)`, `p(99.99)`, etc.).
-
-For further summary customization and exporting the summary in various formats (e.g. JSON, JUnit/XUnit/etc. XML, HTML, .txt, etc.), use the [`handleSummary()` function](/results-output/end-of-test/custom-summary).
-
-
-| Env | CLI | Code / Config file | Default |
-| ------------------------ | ----------------------- | ------------------- | ------------------------------ |
-| `K6_SUMMARY_TREND_STATS` | `--summary-trend-stats` | `summaryTrendStats` | `avg,min,med,max,p(90),p(95)` |
-
-
-
-```javascript
-export const options = {
- summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
-};
-```
-
-
-
-
-
-```bash
-$ k6 run --summary-trend-stats="avg,min,med,max,p(90),p(99.9),p(99.99),count" ./script.js
-```
-
-
-
-## Tags
-
-Specify tags that should be set test wide across all metrics. If a tag with the same name has
-been specified on a request, check or custom metrics it will have precedence over a test wide
-tag. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------------ | ------------------ | ------- |
-| N/A | `--tag NAME=VALUE` | `tags` | `null` |
-
-
-
-```javascript
-export const options = {
- tags: {
- name: 'value',
- },
-};
-```
-
-
-
-## Teardown timeout
-
-Specify how long the `teardown()` function is allowed to run before it's terminated and the test
-fails.
-
-| Env | CLI | Code / Config file | Default |
-| --------------------- | --- | ------------------ | ------- |
-| `K6_TEARDOWN_TIMEOUT` | N/A | `teardownTimeout` | `"60s"` |
-
-
-
-```javascript
-export const options = {
- teardownTimeout: '30s',
-};
-```
-
-
-
-## Thresholds
-
-A collection of threshold specifications to configure under what condition(s) a test is considered
-successful or not, when it has passed or failed, based on metric data. To learn more, have a look
-at the [Thresholds](/using-k6/thresholds) documentation. Available in `k6 run` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | ------- |
-| N/A | N/A | `thresholds` | `null` |
-
-
-
-```javascript
-export const options = {
- thresholds: {
- 'http_req_duration': ['avg<100', 'p(95)<200'],
- 'http_req_connecting{cdnAsset:true}': ['p(95)<100'],
- },
-};
-```
-
-
-
-## Throw
-
-A boolean, true or false, specifying whether k6 should throw exceptions when certain errors occur, or if it should just log them with a warning. Behaviors that currently depend on this option:
- - failing to make [HTTP requests](/javascript-api/k6-http/), e.g. due to a network error
- - adding invalid values to [custom metrics](/using-k6/metrics/#custom-metrics)
- - setting invalid [per-VU metric tags](/javascript-api/k6-execution/#tags)
-
-Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| ---------- | --------------- | ------------------ | ------- |
-| `K6_THROW` | `--throw`, `-w` | `throw` | `false` |
-
-
-
-```javascript
-export const options = {
- throw: true,
-};
-```
-
-
-
-## TLS auth
-
-A list of TLS client certificate configuration objects. `domains` and `password` are optional, but `cert` and `key` are required.
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | ------- |
-| N/A | N/A | `tlsAuth` | `null` |
-
-
-
-```javascript
-export const options = {
- tlsAuth: [
- {
- domains: ['example.com'],
- cert: open('mycert.pem'),
- key: open('mycert-key.pem'),
- password: 'mycert-passphrase',
- },
- ],
-};
-```
-
-
-
-## TLS cipher suites
-
-A list of cipher suites allowed to be used by in SSL/TLS interactions with a server.
-For a full listing of available ciphers go [here](https://golang.org/pkg/crypto/tls/#pkg-constants).
-
-
-
-Due to limitations in the underlying [go implementation](https://github.com/golang/go/issues/29349), changing the ciphers for TLS 1.3 is *not* supported and will do nothing.
-
-
-
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | ------------------------- |
-| N/A | N/A | `tlsCipherSuites` | `null` (Allow all suites) |
-
-
-
-```javascript
-export const options = {
- tlsCipherSuites: ['TLS_RSA_WITH_RC4_128_SHA', 'TLS_RSA_WITH_AES_128_GCM_SHA256'],
-};
-```
-
-
-
-## TLS version
-
-Either a string representing the only SSL/TLS version allowed to be used in interactions with a
-server, or an object specifying the "min" and "max" versions allowed to be used.
-
-| Env | CLI | Code / Config file | Default |
-| --- | --- | ------------------ | --------------------------- |
-| N/A | N/A | `tlsVersion` | `null` (Allow all versions) |
-
-
-
-```javascript
-export const options = {
- tlsVersion: 'tls1.2',
-};
-```
-
-
-
-
-
-```javascript
-export const options = {
- tlsVersion: {
- min: 'ssl3.0',
- max: 'tls1.2',
- },
-};
-```
-
-
-
-
-
-## Upload Only
-
-A boolean specifying whether the test should just be uploaded to the cloud, but not run it. Available in `k6 cloud` command.
-
-This would be useful if you would like to update a given test and run it later. For example, updating test scripts of a scheduled test from the CI pipelines.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------- | ------------------ | ------- |
-| `K6_CLOUD_UPLOAD_ONLY` | `--upload-only` | N/A | `false` |
-
-
-
-
-```bash
-$ k6 cloud --upload-only script.js
-```
-
-
-
-
-## User agent
-
-A string specifying the user-agent string to use in `User-Agent` headers when sending HTTP
-requests.
-If you pass an empty string, no `User-Agent` header is sent.
-Available in `k6 run` and `k6 cloud` commands
-
-| Env | CLI | Code / Config file | Default |
-|-----------------|----------------|--------------------|-----------------------------------------------------------------------|
-| `K6_USER_AGENT` | `--user-agent` | `userAgent` | `k6/0.27.0 (https://k6.io/)` (depending on the version you're using)` |
-
-
-
-```javascript
-export const options = {
- userAgent: 'MyK6UserAgentString/1.0',
-};
-```
-
-
-
-## Verbose
-
-A boolean specifying whether verbose logging is enabled. Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| --- | ------------------ | ------------------- | ------- |
-| N/A | `--verbose`, `-v` | N/A | `false` |
-
-
-
-
-```bash
-$ k6 run --verbose script.js
-```
-
-
-
-## VUs
-
-An integer value specifying the number of VUs to run concurrently, used together with the [iterations](#iterations) or [duration](#options) options. If you'd like more control look at the [`stages`](#stages) option or [scenarios](/using-k6/scenarios).
-
-Available in `k6 run` and `k6 cloud` commands.
-
-| Env | CLI | Code / Config file | Default |
-| -------- | ------------- | ------------------ | ------- |
-| `K6_VUS` | `--vus`, `-u` | `vus` | `1` |
-
-
-
-```javascript
-export const options = {
- vus: 10,
- duration: '1h',
-};
-```
-
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/06 Test lifecycle.md b/src/data/markdown/translated-guides/en/02 Using k6/06 Test lifecycle.md
index c019c9eb39..c9c4e79162 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/06 Test lifecycle.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/06 Test lifecycle.md
@@ -2,6 +2,7 @@
title: 'Test lifecycle'
excerpt: 'The four distinct lifecycle stages in a k6 test are "init", "setup", "VU", and "teardown".'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/test-lifecycle/
+redirect: https://grafana.com/docs/k6/latest/using-k6/test-lifecycle/
---
In the lifecycle of a k6 test,
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/07 Modules.md b/src/data/markdown/translated-guides/en/02 Using k6/07 Modules.md
index f588cf74df..d39bd88b2d 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/07 Modules.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/07 Modules.md
@@ -3,6 +3,7 @@ title: 'Modules'
excerpt: 'While writing test scripts, it is common to import different modules, or part of modules, for
usage throughout the script. In k6, it is possible to import three different kinds of modules.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/modules/
+redirect: https://grafana.com/docs/k6/latest/using-k6/modules/
---
## Importing modules
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/08 Tags and Groups.md b/src/data/markdown/translated-guides/en/02 Using k6/08 Tags and Groups.md
index af6f08da0d..36d896f80e 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/08 Tags and Groups.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/08 Tags and Groups.md
@@ -3,6 +3,7 @@ title: 'Tags and Groups'
excerpt: 'k6 provides the Tags and Groups APIs to help you during the analysis and easily visualize, sort and
filter your test results.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/tags-and-groups/
+redirect: https://grafana.com/docs/k6/latest/using-k6/tags-and-groups/
---
A load test usually targets a service with different subsystems and resources.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/09 Cookies.md b/src/data/markdown/translated-guides/en/02 Using k6/09 Cookies.md
index ad13733e2e..03472aff6e 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/09 Cookies.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/09 Cookies.md
@@ -2,6 +2,7 @@
title: 'Cookies'
excerpt: 'k6 will transparently manage the receiving, storage and sending of cookies as described above, so that testing of your cookie-based web site or app will just work.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/cookies/
+redirect: https://grafana.com/docs/k6/latest/using-k6/cookies/
---
HTTP Cookies are used by web sites and apps to store pieces of stateful information on user devices.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols.md
index d10b0399e4..6f8364b666 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols.md
@@ -2,6 +2,7 @@
title: "Protocols"
excerpt: "Out of the box k6 comes with support for a few protocols: HTTP / WebSockets / gRPC / ..."
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/
+redirect: https://grafana.com/docs/k6/latest/using-k6/protocols/
---
Out of the box, k6 supports the following protocols:
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/01 HTTP-2.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/01 HTTP-2.md
deleted file mode 100644
index 0142794d44..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/01 HTTP-2.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-title: 'HTTP/2'
-excerpt: 'When you make HTTP requests in k6 it will automatically upgrade the connection to HTTP/2.0 if the server supports it, just like your web browser would.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/http-2/
----
-
-## Overview
-
-HTTP/2.0 is the latest version of the HTTP protocol.
-It improves significantly upon HTTP/1.
-Most importantly, it introduces a binary wire protocol with multiplexed streams over a single TCP connection.
-This solves a long-standing performance issue with HTTP/1.1: [head-of-line blocking](https://en.wikipedia.org/wiki/Head-of-line_blocking).
-
-Well, it at least _partially_ solves it.
-The TCP congestion control mechanisms can interfere with the intended independent nature of the multiplexed streams in cases of lost/dropped packets and retransmission/reassembly.
-The full solution is to run HTTP/2.0 over UDP, as Google implemented with [QUIC](https://en.wikipedia.org/wiki/QUIC).
-
-## Additional features of HTTP/2.0
-
-- Builtin compression of HTTP headers
-- Server push
-- Pipelining of requests
-- Prioritization of requests
-
-## Load testing HTTP/2 with k6
-
-When you make HTTP requests in k6, k6 automatically upgrades the connection to HTTP/2.0 if the server supports it, just like your web browser would.
-
-To check what protocol was used for a particular request, refer to the `proto` property of the response object.
-
-
-
-```javascript
-import http from 'k6/http';
-import { check, sleep } from 'k6';
-
-export default function () {
- const res = http.get('https://test-api.k6.io/');
- check(res, {
- 'protocol is HTTP/2': (r) => r.proto === 'HTTP/2.0',
- });
- sleep(1);
-}
-```
-
-
-
-To see the values that the `r.proto` field can have, refer to the documentation for [k6 HTTP](/javascript-api/k6-http/response).
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/02 WebSockets.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/02 WebSockets.md
deleted file mode 100644
index dcb12135b0..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/02 WebSockets.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-title: 'WebSockets'
-excerpt: 'Comparing HTTP based tests to WebSocket ones, there are some differences in the structure and inner workings of k6.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/websockets/
----
-
-## Overview
-
-[WebSocket](https://en.wikipedia.org/wiki/WebSocket) is a protocol that provides full-duplex communication channels over a single TCP connection.
-It is commonly used by single-page apps (SPAs) and mobile apps, to add server-push based functionality, which usually improves performance in polling-based solutions.
-
-## Load testing WebSockets with k6
-
-
-
-#### An extension with much better and standard API exists
-
-[xk6-websockets](https://github.com/grafana/xk6-websockets) implements [the WebSockets API living standard](https://websockets.spec.whatwg.org/). While the implementation isn't full, it uses a global event loop instead of local one.
-
-Currently, it's available as an experimental module [`k6/experimental/websockets`](/javascript-api/k6-experimental/websockets/). It is also likely that it will at some point become part of the core of k6.
-
-
-Comparing HTTP-based tests to WebSocket ones, you'll find differences in both structure and inner workings.
-The primary difference is that instead of continuously looping the main function (`export default function() { ... }`) over and over, each VU is now runs an asynchronous event loop.
-
-The basic structure of a WebSocket test looks like this:
-
-
-
-```javascript
-import ws from 'k6/ws';
-import { check } from 'k6';
-
-export default function () {
- const url = 'ws://echo.websocket.org';
- const params = { tags: { my_tag: 'hello' } };
-
- const res = ws.connect(url, params, function (socket) {
- socket.on('open', () => console.log('connected'));
- socket.on('message', (data) => console.log('Message received: ', data));
- socket.on('close', () => console.log('disconnected'));
- });
-
- check(res, { 'status is 101': (r) => r && r.status === 101 });
-}
-```
-
-
-
-In this example, the [connect()](/javascript-api/k6-ws/connect) method takes a "run" function as its third parameter.
-That function should accept a [Socket](/javascript-api/k6-ws/socket) object as its only parameter.
-The run function forms the basis of the asynchronous event loop.
-
-When the WebSocket connection is created, the run function will be immediately called, all code inside it will be executed (usually code to set up event handlers), and then blocked until the WebSocket connection is closed (by the remote host or by using [socket.close()](/javascript-api/k6-ws/socket/socket-close)).
-
-## Error handling
-
-To catch errors happen during the life of a WebSocket connection, attach a handler to the "error" event:
-
-
-
-```javascript
-import ws from 'k6/ws';
-import { check } from 'k6';
-
-export default function () {
- const url = 'ws://echo.websocket.org';
- const params = { tags: { my_tag: 'hello' } };
-
- const res = ws.connect(url, params, function (socket) {
- socket.on('open', function open() {
- // ...
- });
-
- socket.on('error', function (e) {
- if (e.error() != 'websocket: close sent') {
- console.log('An unexpected error occured: ', e.error());
- }
- });
- });
-
- check(res, { 'status is 101': (r) => r && r.status === 101 });
-}
-```
-
-
-
-## Timers
-
-To schedule a recurring action, use the [socket.setInterval](/javascript-api/k6-ws/socket#section-socketsetinterval) to specify a function to call at a particular interval.
-
-
-
-```javascript
-import ws from 'k6/ws';
-import { check } from 'k6';
-
-export default function () {
- const url = 'ws://echo.websocket.org';
- const params = { tags: { my_tag: 'hello' } };
-
- const res = ws.connect(url, params, function (socket) {
- socket.on('open', function open() {
- console.log('connected');
-
- socket.setInterval(function timeout() {
- socket.ping();
- console.log('Pinging every 1sec (setInterval test)');
- }, 1000);
- });
-
- socket.on('ping', () => console.log('PING!'));
- socket.on('pong', () => console.log('PONG!'));
- socket.on('close', () => console.log('disconnected'));
- });
-
- check(res, { 'status is 101': (r) => r && r.status === 101 });
-}
-```
-
-
-
-## Timeouts
-
-To add a timeout to the WebSocket connection, pass both a handler function and a timeout value (in milliseconds) to the [socket.setTimeout](/javascript-api/k6-ws/socket/socket-settimeout) function.
-
-
-
-```javascript
-import ws from 'k6/ws';
-import { check } from 'k6';
-
-export default function () {
- const url = 'ws://echo.websocket.org';
- const params = { tags: { my_tag: 'hello' } };
-
- const res = ws.connect(url, params, function (socket) {
- socket.on('open', () => console.log('connected'));
- socket.on('close', () => console.log('disconnected'));
-
- socket.setTimeout(function () {
- console.log('2 seconds passed, closing the socket');
- socket.close();
- }, 2000);
- });
-
- check(res, { 'status is 101': (r) => r && r.status === 101 });
-}
-```
-
-
-
-In the preceding example, the timeout will close the WebSocket connection after 2 seconds.
-
-## Multiple event handlers
-
-You can attach multiple handler functions to an event:
-
-
-
-```javascript
-import ws from 'k6/ws';
-import { check } from 'k6';
-
-export default function () {
- const url = 'ws://echo.websocket.org';
- const params = { tags: { my_tag: 'hello' } };
-
- const response = ws.connect(url, params, function (socket) {
- socket.on('open', function open() {
- console.log('connected');
- socket.send(Date.now());
-
- socket.setInterval(function timeout() {
- socket.ping();
- console.log('Pinging every 1sec (setInterval test)');
- }, 1000);
- });
-
- socket.on('ping', () => console.log('PING!'));
- socket.on('pong', () => console.log('PONG!'));
- socket.on('pong', () => {
- // Multiple event handlers on the same event
- console.log('OTHER PONG!');
- });
-
- socket.on('close', () => console.log('disconnected'));
-
- socket.on('error', (e) => {
- if (e.error() != 'websocket: close sent') {
- console.log('An unexpected error occurred: ', e.error());
- }
- });
-
- socket.setTimeout(function () {
- console.log('2 seconds passed, closing the socket');
- socket.close();
- }, 2000);
- });
-
- check(response, { 'status is 101': (r) => r && r.status === 101 });
-}
-```
-
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/03 gRPC.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/03 gRPC.md
deleted file mode 100644
index bbe4407757..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/03 gRPC.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: 'gRPC'
-excerpt: 'gRPC is a lightweight open-source RPC framework. Starting with k6 v0.29.0, we support unary gRPC requests.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/grpc/
----
-
-## Overview
-
-[gRPC](https://grpc.io/) is a lightweight, open-source RPC framework.
-It was originally developed by Google, with version 1.0 released in August 2016.
-Since then, it's gained much attention and wide adoption.
-
-Whereas JSON transmits as human-readable text, gRPC is binary.
-The binary format makes data transfer faster and more compact.
-In the benchmarks we've seen, gRPC has proved much faster than REST, gRPC's more traditional, JSON-based counterpart.
-The messages and services used for gRPC are described in `.proto` files, containing definitions for [Protocol Buffers](https://en.wikipedia.org/wiki/Protocol_Buffers) (protobuf).
-
-k6 also supports unary gRPC requests to the [k6/net/grpc](/javascript-api/k6-net-grpc) built-in module.
-For further information, read [our tutorial about performance testing gRPC services](https://k6.io/blog/performance-testing-grpc-services/).
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS.md
deleted file mode 100644
index a8f436ccbd..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: 'SSL/TLS'
-excerpt: 'By default and without any special configuration, k6 will connect and talk to servers over TLS. You just need to make sure to specify your request URLs with the https scheme.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/ssl-tls/
----
-
-Transport Layer Security (TLS), the successor of Secure Socket Layer (SSL), is the mechanism through
-which encrypted connections can be established between clients and servers on the web and through
-which data can flow with integrity intact.
-
-Simplified, TLS is made possible by using a Public Key Infrastructure (PKI) involving private
-cryptographic keys, certificates of ownership (public, signed with private key), and certificate
-authorities (CAs, issuing and asserting the validity of issued certificates).
-
-The entire system depends on the functioning operation of the CAs.
-The system trusts that the cryptographic keys that CAs use to sign certificates of ownership to site/domain owners are kept secret.
-It also depends on the domain owners' ability to keep their private cryptographic keys secret.
-
-If they fail to do so, they have to report the leak to the CA that issued the certificate.
-After this disclosure, the CA can revoke the certificate and, in doing so, let browsers and other clients know of the changes through
-the Online Certificate Status Protocol (OCSP).
-
-## TLS in k6
-
-By default and without any special configuration, k6 connects and talks to servers over TLS.
-You just need to make sure that you specify your request URLs with the `https` scheme.
-
-K6 supports the following TLS functionalities.
-Each is worth discussing in more detail:
-
-- [TLS client certificates](/using-k6/protocols/ssl-tls/ssl-tls-client-certificates)
-- [TLS version and ciphers](/using-k6/protocols/ssl-tls/ssl-tls-version-and-ciphers) (restricting as
- well as checking what was used for a HTTP request by checking response object properties)
-- [Online Certificate Status Protocol (OCSP)](/using-k6/protocols/ssl-tls/online-certificate-status-protocol-ocsp)
-- [Response.timings.tls_handshaking](/javascript-api/k6-http/response)
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/Online Certificate Status Protocol -OCSP-.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/Online Certificate Status Protocol -OCSP-.md
deleted file mode 100644
index 72e37a7186..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/Online Certificate Status Protocol -OCSP-.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: 'Online Certificate Status Protocol (OCSP)'
-excerpt: 'k6 supports OCSP stapling, receiving and parsing a stapled response as part of
-the TLS connection setup.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/ssl-tls/online-certificate-status-protocol-ocsp/
----
-
-## What is OCSP?
-
-The Online Certificate Status Protocol (OCSP) lets web browsers and clients check the status of an issued TLS certificate with a Certificate Authority (CA), ensuring that the certificate has not been revoked.
-
-It exists different ways to check whether the certificate has been revoked.
-Each way places the burden on different parties:
-
-- The browser/client: talk to the CA (or through a CA–entrusted OCSP responder) with OCSP. One downside
- with this approach is that the CA's servers need to be available.
-
-- The browser vendor: maintain an up-to-date list of certificate revocations by talking to
- the CAs (or through a CA–entrusted OCSP responder) and distributing this list to the browsers
- running on users' machines.
-- The server side: the server handles the interaction with the CA (or through a CA–entrusted OCSP
- responder), caching the results of the periodic updates and including a "stapled response"
- (referred to as OCSP stapling) in the TLS connection setup with the browser/client.
-
-## OCSP with k6
-
-k6 supports OCSP stapling.
-The application can receive and parse a stapled response as part of the TLS connection setup.
-The OCSP response information is available in the `ocsp.stapled_response` property of the response object.
-
-
-
-```javascript
-import http from 'k6/http';
-import { check } from 'k6';
-
-export default function () {
- const res = http.get('https://stackoverflow.com');
- check(res, {
- 'is OCSP response good': (r) => r.ocsp.status === http.OCSP_STATUS_GOOD,
- });
-}
-```
-
-
-
-## Properties of an OCSP object
-
-The OCSP `ocsp` object contains the following properties:
-
-| Key | Type | Description |
-| ------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `status` | string | the status of the certificate, see possible values below |
-| `revocation_reason` | string | the reason for revocation of the certificate (if that is the status), see possible values below |
-| `produced_at` | number | number of milliseconds elapsed since 1 January 1970 00:00:00 UTC, representing the time when this OCSP stapled response was signed by the CA (or CA–entrusted OCSP responder) |
-| `this_update` | number | number of milliseconds elapsed since 1 January 1970 00:00:00 UTC, representing the time when the status being indicated was known to be correct |
-| `next_update` | number | number of milliseconds elapsed since 1 January 1970 00:00:00 UTC, representing the time when this OCSP stapled response will be refreshed with CA (or by CA entrusted OCSP responder) |
-| `revoked_at` | number | number of milliseconds elapsed since 1 January 1970 00:00:00 UTC, representing the time when this certificate was revoked (if that is the status) |
-
-### Possible values for `status`:
-
-- `http.OCSP_STATUS_GOOD`
-- `http.OCSP_STATUS_REVOKED`
-- `http.OCSP_STATUS_UNKNOWN`
-- `http.OCSP_STATUS_SERVER_FAILED`
-
-### Possible values for `revocation_reason`:
-
-- `http.OCSP_REASON_UNSPECIFIED`
-- `http.OCSP_REASON_KEY_COMPROMISE`
-- `http.OCSP_REASON_CA_COMPROMISE`
-- `http.OCSP_REASON_AFFILIATION_CHANGED`
-- `http.OCSP_REASON_SUPERSEDED`
-- `http.OCSP_REASON_CESSATION_OF_OPERATION`
-- `http.OCSP_REASON_CERTIFICATE_HOLD`
-- `http.OCSP_REASON_REMOVE_FROM_CRL`
-- `http.OCSP_REASON_PRIVILEGE_WITHDRAWN`
-- `http.OCSP_REASON_AA_COMPROMISE`
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS client certificates.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS client certificates.md
deleted file mode 100644
index 8e2e2ecf3a..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS client certificates.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: 'SSL/TLS client certificates'
-excerpt: 'To use client certificates, you specify global that tell k6 how to map a public certificate and private key to the domains they are valid for.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/ssl-tls/ssl-tls-client-certificates/
----
-
-Discussion about TLS certificates is usually about how clients authenticate servers.
-However, both TLS and k6 also support the reverse process, in which servers authenticate clients.
-
-To use client certificates, specify global [configuration options](/using-k6/options) that tell k6 how to map a public certificate and private key to the domains they are valid for.
-You can load the certificate and key from local files or embed them as strings in the script.
-
-## Loading a certificate and a key from local files
-
-To load a certificate and a key from local files, use the builtin `open(...)` function:
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- tlsAuth: [
- {
- domains: ['example.com'],
- cert: open('./mycert.pem'),
- key: open('./mycert-key.pem'),
- },
- ],
-};
-
-export default function () {
- http.get('https://example.com/');
-}
-```
-
-
-
-## Loading certificate and key from embedded strings
-
-To load the certificate and key from embedded strings, use this snippet.
-Note the use of
-[template literals](https://developer.mozilla.org/en-US/Web/JavaScript/Reference/Template_literals) for multi-line strings):
-
-> ### ⚠ These are just example keys
->
-> They're not real and were never used anywhere.
-
-
-
-```javascript
-import http from 'k6/http';
-
-const CERT = `-----BEGIN CERTIFICATE-----
-MIIFgTCCA2kCAQEwDQYJKoZIhvcNAQEFBQAwgYExCzAJBgNVBAYTAlNFMRcwFQYD
-VQQIEw5TdG9ja2hvbG1zIExhbjESMBAGA1UEBxMJU3RvY2tob2xtMRcwFQYDVQQK
-...
-/n5QrTGhP51P9Q1THzRfn6cNCDwzSTMVEJr40QhuTJQWASe3miuFmZoG5ykmGqVm
-fWQRiQyM330s9vTwFy14J2Bxe4px6cyy7rVXvYL2LvfA4L0T7/x1nUULw+Mpqun1
-R3XRJWqGDjBKXr5q8VatdQO1QLgr
------END CERTIFICATE-----`;
-
-const KEY = `-----BEGIN RSA PRIVATE KEY-----
-KsZVVI1FTX+F959vqu1S02T+R1JM29PkIfJILIXapKQfb0FWrALU5xpipdPYBWp7
-j5iSp06/7H8ms87Uz9BrOA6rytoRSE0/wEe5WkWdBBgLLPpfOSWZsAA5RGCB2n+N
-...
-Dk+frzKuiErHFN7HOHAQannui4eLsY0ehYMByowgJIUGzIJyXR6O19hVhV7Py66u
-X7/Jy01JXn83LuWdpaPAKU+B42BLP0IGXt5CocPms07HOdtJ/wm2zwHTyfjn9vu+
-HO/dQr6a7DhRu2lLI9Sc983NwRqDKICZQQ/+gqWk8BgQZ1yI9O4AYkzywzAEk3py
------END RSA PRIVATE KEY-----`;
-
-export const options = {
- tlsAuth: [
- {
- domains: ['example.com'],
- cert: CERT,
- key: KEY,
- },
- ],
-};
-
-export default function () {
- http.get('https://example.com/');
-}
-```
-
-
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS version and ciphers.md b/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS version and ciphers.md
deleted file mode 100644
index 922fd9d8e4..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/10 Protocols/04 SSL-TLS/SSL-TLS version and ciphers.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-title: 'SSL/TLS version and ciphers'
-excerpt: 'To support testing specific client configurations, you can set a specific version or range
-of versions of SSL/TLS that should be allowed for a connection.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/protocols/ssl-tls/ssl-tls-version-and-ciphers/
----
-
-To support testing specific client configurations, you can specify a version or range of versions of SSL/TLS that are allowed for a connection.
-You can as also specify which cipher suites are allowed for that connection.
-
-
-> #### ⚠️ Reg. ciphers and TLS 1.3
->
-> Due to limitations in the underlying [go implementation](https://github.com/golang/go/issues/29349), changing the ciphers for TLS 1.3 is *not* supported and will do nothing.
-
-## Limiting SSL/TLS version
-
-To limit the k6 to a specific SSL/TLS version, use a global
-[configuration option](/using-k6/options):
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- tlsVersion: http.TLS_1_2,
-};
-
-export default function () {
- http.get('https://badssl.com');
-}
-```
-
-
-
-You can also accept a range of SSL/TLS versions:
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- tlsVersion: {
- min: http.SSL_3_0,
- max: http.TLS_1_2,
- },
-};
-
-export default function () {
- http.get('https://badssl.com');
-}
-```
-
-
-
-## Versions available to choose from
-
-Here's the list of available SSL/TLS versions that you can choose from, ordered from oldest version to latest.
-
-- `http.SSL_3_0`
-- `http.TLS_1_0`
-- `http.TLS_1_1`
-- `http.TLS_1_2`
-- `http.TLS_1_3`
-
-## Limiting cipher suites
-
-To limit the cipher suites that k6 is allowed to use, there's a global
-[configuration option](/using-k6/options).
-You choose a list of allowed ciphers:
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- tlsCipherSuites: ['TLS_RSA_WITH_RC4_128_SHA', 'TLS_RSA_WITH_AES_128_GCM_SHA256'],
-};
-
-export default function () {
- http.get('https://badssl.com');
-}
-```
-
-
-
-## Checking SSL/TLS version and cipher suite used in requests
-
-You can also check which SSL/TLS version and ciphers were used.
-To do so, look at the `tls_version` and `tls_cipher_suite` response object properties.
-
-
-
-```javascript
-import http from 'k6/http';
-import { check } from 'k6';
-
-export default function () {
- const res = http.get('https://sha256.badssl.com');
- check(res, {
- 'is TLSv1.2': (r) => r.tls_version === http.TLS_1_2,
- 'is sha256 cipher suite': (r) => r.tls_cipher_suite === 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
- });
-}
-```
-
-
-
-## Cipher suites available to choose from
-
-Here's a list of available SSL/TLS cipher suites:
-
-- `TLS_RSA_WITH_RC4_128_SHA`
-- `TLS_RSA_WITH_3DES_EDE_CBC_SHA`
-- `TLS_RSA_WITH_AES_128_CBC_SHA`
-- `TLS_RSA_WITH_AES_256_CBC_SHA`
-- `TLS_RSA_WITH_AES_128_GCM_SHA256`
-- `TLS_RSA_WITH_AES_256_GCM_SHA384`
-- `TLS_ECDHE_ECDSA_WITH_RC4_128_SHA`
-- `TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
-- `TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
-- `TLS_ECDHE_RSA_WITH_RC4_128_SHA`
-- `TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA`
-- `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
-- `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
-- `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
-- `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
-- `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
-- `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
-
-> ### ⚠️ Differences depending on k6 build
->
-> This list reflects the available cipher suites in the latest official build.
-> If you are using a custom-built k6, the available cipher suites will depend on the Go version you compiled it with, see [https://golang.org/pkg/crypto/tls/#pkg-constants](https://golang.org/pkg/crypto/tls/#pkg-constants).
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/11 Environment variables.md b/src/data/markdown/translated-guides/en/02 Using k6/11 Environment variables.md
index 471b96c584..02eec79aec 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/11 Environment variables.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/11 Environment variables.md
@@ -2,6 +2,7 @@
title: 'Environment variables'
excerpt: 'You can access any environment variables from your k6 script code and use this to supply your VUs with configuration information.'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/environment-variables/
+redirect: https://grafana.com/docs/k6/latest/using-k6/environment-variables/
---
Often, scripts need only minor tweaks to be reusable in different contexts.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/12 Execution context variables.md b/src/data/markdown/translated-guides/en/02 Using k6/12 Execution context variables.md
index d811d4106f..d83fad592d 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/12 Execution context variables.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/12 Execution context variables.md
@@ -2,6 +2,7 @@
title: 'Execution context variables'
excerpt: 'k6/execution module provides the capability to get information about the current test execution state inside the test script'
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/execution-context-variables/
+redirect: https://grafana.com/docs/k6/latest/using-k6/execution-context-variables/
---
In some cases, it's really useful to have information about the script's current test-execution state. For example, you might want to
- Have different VUs run different test logic
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios.md
index 7e8cf1e5b1..c877445a6e 100644
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios.md
+++ b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios.md
@@ -3,6 +3,7 @@ title: Scenarios
excerpt: 'Scenarios allow us to make in-depth configurations to how VUs and iterations are scheduled. This makes it possible to model diverse traffic patterns in load tests.'
hideFromSidebar: false
canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/
+redirect: https://grafana.com/docs/k6/latest/using-k6/scenarios/
---
Scenarios configure how VUs and iteration schedules in granular detail.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts.md
deleted file mode 100644
index b9b0f64125..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: "Concepts"
-excerpt: High-level explanations about how your executor configuration can change the test execution and test results
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/
----
-
-These topics explain the essential concepts of how scenarios and their executors work.
-
-Different scenario configurations can affect many different aspects of your system,
-including the generated load, utilized resources, and emitted metrics.
-If you know a bit about how scenarios work, you'll design better tests and interpret test results with more understanding.
-
-| On this page | Read about |
-|----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
-| [Open and closed models](/using-k6/scenarios/concepts/open-vs-closed/) | Different ways k6 can schedule VUs, their affects on test results, and how k6 implements the open model in its arrival-rate executors |
-| [Graceful Stop](/using-k6/scenarios/concepts/graceful-stop) | A configurable period for iterations to finish or ramp down after the test reaches its scheduled duration |
-| [Arrival-rate VU allocation](/using-k6/scenarios/concepts/arrival-rate-vu-allocation/) | How k6 allocates VUs in arrival-rate executors |
-| [Dropped iterations](/using-k6/scenarios/concepts/dropped-iterations/) | Possible reasons k6 might drop a scheduled iteration |
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/00 Open-vs-closed.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/00 Open-vs-closed.md
deleted file mode 100644
index 0101497470..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/00 Open-vs-closed.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-title: 'Open and closed models'
-slug: '/using-k6/scenarios/concepts/open-vs-closed/'
-excerpt: 'k6 has two ways to schedule VUs, which can affect test results. k6 implements the open model in its arrival-rate executors.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/open-vs-closed/
----
-
-Different k6 executors have different ways of scheduling VUs.
-Some executors use the _closed model_, while the arrival-rate executors use the _open model_.
-
-In short, in the closed model, VU iterations start only when the last iteration finishes.
-In the open model, on the other hand, VUs arrive independently of iteration completion.
-Different models suit different test aims.
-
-## Closed Model
-
-In a closed model, the execution time of each iteration dictates the
-number of iterations executed in your test.
-The next iteration doesn't start until the previous one finishes.
-
-Thus, in a closed model, the start or arrival rate of
-new VU iterations is tightly coupled with the iteration duration (that is, time from start
-to finish of the VU's `exec` function, by default the `export default function`):
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- scenarios: {
- closed_model: {
- executor: 'constant-vus',
- vus: 1,
- duration: '1m',
- },
- },
-};
-
-export default function () {
- // The following request will take roughly 6s to complete,
- // resulting in an iteration duration of 6s.
-
- // As a result, New VU iterations will start at a rate of 1 per 6s,
- // and we can expect to get 10 iterations completed in total for the
- // full 1m test duration.
-
- http.get('https://httpbin.test.k6.io/delay/6');
-}
-```
-
-
-
-Running this script would result in something like:
-
-```bash
-
-running (1m01.5s), 0/1 VUs, 10 complete and 0 interrupted iterations
-closed_model ✓ [======================================] 1 VUs 1m0s
-
-```
-
-### Drawbacks of using the closed model
-
-When the duration of the VU iteration is tightly coupled to the start of new VU iterations,
-the target system's response time can influence the throughput of the test.
-Slower response times means longer iterations and a lower arrival rate of new iterations―and vice versa for faster response times.
-In some testing literature, this problem is known as _coordinated omission._
-
-In other words, when the target system is stressed and starts to respond more
-slowly, a closed model load test will wait, resulting in increased
-iteration durations and a tapering off of the arrival rate of new VU iterations.
-
-This effect is not ideal when the goal is to simulate a certain arrival rate of new VUs,
-or more generally throughput (e.g. requests per second).
-
-## Open model
-
-Compared to the closed model, the open model decouples VU iterations from
-the iteration duration.
-The response times of the target system no longer
-influence the load on the target system.
-
-To fix this problem of coordination, you can use an open model,
-which decouples the start of new VU iterations from the iteration duration.
-This reduces the influence of the target system's response time.
-
-![Arrival rate closed/open models](../../images/Scenarios/arrival-rate-open-closed-model.png)
-
-k6 implements the open model with two _arrival rate_ executors:
-[constant-arrival-rate](/using-k6/scenarios/executors/constant-arrival-rate) and [ramping-arrival-rate](/using-k6/scenarios/executors/ramping-arrival-rate):
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- scenarios: {
- open_model: {
- executor: 'constant-arrival-rate',
- rate: 1,
- timeUnit: '1s',
- duration: '1m',
- preAllocatedVUs: 20,
- },
- },
-};
-
-export default function () {
- // With the open model arrival rate executor config above,
- // new VU iterations will start at a rate of 1 every second,
- // and we can thus expect to get 60 iterations completed
- // for the full 1m test duration.
- http.get('https://httpbin.test.k6.io/delay/6');
-}
-```
-
-
-
-Running this script would result in something like:
-
-```bash
-running (1m09.3s), 000/011 VUs, 60 complete and 0 interrupted iterations
-open_model ✓ [======================================] 011/011 VUs 1m0s 1 iters/s
-```
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/01 Graceful stop.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/01 Graceful stop.md
deleted file mode 100644
index 45638e8e51..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/01 Graceful stop.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: 'Graceful stop'
-excerpt: 'This option is available for all executors except externally-controlled and allows the user to specify a duration to wait before forcefully interrupting them.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/graceful-stop/
----
-
-The `gracefulStop` is a period at the end of the test in which k6 lets iterations in progress finish.
-
-If a test has a set duration or ramp down, its possible that k6 could interrupt iterations in progress.
-These interruptions can lead to skewed metrics and unexpected test results.
-To deal with this, k6 scenarios have a `gracefulStop`.
-For the `ramping-vus` executor, a related option, `gracefulRampDown`, exists to let VUs finish as their number ramps down.
-
-
-## Graceful stop
-
-The `gracefulStop` option is available for all executors except `externally-controlled`.
-It specifies a duration that k6 will wait before forcefully interrupting an iteration.
-The default value is `30s`.
-
-### Graceful stop example
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'constant-vus',
- vus: 100,
- duration: '10s',
- gracefulStop: '3s',
- },
- },
-};
-
-export default function () {
- const delay = Math.floor(Math.random() * 5) + 1;
- http.get(`https://httpbin.test.k6.io/delay/${delay}`);
-}
-```
-
-
-
-Running this script would result in something like:
-
-```bash
-running (13.0s), 000/100 VUs, 349 complete and 23 interrupted iterations
-contacts ✓ [======================================] 100 VUs 10s
-```
-
-Notice that even though the total test duration is 10s, the actual execution time was 13s
-because of `gracefulStop`, giving the VUs a 3s additional time to complete iterations in progress. 23
-of the iterations currently in progress did not complete within this window and was therefore interrupted.
-
-## The `gracefulRampDown`
-
-In addition to `gracefulStop`, the [ramping-vus](/using-k6/scenarios/executors/ramping-vus) executor also has a `gracefulRampDown`.
-
-When the target value for a stage is lower than the target for the previous stage, k6 might need to stop some VUs that were started during the previous stages.
-The `gracefulRampDown` option controls how long these VUs have to finish currently before k6 interrupts them.
-
-To get an idea of how `gracefulRampDown` works, you can run the following script with
-`k6 run --verbose`.
-In this script, the iteration `sleep` time exceeds the `gracefulRampdown` time.
-So, as k6 ramps down to reach the target of the second stage, it must forcibly interrupt VUs.
-The `--verbose` flag will log to your console when VUs start, enter the grace period, and are forcibly interrupted.
-
-```javascript
-import http from "k6/http";
-import { sleep } from "k6";
-
-export const options = {
- discardresponsebodies: true,
- scenarios: {
- contacts: {
- executor: "ramping-vus",
- startvus: 0,
- stages: [
- { duration: "10s", target: 10 },
- { duration: "10s", target: 0 },
- ],
- gracefulRampDown: "1s",
- },
- },
-};
-
-export default function () {
- http.get("https://test.k6.io/contacts.php");
- // adding sleep beyond so that iterations are longer than rampdown
- sleep(5);
-}
-```
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/02 Arrival-rate VU allocation.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/02 Arrival-rate VU allocation.md
deleted file mode 100644
index 0b588efd19..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/02 Arrival-rate VU allocation.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-title: Arrival-rate VU allocation
-excerpt: How k6 allocates VUs in the open-model, arrival-rate executors
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/arrival-rate-vu-allocation/
----
-
-In arrival-rate executors, as long as k6 has VUs available, it starts iterations according to your target rate.
-The ability to set iteration rate comes with a bit more configuration complexity: you must pre-allocate a sufficient number of VUs.
-In other words, before the tests runs, you must both:
-
-- Configure load (as new iterations per unit of time)
-- Ensure that you've allocated enough VUs.
-
-Read on to learn about how k6 allocates VUs in the arrival-rate executors.
-
-
-
-In cloud tests, **`preAllocatedVUs` count against your subscription.**
-
-When planning a test, consider doing a trial initialization on a local machine to ensure you're allocating VUs efficiently.
-
-
-
-## Pre-allocation in arrival-rate executors
-
-As [open-model](/using-k6/scenarios/concepts/open-vs-closed/#open-model) scenarios, arrival-rate executors start iterations according to a configured rate.
-For example, you can configure arrival-rate executors to start 10 iterations each second, or minute, or hour.
-This behavior is opposed to the closed-model scenarios, in which VUs wait for one iteration to finish before starting another
-
-Each iteration needs a VU to run it.
-Because k6 VUs are single threaded, like other JavaScript runtimes, a VU can only run a single iteration (and its event loop) at a time.
-To ensure you have enough, you must pre-allocate a sufficient number.
-
-In your arrival-rate configuration, three properties determine the iteration rate:
-
-- k6 starts `rate` number of iterations evenly across the `timeUnit` (default 1s).
-- `preAllocatedVUs` sets the number of VUs to initialize to meet the target iteration rate.
-
-For example, with a `constant-arrival-rate` executor and `rate: 10`, k6 tries to start a new iteration every 100 milliseconds. If the scenario has `rate: 10, timeUnit: '1m'`, k6 tries to start a new iteration every 6 seconds.
-Whether it _can_ start the target iteration rate depends on whether the number of allocated VUs is sufficient.
-
-```javascript
-export const options = {
- scenarios: {
- constant_load: {
- executor: "constant-arrival-rate",
- preAllocatedVUs: 10,
- rate: 10,
- timeUnit: "1m",
- },
- },
-};
-```
-
-In practice, determining the right number of VUs to be able to reach the target iteration rate might take some trial and error,
-as the necessary VUs entirely depends on what your iteration code looks like and how quickly the system under test can process requests.
-
-
-## How k6 uses allocated VUs
-
-Before an arrival-rate scenario starts, k6 first initializes the number of `preAllocatedVUs`.
-When the test runs,
-the number of available `preAllocatedVUs` determines how many iterations k6 can start.
-k6 tries to reach the target iterations per second,
-and one of two things can happen:
-
-| If the executor | Then.. |
-|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------|
-| Has enough VUs | the extra VUs are "idle," ready to be used when needed. |
-| Has insufficient VUs. | k6 emits a [`dropped_iterations` metric](/using-k6/scenarios/concepts/dropped-iterations) for each iteration that it can't run. |
-
-## Iteration duration affects the necessary allocation
-
-The necessary allocation depends on the iteration duration:
-longer durations need more VUs.
-
-In a perfect world, you could estimate the number of pre-allocated VUs with this formula:
-
-```
-preAllocatedVUs = [median_iteration_duration * rate] + constant_for_variance
-```
-
-In the real world, if you know _exactly_ how long an iteration takes, you likely don't need to run a test.
-What's more, as the test goes on, iteration duration likely increases.
-If response times slow so much that k6 lacks the VUs to start iterations at the desired rate,
-the allocation might be insufficient and k6 will drop iterations.
-
-To determine your strategy, you can run tests locally and gradually add more pre-allocated VUs.
-As dropped iterations can also indicate that the system performance is degrading, this early experimentation can provide useful data on its own.
-
-## You probably don't need `maxVUs`
-
-
-
-In cloud tests, the number of `maxVUs` counts against your subscription,
-**overriding the number set by `preAllocatedVUs`**.
-
-
-
-The arrival-rate executors also have a `maxVUs` property.
-If you set it, k6 runs in this sequence:
-
-1. Pre-allocate the `preAllocatedVUs`.
-1. Run the test, trying to reach the target iteration rate.
-1. If the target exceeds the available VUs, allocate another VU.
-1. If the target still exceeds available VUs, continue allocating VUs until reaching the number set by `maxVUs`.
-
-Though it seems convenient, you should avoid using `maxVUs` in most cases.
-Allocating VUs has CPU and memory costs, and allocating VUs as the test runs **can overload the load generator and skew results**.
-In Cloud tests, the number of `maxVUs` count against your subscription.
-This is because k6 must allocate sufficient resources for `maxVUs` to be initialized, even if they never are.
-In almost all cases, the best thing to do is to pre-allocate the number of VUs you need beforehand.
-
-Some of the times it might make sense to use `maxVUs` include:
-
-- To determine necessary allocation in first-time tests
-- To add a little "cushion" to the pre-allocated VUs that you expect the test needs
-- In huge, highly distributed tests, in which you need to carefully scale load generators as you increment VUs.
-
-## You can't guarantee which VU runs an iteration
-
-As with all executors, you can't predict the specific VU that an arrival-rate executor uses for a specific iteration.
-As the test runs on, the executor might use some or all of the allocated VUs, even if it never needs the entire allocated number to reach the iteration rate.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/03 Dropped iterations.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/03 Dropped iterations.md
deleted file mode 100644
index cdc34bd199..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/00 Concepts/03 Dropped iterations.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: Dropped iterations
-excerpt: Explanations about how your scenario configuration or SUT performance can lead to dropped iterations
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/dropped-iterations/
----
-
-Sometimes, a scenario can't run the expected number of iterations.
-k6 tracks the number of unsent iterations in a counter metric, `dropped_iterations`.
-The number of dropped iterations can be valuable data when you debug executors or analyze results.
-
-Dropped iterations usually happen for one of two reasons:
-- The executor configuration is insufficient.
-- The SUT can't handle the configured VU arrival rate.
-
-### Configuration-related iteration drops
-
-Dropped iterations happen for different reasons in different types of executors.
-
-With `shared-iterations` and `per-vu-iterations`, iterations drop if the scenario reaches its `maxDuration` before all iterations finish.
-To mitigate this, you likely need to increase the value of the duration.
-
-With `constant-arrival-rate` and `ramping-arrival-rate`, iterations drop if there are no free VUs.
-**If it happens at the beginning of the test, you likely just need to allocate more VUs.**
-If this happens later in the test, the dropped iterations might happen because SUT performance is degrading and iterations are taking longer to finish.
-
-### SUT-related iteration drops
-
-At a certain point of high latency or longer iteration durations, k6 will no longer have free VUs to start iterations with at the configured rate.
-As a result, the executor will drop iterations.
-
-The reasons for these dropped iterations vary:
-- The SUT response has become so long that k6 starts dropping scheduled iterations from the queue.
-- The SUT iteration duration has become so long that k6 needs to schedule more VUs to reach the target arrival rate, exceeding the number of scheduled iterations.
-
-As the causes vary, dropped iterations might mean different things.
-A few dropped iterations might indicate a quick network error.
-Many dropped iterations might indicate that your SUT has completely stopped responding.
-
-When you design your test, consider what an acceptable rate of dropped iterations is (the _error budget_).
-To assert that the SUT responds within this error budget, you can use the `dropped_iterations` metric in a [Threshold](/using-k6/thresholds).
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors.md
deleted file mode 100644
index 5c1dcc433f..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: 'Executors'
-excerpt: 'Executors control how k6 schedules VUs and iterations. Choose the executor to model traffic you want to model to test your services'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/
----
-
-**Executors** control how k6 schedules VUs and iterations.
-The executor that you choose depends on the goals of your test and the type of traffic you want to model.
-
-Define the executor in `executor` key of the scenario object.
-The value is the executor name separated by hyphens.
-
-
-```javascript
-export const options = {
- scenarios: {
- arbitrary_scenario_name: {
- //Name of executor
- executor: 'ramping-vus',
- // more configuration here
- },
- },
-};
-```
-
-
-## All executors
-
-The following table lists all k6 executors and links to their documentation.
-
-| Name | Value | Description |
-| ---------------------------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [Shared iterations](/using-k6/scenarios/executors/shared-iterations) | `shared-iterations` | A fixed amount of iterations are
shared between a number of VUs. |
-| [Per VU iterations](/using-k6/scenarios/executors/per-vu-iterations) | `per-vu-iterations` | Each VU executes an exact number of iterations. |
-| [Constant VUs](/using-k6/scenarios/executors/constant-vus) | `constant-vus` | A fixed number of VUs execute as many
iterations as possible for a specified amount of time. |
-| [Ramping VUs](/using-k6/scenarios/executors/ramping-vus) | `ramping-vus` | A variable number of VUs execute as many
iterations as possible for a specified amount of time. |
-| [Constant Arrival Rate](/using-k6/scenarios/executors/constant-arrival-rate) | `constant-arrival-rate` | A fixed number of iterations are executed
in a specified period of time. |
-| [Ramping Arrival Rate](/using-k6/scenarios/executors/ramping-arrival-rate) | `ramping-arrival-rate` | A variable number of iterations are
executed in a specified period of time. |
-| [Externally Controlled](/using-k6/scenarios/executors/externally-controlled) | `externally-controlled` | Control and scale execution at runtime
via [k6's REST API](/misc/k6-rest-api) or the [CLI](https://k6.io/blog/how-to-control-a-live-k6-test). |
-
-
-
-
-For any given scenario, you can't guarantee that a specific VU can run a specific iteration.
-
-With [`SharedArray`](/javascript-api/k6-data/sharedarray/) and [execution context variables](/using-k6/execution-context-variables/), you can map a specific VU to a specific value in your test data.
-So the tenth VU could use the tenth item in your array (or the sixth iteration to the sixth item).
-
-But, you _cannot_ reliably map, for example, the tenth VU to the tenth iteration.
-
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/01 shared-iterations.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/01 shared-iterations.md
deleted file mode 100644
index 08bb885805..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/01 shared-iterations.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: 'Shared iterations'
-excerpt: 'A fixed number of iterations are "shared" between a number of VUs, and the test ends once all iterations are executed.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/shared-iterations/
----
-
-The `shared-iterations` executor shares iterations between the number of VUs.
-The test ends once k6 executes all iterations.
-
-For a shortcut to this executor, use the [vus](/using-k6/k6-options/reference#vus) and [iterations](/using-k6/k6-options/reference#iterations) options.
-
-
-
-Iterations **are not guaranteed to be evenly distributed** with this executor.
-VU that executes faster will complete more iterations than slower VUs.
-
-To guarantee that every VU completes a specific, fixed number of iterations, [use the per-VU iterations executor](/using-k6/scenarios/executors/per-vu-iterations).
-
-
-
-
-## Options
-
-Besides the [common configuration options](/using-k6/scenarios#options),
-this executor has the following options:
-
-| Option | Type | Description | Default |
-| ------------- | ------- | ---------------------------------------------------------------------------------- | ------- |
-| vus | integer | Number of VUs to run concurrently. | `1` |
-| iterations | integer | Total number of script iterations to execute across all VUs. | `1` |
-| maxDuration | string | Maximum scenario duration before it's forcibly stopped (excluding `gracefulStop`). | `"10m"` |
-
-## When to use
-
-This executor is suitable when you want a specific number of VUs to complete a fixed
-number of total iterations, and the amount of iterations per VU is unimportant.
-If the **time to complete** a number of test iterations is your concern, this executor should perform best.
-
-An example use case is for quick performance tests in the development build cycle.
-As developers make changes, they might run the test against the local code to test for performance regressions.
-Thus the executor works well with a _shift-left_ policy, where emphasizes testing performance early in the development cycle, when the cost of a fix is lowest.
-
-## Example
-
-The following example schedules 200 total iterations shared by 10 VUs with a maximum test duration of 30 seconds.
-
-
-
-```javascript
-import http from 'k6/http';
-import { sleep } from 'k6';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'shared-iterations',
- vus: 10,
- iterations: 200,
- maxDuration: '30s',
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
- // Injecting sleep
- // Sleep time is 500ms. Total iteration time is sleep + time to finish request.
- sleep(0.5);
-}
-```
-
-
-
-## Observations
-
-The following graph depicts the performance of the [example](#example) script:
-
-![Shared Iterations](./images/shared-iterations.png)
-
-Based upon our test scenario inputs and results:
-
-* Test is limited to a fixed number of 200 iterations of the `default` function;
-* The number of VUs is fixed to 10, and are initialized before the test begins;
-* Each _iteration_ of the `default` function is expected to be roughly 515ms, or ~2/s;
-* Maximum throughput (highest efficiency) is therefore expected to be ~20 iters/s, `2 iters/s * 10 VUs`;
-* The maximum throughput is maintained for a larger portion of the test;
-* The distribution of iterations may be skewed: one VU may have performed 50 iterations, another only 10.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/02 per-vu-iterations.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/02 per-vu-iterations.md
deleted file mode 100644
index 273f6510b5..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/02 per-vu-iterations.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: 'Per VU iterations'
-excerpt: 'Each VU executes an exact number of iterations.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/per-vu-iterations/
----
-
-With the `per-vu-iterations` executor, each VU executes an exact number of iterations.
-The total number of completed iterations equals `vus * iterations`.
-
-## Options
-
-Besides the [common configuration options](/using-k6/scenarios#options),
-this executor has the following options:
-
-| Option | Type | Description | Default |
-| ------------- | ------- | ---------------------------------------------------------------------------------- | ------- |
-| vus | integer | Number of VUs to run concurrently. | `1` |
-| iterations | integer | Number of `exec` function iterations to be executed by each VU. | `1` |
-| maxDuration | string | Maximum scenario duration before it's forcibly stopped (excluding `gracefulStop`). | `"10m"` |
-
-## When to use
-
-Use this executor if you need a specific number of VUs to complete the same number of
-iterations. This can be useful when you have fixed sets of test data that you want to
-partition between VUs.
-
-## Example
-
-The following example schedules 10 VUs to execute 20 iterations _each_.
-The test runs 200 total iterations and has a maximum duration of 30 seconds.
-
-
-
-```javascript
-import http from 'k6/http';
-import { sleep } from 'k6';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'per-vu-iterations',
- vus: 10,
- iterations: 20,
- maxDuration: '30s',
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
- // Injecting sleep
- // Sleep time is 500ms. Total iteration time is sleep + time to finish request.
- sleep(0.5);
-}
-```
-
-
-
-## Observations
-
-The following graph depicts the performance of the [example](#example) script:
-
-![Per VU Iterations](./images/per-vu-iterations.png)
-
-Based upon our test scenario inputs and results:
-
-* The number of VUs is fixed at 10, and are initialized before the test begins;
-* Total iterations are fixed at 20 iterations per VU, i.e. 200 iterations, `10 VUs * 20 iters each`;
-* Each _iteration_ of the `default` function is expected to be roughly 515ms, or ~2/s;
-* Maximum throughput (highest efficiency) is therefore expected to be ~20 iters/s, `2 iters/s * 10 VUs`;
-* The maximum throughput is reached, but not maintained;
-* Because the distribution of iterations is even among VUs, a _fast_ VU may finish early and be idle for the remainder of the test, thereby lowering _efficiency_;
-* Total duration of 9 seconds is slightly longer than [shared iterations](/using-k6/scenarios/executors/shared-iterations) due to lower efficiency;
-* Overall test duration lasts as long as the _slowest_ VU takes to complete 20 requests.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/03 constant-vus.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/03 constant-vus.md
deleted file mode 100644
index c78cd83b34..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/03 constant-vus.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: 'Constant VUs'
-excerpt: 'A fixed number of VUs execute as many iterations as possible for a specified amount of time.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/constant-vus/
----
-
-With the `constant-vus` executor, a fixed number of VUs execute as many iterations as possible for a specified amount of time.
-
-For a shortcut to this executor, use the [vus](/using-k6/options#vus) and [duration](/using-k6/options#duration) options.
-
-## Options
-
-Besides the [common configuration options](/using-k6/scenarios#options),
-this executor has the following options:
-
-| Option | Type | Description | Default |
-| ----------- | ------- | --------------------------------------------------- | ------- |
-| duration(required) | string | Total scenario duration (excluding `gracefulStop`). | - |
-| vus | integer | Number of VUs to run concurrently. | `1` |
-
-## When to use
-
-Use this executor if you need a specific number of VUs to run for a certain amount of time.
-
-## Example
-
-This examples schedules 10 VUs to run constantly for a duration 30 seconds.
-
-
-
-```javascript
-import http from 'k6/http';
-import { sleep } from 'k6';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'constant-vus',
- vus: 10,
- duration: '30s',
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
- // Injecting sleep
- // Total iteration time is sleep + time to finish request.
- sleep(0.5);
-}
-```
-
-
-
-## Observations
-
-The following graph depicts the performance of the [example](#example) script:
-
-![Constant VUs](./images/constant-vus.png)
-
-Based upon our test scenario inputs and results:
-
-* The number of VUs is fixed at 10, and are initialized before the test begins;
-* Overall test duration is fixed at the configured 30 second duration;
-* Each _iteration_ of the `default` function is expected to be roughly 515ms, or ~2/s;
-* Maximum throughput (highest efficiency) is therefore expected to be ~20 iters/s, `2 iters/s * 10 VUs`;
-* We see that the maximum throughput is reached and maintained for the majority of the test;
-* Approximately 600 iterations are therefore performed in total, `30 seconds * 20 iters/s`.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/04 ramping-vus.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/04 ramping-vus.md
deleted file mode 100644
index 208f844b20..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/04 ramping-vus.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: 'Ramping VUs'
-excerpt: 'A variable number of VUs execute as many iterations as possible for a specified amount of time.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/ramping-vus/
----
-
-With the `ramping-vus` executor, a variable number of VUs executes as many iterations as possible for a specified amount of time.
-
-For a shortcut to this executor, use the [stages](/using-k6/options#stages) option.
-
-## Options
-
-Besides the [common configuration options](/using-k6/scenarios#options),
-this executor has the following options:
-
-| Option | Type | Description | Default |
-| ------------------ | ------- | ---------------------------------------------------------------------------------------------- | ------- |
-| stages(required) | array | Array of objects that specify the target number of VUs to ramp up or down to. | `[]` |
-| startVUs | integer | Number of VUs to run at test start. | `1` |
-| gracefulRampDown | string | Time to wait for an already started iteration to finish before stopping it during a ramp down. | `"30s"` |
-
-## When to use
-
-This executor is a good fit if you need VUs to ramp up or down during specific periods
-of time.
-
-## Example
-
-This example schedules a two-stage test, ramping up from 0 to 10 VUs over 20 seconds, then down
-to 0 VUs over 10 seconds.
-
-
-
-```javascript
-import http from 'k6/http';
-import { sleep } from 'k6';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'ramping-vus',
- startVUs: 0,
- stages: [
- { duration: '20s', target: 10 },
- { duration: '10s', target: 0 },
- ],
- gracefulRampDown: '0s',
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
- // Injecting sleep
- // Sleep time is 500ms. Total iteration time is sleep + time to finish request.
- sleep(0.5);
-}
-```
-
-
-
-
-
-With [`gracefulRampDown`](/using-k6/scenarios/concepts/graceful-stop/#the-gracefulrampdown) set to 0 seconds, some iterations might be
-interrupted during the ramp down stage.
-
-
-
-## Observations
-
-The following graph depicts the performance of the [example](#example) script:
-
-![Ramping VUs](./images/ramping-vus.png)
-
-Based upon our test scenario inputs and results:
-
-* The configuration defines 2 stages for a total test duration of 30 seconds;
-* Stage 1 ramps _up_ VUs linearly from the `startVUs` of 0 to the target of 10 over a 20 second duration;
-* From the 10 VUs at the end of stage 1, stage 2 then ramps _down_ VUs linearly to the target of 0 over a 10 second duration;
-* Each _iteration_ of the `default` function is expected to be roughly 515ms, or ~2/s;
-* As the number of VUs changes, the iteration rate directly correlates; each addition of a VU increases the rate by about 2 iters/s, whereas each subtraction of a VU reduces by about 2 iters/s;
-* The example performed ~300 iterations over the course of the test.
-
-## Get the stage index
-
-To get the current running stage index, use the `getCurrentStageIndex` helper function from the [k6-jslib-utils](/javascript-api/jslib/utils) library. It returns a zero-based number equal to the position in the shortcut `stages` array or in the executor's `stages` array.
-
-```javascript
-import { getCurrentStageIndex } from 'https://jslib.k6.io/k6-utils/1.3.0/index.js';
-
-export const options = {
- stages: [
- { target: 10, duration: '30s' },
- { target: 50, duration: '1m' },
- { target: 10, duration: '30s' },
- ],
-};
-
-export default function () {
- if (getCurrentStageIndex() === 1) {
- console.log('Running the second stage where the expected target is 50');
- }
-}
-```
-
-Using this feature, it is possible to automatically tag using the current running stage. Check the [Tagging stages](/using-k6/tags-and-groups/#tagging-stages) section for more details.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/05 constant-arrival-rate.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/05 constant-arrival-rate.md
deleted file mode 100644
index eb5232eca7..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/05 constant-arrival-rate.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: 'Constant arrival rate'
-excerpt: 'A fixed number of iterations are started in a specified period of time.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/constant-arrival-rate/
----
-
-With the `constant-arrival-rate` executor, k6 starts a fixed number of iterations over a specified period of time.
-It is an open-model executor, meaning iterations start independently of system response (for details, read
-[Open and Closed models](/using-k6/scenarios/concepts/open-vs-closed)).
-
-This executor continues to start iterations at the given rate as long as VUs are available.
-The time to execute an iteration can vary with test logic or the system-under-test response time.
-To compensate for this, the executor starts a varied number of VUs to meet the configured iteration rate.
-For explanations of how allocation works, read [Arrival-rate VU allocation](/using-k6/scenarios/concepts/arrival-rate-vu-allocation).
-
-
-
-**Iteration starts are spaced fractionally.**
-
-Iterations **do not** start at exactly the same time.
-At a `rate` of `10` with a `timeUnit` of `1s`, each iteration starts about every tenth of a second (that is, each 100ms).
-
-
-
-## Options
-
-Besides the [common configuration options](/using-k6/scenarios#options),
-this executor has the following options:
-
-| Option | Type | Description | Default |
-| ------------------ | ------- | --------------------------------------------------------------------------------------- | ------- |
-| duration(required) | string | Total scenario duration (excluding `gracefulStop`). | - |
-| rate(required) | integer | Number of iterations to start during each `timeUnit` period. | - |
-| preAllocatedVUs(required) | integer | Number of VUs to pre-allocate before test start to preserve runtime resources. | - |
-| timeUnit | string | Period of time to apply the `rate` value. | `"1s"` |
-| maxVUs | integer | Maximum number of VUs to allow during the test run. | If unset, same as `preAllocatedVUs` |
-
-## When to use
-
-When you want iterations to remain constant, independent of the performance of the system under test.
-This approach is useful for a more accurate representation of RPS, for example.
-
-
-
-
-**Don't put sleep at the end of an iteration.**
-
-The arrival-rate executors already pace the iteration rate through the `rate` and `timeUnit` properties.
-So it's unnecessary to use a `sleep()` function at the end of the VU code.
-
-
-
-## Example
-
-This example schedules a constant rate of 30 iterations per second for 30 seconds.
-It allocates 50 VUs for k6 to dynamically use as needed.
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'constant-arrival-rate',
-
- // How long the test lasts
- duration: '30s',
-
- // How many iterations per timeUnit
- rate: 30,
-
- // Start `rate` iterations per second
- timeUnit: '1s',
-
- // Pre-allocate VUs
- preAllocatedVUs: 50,
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
-}
-```
-
-
-
-
-## Observations
-
-The following graph depicts the performance of the [example](#example) script:
-
-![Ramping VUs](./images/constant-arrival-rate.png)
-
-Based upon our test scenario inputs and results:
-
-* The desired rate of 30 iterations started every 1 second is achieved and maintained for the majority of the test.
-* The test scenario runs for the specified 30 second duration.
-* Having started with 2 VUs (as specified by the `preAllocatedVUs` option), k6 automatically adjusts the number of VUs to achieve the desired rate, up to the allocated number. For this test, this ended up as 17 VUs.
-* Exactly 900 iterations are started in total, `30s * 30 iters/s`.
-
-> Using too low of a `preAllocatedVUs` setting will reduce the test duration at the desired rate, as resources need to continually be allocated to achieve the rate.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/06 ramping-arrival-rate.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/06 ramping-arrival-rate.md
deleted file mode 100644
index 7c2a9026ea..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/06 ramping-arrival-rate.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-title: 'Ramping arrival rate'
-excerpt: 'A variable number of iterations are started in a specified period of time.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/ramping-arrival-rate/
----
-
-With the `ramping-arrival-rate` executor, k6 starts iterations at a variable rate.
-It is an open-model executor, meaning iterations start independently of system response (for details, read
-[Open and Closed models](/using-k6/scenarios/concepts/open-vs-closed)).
-
-This executor has _stages_ that configure target number of iterations and the time k6 takes to reach or stay at this target.
-Unlike the [ramping VUs executor](/using-k6/scenarios/executors/ramping-vus/), which configures VUs,
-this executor dynamically changes the number of iterations to start, and starts these iterations as long as the test has enough allocated VUs.
-To learn how allocation works, read [Arrival-rate VU allocation](/using-k6/scenarios/concepts/arrival-rate-vu-allocation).
-
-
-
-**Iteration starts are spaced fractionally.**
-
-Iterations **do not** start at exactly the same time.
-At a `rate` of `10` with a `timeUnit` of `1s`, each iteration starts about every tenth of a second (that is, each 100ms).
-
-
-
-## Options
-
-Besides the [common configuration options](/using-k6/scenarios#options),
-this executor has the following options:
-
-| Option | Type | Description | Default |
-| ------------------ | ------- | --------------------------------------------------------------------------------------- | ------- |
-| stages(required) | array | Array of objects that specify the target number of iterations to ramp up or down to. | `[]` |
-| preAllocatedVUs(required) | integer | Number of VUs to pre-allocate before test start to preserve runtime resources. | - |
-| startRate | integer | Number of iterations to execute each `timeUnit` period at test start. | `0` |
-| timeUnit | string | Period of time to apply the `startRate` to the `stages`' `target` value. Its value is constant for the whole duration of the scenario, it is not possible to change it for a specific stage. | `"1s"` |
-| maxVUs | integer | Maximum number of VUs to allow during the test run. | If unset, same as `preAllocatedVUs` |
-
-## When to use
-
-If you need start iterations independent of system-under-test performance, and
-want to ramp the number of iterations up or down during specific periods of time.
-
-
-
-**Don't put sleep at the end of an iteration.**
-
-The arrival-rate executors already pace the iteration rate through the `rate` and `timeUnit` properties.
-It's unnecessary to use a `sleep()` function at the end of the VU code.
-
-
-
-## Example
-
-This is an example of a four-stage test.
-
-It starts at the defined `startRate`, 300 iterations per minute over a one minute period.
-After one minute, the iteration rate ramps to 600 iterations started per minute over the next two minutes, and stays at this rate for four more minutes.
-In the last two minutes, it ramps down to a target of 60 iterations per minute.
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- discardResponseBodies: true,
-
- scenarios: {
- contacts: {
- executor: 'ramping-arrival-rate',
-
- // Start iterations per `timeUnit`
- startRate: 300,
-
- // Start `startRate` iterations per minute
- timeUnit: '1m',
-
- // Pre-allocate necessary VUs.
- preAllocatedVUs: 50,
-
- stages: [
- // Start 300 iterations per `timeUnit` for the first minute.
- { target: 300, duration: '1m' },
-
- // Linearly ramp-up to starting 600 iterations per `timeUnit` over the following two minutes.
- { target: 600, duration: '2m' },
-
- // Continue starting 600 iterations per `timeUnit` for the following four minutes.
- { target: 600, duration: '4m' },
-
- // Linearly ramp-down to starting 60 iterations per `timeUnit` over the last two minutes.
- { target: 60, duration: '2m' },
- ],
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
-}
-```
-
-
-## Observations
-
-The following graph depicts the performance of the [example](#example) script:
-
-![Ramping Arrival Rate](./images/ramping-arrival-rate.png)
-
-Based upon our test scenario inputs and results:
-
-* The configuration defines 4 stages for a total test duration of 9 minutes.
-* Stage 1 maintains the `startRate` iteration rate at 300 iterations started per minute for 1 minute.
-* Stage 2 ramps _up_ the iteration rate linearly from the *stage 1* of 300 iterations started per minute, to the target of 600 iterations started per minute over a 2-minute duration.
-* Stage 3 maintains the *stage 2* iteration rate at 600 iterations started per minute over a 4-minute duration.
-* Stage 4 ramps _down_ the iteration rate linearly to the target rate of 60 iterations started per minute over the last two minutes duration.
-* Changes to the iteration rate are performed by k6, adjusting the number of VUs
-* The script waits for a period of time (defined by the `gracefulStop` option) for iterations to finish. It doesn't start new iterations during the `gracefulStop` period.
-* Our example performed, 4020 iterations over the course of the test.
-
-## Get the stage index
-
-To get the current running stage index, use the `getCurrentStageIndex` helper function from the [k6-jslib-utils](/javascript-api/jslib/utils) library. It returns a zero-based number equal to the position in the shortcut `stages` array or in the executor's `stages` array.
-
-```javascript
-import { getCurrentStageIndex } from 'https://jslib.k6.io/k6-utils/1.3.0/index.js';
-
-export const options = {
- stages: [
- { target: 10, duration: '30s' },
- { target: 50, duration: '1m' },
- { target: 10, duration: '30s' },
- ],
-};
-
-export default function () {
- if (getCurrentStageIndex() === 1) {
- console.log('Running the second stage where the expected target is 50');
- }
-}
-```
-
-Using this feature, it is possible to automatically tag using the current running stage. Check the [Tagging stages](/using-k6/tags-and-groups/#tagging-stages) section for more details.
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/07 externally-controlled.md b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/07 externally-controlled.md
deleted file mode 100644
index d94617a84e..0000000000
--- a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/07 externally-controlled.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: 'Externally controlled'
-excerpt: 'Control and scale execution at runtime via k6 REST API or the CLI.'
-canonicalUrl: https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/externally-controlled/
----
-
-Control and scale execution at runtime via [k6's REST API](/misc/k6-rest-api) or
-the [CLI](https://k6.io/blog/how-to-control-a-live-k6-test).
-
-Previously, the `pause`, `resume`, and `scale` CLI commands were used to globally control
-k6 execution. This executor does the same job by providing a better API that can be used to
-control k6 execution at runtime.
-
-Note that, passing arguments to the `scale` CLI command for changing the amount of active or
-maximum VUs will only affect the externally controlled executor.
-
-## Options
-
-**The `externally-controlled` executor has no graceful stop**.
-
-Besides that, this executor has all the [common configuration options](/using-k6/scenarios#options),
-and these particular ones:
-
-| Option | Type | Description | Default |
-| ----------- | ------- | --------------------------------------------------- | ------- |
-| duration(required) | string | Total test duration. | - |
-| vus | integer | Number of VUs to run concurrently. | - |
-| maxVUs | integer | Maximum number of VUs to allow during the test run. | - |
-
-## When to use
-
-If you want to control the number of VUs while the test is running.
-
-Important: this is the only executor that is not supported in `k6 cloud`, it can only be used
-locally with `k6 run`.
-
-## Example
-
-In this example, we'll execute a test controllable at runtime, starting with 10 VUs up to
-a maximum of 50, and a total duration of 10 minutes.
-
-
-
-```javascript
-import http from 'k6/http';
-
-export const options = {
- discardResponseBodies: true,
- scenarios: {
- contacts: {
- executor: 'externally-controlled',
- vus: 10,
- maxVUs: 50,
- duration: '10m',
- },
- },
-};
-
-export default function () {
- http.get('https://test.k6.io/contacts.php');
-}
-```
-
-Once the test has started, it can be externally controlled with the `pause`, `resume`, and `scale` CLI commands.
-
-
diff --git a/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/constant-arrival-rate.png b/src/data/markdown/translated-guides/en/02 Using k6/14 Scenarios/01 Executors/images/constant-arrival-rate.png
deleted file mode 100644
index 1e0813e65a85d8a0cf9b3097cc6f175bfb7cbbfa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 99858
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