@@ -208,7 +208,7 @@ Events visible in Audit Events views until more events are logged.
...
@@ -208,7 +208,7 @@ Events visible in Audit Events views until more events are logged.
### "Deleted User" events
### "Deleted User" events
Audit events can be created for a user after the user is deleted. The user name associated with the event is set to
Audit events can be created for a user after the user is deleted. The user name associated with the event is set to
"Deleted User" because the actual user name is unknowable. For example, if a deleted user's access to a project is
"Deleted User" because the actual user name is unknowable. For example, if a deleted user's access to a project is
removed automatically due to expiration, the audit event is created for "Deleted User". We are [investigating](https://gitlab.com/gitlab-org/gitlab/-/issues/343933)
removed automatically due to expiration, the audit event is created for "Deleted User". We are [investigating](https://gitlab.com/gitlab-org/gitlab/-/issues/343933)
You must test the database index changes locally before creating a merge request.
You must test the database index changes locally before creating a merge request.
### Verify indexes created asynchronously
### Verify indexes created asynchronously
Use the asynchronous index helpers on your local environment to test changes for creating an index:
Use the asynchronous index helpers on your local environment to test changes for creating an index:
1. Enable the feature flags by running `Feature.enable(:database_async_index_creation)` and `Feature.enable(:database_reindexing)` in the Rails console.
1. Enable the feature flags by running `Feature.enable(:database_async_index_creation)` and `Feature.enable(:database_reindexing)` in the Rails console.
1. Run `bundle exec rails db:migrate` so that it creates an entry in the `postgres_async_indexes` table.
1. Run `bundle exec rails db:migrate` so that it creates an entry in the `postgres_async_indexes` table.
1. Run `bundle exec rails gitlab:db:reindex` so that the index is created asynchronously.
1. Run `bundle exec rails gitlab:db:reindex` so that the index is created asynchronously.
1. To verify the index, open the PostgreSQL console using the [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/postgresql.md) command `gdk psql` and run the command `\d <index_name>` to check that your newly created index exists.
1. To verify the index, open the PostgreSQL console using the [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/postgresql.md) command `gdk psql` and run the command `\d <index_name>` to check that your newly created index exists.
If you are in a Vue app that doesn't use any event hub, try to avoid adding a new one unless absolutely necessary. For example, if you need a child component to react to its parent's event, it's preferred to pass a prop down. Then, use the watch property on that prop in the child component to create the desired side effect.
If you are in a Vue app that doesn't use any event hub, try to avoid adding a new one unless absolutely necessary. For example, if you need a child component to react to its parent's event, it's preferred to pass a prop down. Then, use the watch property on that prop in the child component to create the desired side effect.
If you need cross-component communication (between different Vue apps), then perhaps introducing a hub is the right decision.
If you need cross-component communication (between different Vue apps), then perhaps introducing a hub is the right decision.
@@ -21,7 +21,7 @@ and sales teams understand how GitLab is used. The data helps to:
...
@@ -21,7 +21,7 @@ and sales teams understand how GitLab is used. The data helps to:
Service Ping information is not anonymous. It's linked to the instance's hostname, but does
Service Ping information is not anonymous. It's linked to the instance's hostname, but does
not contain project names, usernames, or any other specific data.
not contain project names, usernames, or any other specific data.
Sending a Service Ping payload is optional and you can [disable](#disable-service-ping) it on any
Sending a Service Ping payload is optional and you can [disable](#disable-service-ping) it on any
self-managed instance. When Service Ping is enabled, GitLab gathers data from the other instances
self-managed instance. When Service Ping is enabled, GitLab gathers data from the other instances
and can show your instance's usage statistics to your users.
and can show your instance's usage statistics to your users.
...
@@ -41,10 +41,10 @@ We use the following terminology to describe the Service Ping components:
...
@@ -41,10 +41,10 @@ We use the following terminology to describe the Service Ping components:
The main purpose of Service Ping is to build a better GitLab. We collect data about how GitLab is used
The main purpose of Service Ping is to build a better GitLab. We collect data about how GitLab is used
to understand feature or stage adoption and usage. This data gives an insight into how GitLab adds
to understand feature or stage adoption and usage. This data gives an insight into how GitLab adds
value and helps our team understand the reasons why people use GitLab, and with this knowledge we're able to
value and helps our team understand the reasons why people use GitLab, and with this knowledge we're able to
make better product decisions.
make better product decisions.
There are several other benefits to enabling Service Ping:
There are several other benefits to enabling Service Ping:
- As a benefit of having Service Ping active, GitLab lets you analyze the users' activities over time of your GitLab installation.
- As a benefit of having Service Ping active, GitLab lets you analyze the users' activities over time of your GitLab installation.
- As a benefit of having Service Ping active, GitLab provides you with [DevOps Score](../../user/admin_area/analytics/dev_ops_report.md#devops-score), which gives you an overview of your entire instance's adoption of Concurrent DevOps from planning to monitoring.
- As a benefit of having Service Ping active, GitLab provides you with [DevOps Score](../../user/admin_area/analytics/dev_ops_report.md#devops-score), which gives you an overview of your entire instance's adoption of Concurrent DevOps from planning to monitoring.
GitLab provides a `Tracking` interface that wraps the [Snowplow JavaScript tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/)
GitLab provides a `Tracking` interface that wraps the [Snowplow JavaScript tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/)
to track custom events.
to track custom events.
For the recommended frontend tracking implementation, see [Usage recommendations](#usage-recommendations).
For the recommended frontend tracking implementation, see [Usage recommendations](#usage-recommendations).
Tracking implementations must have an `action` and a `category`. You can provide additional
Tracking implementations must have an `action` and a `category`. You can provide additional
categories from the [structured event taxonomy](index.md#structured-event-taxonomy) with an `extra` object
categories from the [structured event taxonomy](index.md#structured-event-taxonomy) with an `extra` object
that accepts key-value pairs.
that accepts key-value pairs.
...
@@ -67,8 +67,8 @@ The following example shows `data-track-*` attributes assigned to a button:
...
@@ -67,8 +67,8 @@ The following example shows `data-track-*` attributes assigned to a button:
#### Event listeners
#### Event listeners
Event listeners bind at the document level to handle click events in elements with data attributes.
Event listeners bind at the document level to handle click events in elements with data attributes.
This allows them to be handled when the DOM re-renders or changes. Document-level binding reduces
This allows them to be handled when the DOM re-renders or changes. Document-level binding reduces
the likelihood that click events stop propagating up the DOM tree.
the likelihood that click events stop propagating up the DOM tree.
If click events stop propagating, you must implement listeners and [Vue component tracking](#implement-vue-component-tracking) or [raw JavaScript tracking](#implement-raw-javascript-tracking).
If click events stop propagating, you must implement listeners and [Vue component tracking](#implement-vue-component-tracking) or [raw JavaScript tracking](#implement-raw-javascript-tracking).
To enable Snowplow automatic [form tracking](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v2/tracking-specific-events/#form-tracking):
To enable Snowplow automatic [form tracking](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v2/tracking-specific-events/#form-tracking):
1. Call `Tracking.enableFormTracking` when the DOM is ready.
1. Call `Tracking.enableFormTracking` when the DOM is ready.
1. Provide a `config` object that includes at least one of the following elements:
1. Provide a `config` object that includes at least one of the following elements:
-`forms` determines the forms to track. Identified by the CSS class name.
-`forms` determines the forms to track. Identified by the CSS class name.
-`fields` determines the fields inside the tracked forms to track. Identified by the field `name`.
-`fields` determines the fields inside the tracked forms to track. Identified by the field `name`.
1. Optional. Provide a list of contexts as the second argument. The [`gitlab_standard`](schemas.md#gitlab_standard) schema is excluded from these events.
1. Optional. Provide a list of contexts as the second argument. The [`gitlab_standard`](schemas.md#gitlab_standard) schema is excluded from these events.
@@ -273,7 +273,7 @@ If you get a `Sync Failed` error in Jira when [refreshing repository data](#refr
...
@@ -273,7 +273,7 @@ If you get a `Sync Failed` error in Jira when [refreshing repository data](#refr
```plaintext
```plaintext
Failed to execute request [https://gitlab.com/api/v4/projects/:id/merge_requests?page=1&per_page=100 GET https://gitlab.com/api/v4/projects/:id/merge_requests?page=1&per_page=100 returned a response status of 403 Forbidden] errors:
Failed to execute request [https://gitlab.com/api/v4/projects/:id/merge_requests?page=1&per_page=100 GET https://gitlab.com/api/v4/projects/:id/merge_requests?page=1&per_page=100 returned a response status of 403 Forbidden] errors:
{"message":"403 Forbidden"}
{"message":"403 Forbidden"}
```
```
If you find a `{"message":"403 Forbidden"}` error, it is possible that this specific project has some [GitLab features disabled](../../user/project/settings/index.md#sharing-and-permissions).
If you find a `{"message":"403 Forbidden"}` error, it is possible that this specific project has some [GitLab features disabled](../../user/project/settings/index.md#sharing-and-permissions).
In the example above, the merge requests feature is disabled.
In the example above, the merge requests feature is disabled.
@@ -323,7 +323,7 @@ To purchase additional minutes for your personal namespace:
...
@@ -323,7 +323,7 @@ To purchase additional minutes for your personal namespace:
1. Select **Edit profile**.
1. Select **Edit profile**.
1. On the left sidebar, select **Usage Quotas**.
1. On the left sidebar, select **Usage Quotas**.
1. Select **Buy additional minutes** and GitLab redirects you to the Customers Portal.
1. Select **Buy additional minutes** and GitLab redirects you to the Customers Portal.
1. Locate the subscription card that's linked to your personal namespace on GitLab SaaS, click **Buy more CI minutes**, and complete the details about the transaction.
1. Locate the subscription card that's linked to your personal namespace on GitLab SaaS, click **Buy more CI minutes**, and complete the details about the transaction.
After we process your payment, the extra CI minutes are synced to your group
After we process your payment, the extra CI minutes are synced to your group
### Value Stream Analytics filtering calculation change
### Value Stream Analytics filtering calculation change
We are changing how the date filter works in Value Stream Analytics. Instead of filtering by the time that the issue or merge request was created, the date filter will filter by the end event time of the given stage. This will result in completely different figures after this change has rolled out.
We are changing how the date filter works in Value Stream Analytics. Instead of filtering by the time that the issue or merge request was created, the date filter will filter by the end event time of the given stage. This will result in completely different figures after this change has rolled out.
If you monitor Value Stream Analytics metrics and rely on the date filter, to avoid losing data, you must save the data prior to this change.
If you monitor Value Stream Analytics metrics and rely on the date filter, to avoid losing data, you must save the data prior to this change.
@@ -100,29 +100,29 @@ We use the following terms to describe GitLab analytics:
...
@@ -100,29 +100,29 @@ We use the following terms to describe GitLab analytics:
- All incidents are related to a [production environment](../../ci/environments/index.md#deployment-tier-of-environments).
- All incidents are related to a [production environment](../../ci/environments/index.md#deployment-tier-of-environments).
- Incidents and deployments have a strictly one-to-one relationship (meaning any incident is related to only one production deployment, and any production deployment is related to no more than one incident).
- Incidents and deployments have a strictly one-to-one relationship (meaning any incident is related to only one production deployment, and any production deployment is related to no more than one incident).
-**Lead time:** The duration of your value stream, from start to finish. Different to
-**Lead time:** The duration of your value stream, from start to finish. Different to
[Lead time for changes](#lead-time-for-changes). Often displayed in combination with "cycle time,"
[Lead time for changes](#lead-time-for-changes). Often displayed in combination with "cycle time,"
which is shorter. GitLab measures lead time from issue creation to issue close. GitLab displays lead
which is shorter. GitLab measures lead time from issue creation to issue close. GitLab displays lead
time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
-**Mean Time to Change (MTTC):** The average duration between idea and delivery. GitLab measures
-**Mean Time to Change (MTTC):** The average duration between idea and delivery. GitLab measures
MTTC from issue creation to the issue's latest related merge request's deployment to production.
MTTC from issue creation to the issue's latest related merge request's deployment to production.
-**Mean Time to Detect (MTTD):** The average duration that a bug goes undetected in production.
-**Mean Time to Detect (MTTD):** The average duration that a bug goes undetected in production.
GitLab measures MTTD from deployment of bug to issue creation.
GitLab measures MTTD from deployment of bug to issue creation.
-**Mean Time To Merge (MTTM):** The average lifespan of a merge request. GitLab measures MTTM from
-**Mean Time To Merge (MTTM):** The average lifespan of a merge request. GitLab measures MTTM from
merge request creation to merge request merge (and closed/un-merged merge requests are excluded).
merge request creation to merge request merge (and closed/un-merged merge requests are excluded).
For more information, see [Merge Request Analytics](merge_request_analytics.md).
For more information, see [Merge Request Analytics](merge_request_analytics.md).
-**Mean Time to Recover/Repair/Resolution/Resolve/Restore (MTTR):** The average duration that a bug
-**Mean Time to Recover/Repair/Resolution/Resolve/Restore (MTTR):** The average duration that a bug
is not fixed in production. GitLab measures MTTR from deployment of bug to deployment of fix.
is not fixed in production. GitLab measures MTTR from deployment of bug to deployment of fix.
-**Throughput:** The number of issues closed or merge requests merged (not closed) in a period of
-**Throughput:** The number of issues closed or merge requests merged (not closed) in a period of
time. Often measured per sprint. GitLab displays merge request throughput in [Merge Request Analytics](merge_request_analytics.md).
time. Often measured per sprint. GitLab displays merge request throughput in [Merge Request Analytics](merge_request_analytics.md).
-**Value Stream:** The entire work process that is followed to deliver value to customers. For example,
-**Value Stream:** The entire work process that is followed to deliver value to customers. For example,
the [DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/) is a value stream that starts
the [DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/) is a value stream that starts
with "plan" and ends with "monitor". GitLab helps you track your value stream using [Value Stream Analytics](value_stream_analytics.md).
with "plan" and ends with "monitor". GitLab helps you track your value stream using [Value Stream Analytics](value_stream_analytics.md).
-**Velocity:** The total issue burden completed in some period of time. The burden is usually measured
-**Velocity:** The total issue burden completed in some period of time. The burden is usually measured
in points or weight, often per sprint. For example, your velocity may be "30 points per sprint". GitLab
in points or weight, often per sprint. For example, your velocity may be "30 points per sprint". GitLab
measures velocity as the total points or weight of issues closed in a given period of time.
measures velocity as the total points or weight of issues closed in a given period of time.
## Lead time for changes
## Lead time for changes
"Lead Time for Changes" differs from "Lead Time" because it "focuses on measuring only the time to
"Lead Time for Changes" differs from "Lead Time" because it "focuses on measuring only the time to
deliver a feature once it has been developed", as described in ([Measuring DevOps Performance](https://devops.com/measuring-devops-performance/)).
deliver a feature once it has been developed", as described in ([Measuring DevOps Performance](https://devops.com/measuring-devops-performance/)).
@@ -69,7 +69,7 @@ The browser-based crawler can be configured using CI/CD variables.
...
@@ -69,7 +69,7 @@ The browser-based crawler can be configured using CI/CD variables.
| `DAST_BROWSER_SEARCH_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `3s` | The maximum amount of time to allow the browser to search for new elements or navigations. |
| `DAST_BROWSER_SEARCH_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `3s` | The maximum amount of time to allow the browser to search for new elements or navigations. |
| `DAST_BROWSER_EXTRACT_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `5s` | The maximum amount of time to allow the browser to extract newly found elements or navigations. |
| `DAST_BROWSER_EXTRACT_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `5s` | The maximum amount of time to allow the browser to extract newly found elements or navigations. |
| `DAST_BROWSER_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `600ms` | The maximum amount of time to wait for an element before determining it is ready for analysis. |
| `DAST_BROWSER_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `600ms` | The maximum amount of time to wait for an element before determining it is ready for analysis. |
| `DAST_BROWSER_PAGE_READY_SELECTOR` | selector | `css:#page-is-ready` | Selector that when detected as visible on the page, indicates to the analyzer that the page has finished loading and the scan can continue. Note: When this selector is set, but the element is not found, the scanner waits for the period defined in `DAST_BROWSER_STABILITY_TIMEOUT` before continuing the scan. This can significantly increase scanning time if the element is not present on multiple pages within the site. |
| `DAST_BROWSER_PAGE_READY_SELECTOR` | selector | `css:#page-is-ready` | Selector that when detected as visible on the page, indicates to the analyzer that the page has finished loading and the scan can continue. Note: When this selector is set, but the element is not found, the scanner waits for the period defined in `DAST_BROWSER_STABILITY_TIMEOUT` before continuing the scan. This can significantly increase scanning time if the element is not present on multiple pages within the site. |
The [DAST variables](index.md#available-cicd-variables)`SECURE_ANALYZERS_PREFIX`, `DAST_FULL_SCAN_ENABLED`, `DAST_AUTO_UPDATE_ADDONS`, `DAST_EXCLUDE_RULES`, `DAST_REQUEST_HEADERS`, `DAST_HTML_REPORT`, `DAST_MARKDOWN_REPORT`, `DAST_XML_REPORT`,
The [DAST variables](index.md#available-cicd-variables)`SECURE_ANALYZERS_PREFIX`, `DAST_FULL_SCAN_ENABLED`, `DAST_AUTO_UPDATE_ADDONS`, `DAST_EXCLUDE_RULES`, `DAST_REQUEST_HEADERS`, `DAST_HTML_REPORT`, `DAST_MARKDOWN_REPORT`, `DAST_XML_REPORT`,
@@ -353,7 +353,7 @@ Additional management interfaces are planned for the GitLab Kubernetes Agent.
...
@@ -353,7 +353,7 @@ Additional management interfaces are planned for the GitLab Kubernetes Agent.
## Upgrades and version compatibility
## Upgrades and version compatibility
The GitLab Kubernetes Agent is comprised of two major components: `agentk` and `kas`.
The GitLab Kubernetes Agent is comprised of two major components: `agentk` and `kas`.
As we provide `kas` installers built into the various GitLab installation methods, the required `kas` version corresponds to the GitLab `major.minor` (X.Y) versions.
As we provide `kas` installers built into the various GitLab installation methods, the required `kas` version corresponds to the GitLab `major.minor` (X.Y) versions.
At the same time, `agentk` and `kas` can differ by 1 minor version in either direction. For example,
At the same time, `agentk` and `kas` can differ by 1 minor version in either direction. For example,
@@ -22,7 +22,7 @@ You can use Group DevOps Adoption to:
...
@@ -22,7 +22,7 @@ You can use Group DevOps Adoption to:
- Identify specific subgroups that are lagging in their adoption of GitLab features, so you can guide them on
- Identify specific subgroups that are lagging in their adoption of GitLab features, so you can guide them on
their DevOps journey.
their DevOps journey.
- Find subgroups that have adopted certain features, and provide guidance to other subgroups on
- Find subgroups that have adopted certain features, and provide guidance to other subgroups on
how to use those features.
how to use those features.
- Verify if you are getting the return on investment that you expected from GitLab.
- Verify if you are getting the return on investment that you expected from GitLab.
...
@@ -51,7 +51,7 @@ DevOps Adoption shows feature adoption for development, security, and operations
...
@@ -51,7 +51,7 @@ DevOps Adoption shows feature adoption for development, security, and operations
## Feature adoption
## Feature adoption
DevOps Adoption shows feature adoption data for groups and subgroups for the previous calendar month.
DevOps Adoption shows feature adoption data for groups and subgroups for the previous calendar month.
A feature shows as **adopted** when a group has used the feature in a project during the time period.
A feature shows as **adopted** when a group has used the feature in a project during the time period.
This includes projects in any subgroups of the group. For example, if an issue was created in a project in a group, the group has adopted issues in that time.
This includes projects in any subgroups of the group. For example, if an issue was created in a project in a group, the group has adopted issues in that time.
...
@@ -63,12 +63,12 @@ When GitLab measures DevOps Adoption, some common DevOps information is not incl
...
@@ -63,12 +63,12 @@ When GitLab measures DevOps Adoption, some common DevOps information is not incl
- Dormant projects. It doesn't matter how many projects in the group use a feature. Even if you have many dormant projects, it doesn't lower the adoption.
- Dormant projects. It doesn't matter how many projects in the group use a feature. Even if you have many dormant projects, it doesn't lower the adoption.
- New GitLab features. Adoption is the total number of features adopted, not the percent of features.
- New GitLab features. Adoption is the total number of features adopted, not the percent of features.
## When DevOps Adoption data is gathered
## When DevOps Adoption data is gathered
A weekly task processes data for DevOps Adoption. This task is disabled until you access
A weekly task processes data for DevOps Adoption. This task is disabled until you access
DevOps Adoption for a group for the first time.
DevOps Adoption for a group for the first time.
The data processing task updates the data on the first day of each month. If the monthly update
The data processing task updates the data on the first day of each month. If the monthly update
fails, the task tries daily until it succeeds.
fails, the task tries daily until it succeeds.
DevOps Adoption data may take up to a minute to appear while GitLab processes the group's data.
DevOps Adoption data may take up to a minute to appear while GitLab processes the group's data.
...
@@ -76,13 +76,13 @@ DevOps Adoption data may take up to a minute to appear while GitLab processes th
...
@@ -76,13 +76,13 @@ DevOps Adoption data may take up to a minute to appear while GitLab processes th
## View feature adoption over time
## View feature adoption over time
The **Adoption over time** chart shows the total number of adopted features from the previous
The **Adoption over time** chart shows the total number of adopted features from the previous
twelve months. The chart only shows data from when you enabled DevOps Adoption for the group.
twelve months. The chart only shows data from when you enabled DevOps Adoption for the group.
To view feature adoption over time:
To view feature adoption over time:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Menu > Groups** and find your group.
1. On the left sidebar, select **Analytics > DevOps adoption**.
1. On the left sidebar, select **Analytics > DevOps adoption**.
1. Select the **Overview** tab.
1. Select the **Overview** tab.
Tooltips display information about the features tracked for individual months.
Tooltips display information about the features tracked for individual months.