diff --git a/app/controllers/projects/settings/operations_controller.rb b/app/controllers/projects/settings/operations_controller.rb index a9d1dc0759d..c2292511e0f 100644 --- a/app/controllers/projects/settings/operations_controller.rb +++ b/app/controllers/projects/settings/operations_controller.rb @@ -104,7 +104,7 @@ module Projects project_params = { incident_management_setting_attributes: ::Gitlab::Tracking::IncidentManagement.tracking_keys.keys, - metrics_setting_attributes: [:external_dashboard_url], + metrics_setting_attributes: [:external_dashboard_url, :dashboard_timezone], error_tracking_setting_attributes: [ :enabled, diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 2207cdc87c6..2bb33916c2d 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -367,6 +367,10 @@ module ProjectsHelper @project.metrics_setting_external_dashboard_url end + def metrics_dashboard_timezone + @project.metrics_setting_dashboard_timezone + end + def grafana_integration_url @project.grafana_integration&.grafana_url end diff --git a/app/models/project.rb b/app/models/project.rb index dcd9f2aac2e..dce4bacab94 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -372,6 +372,7 @@ class Project < ApplicationRecord delegate :root_ancestor, to: :namespace, allow_nil: true delegate :last_pipeline, to: :commit, allow_nil: true delegate :external_dashboard_url, to: :metrics_setting, allow_nil: true, prefix: true + delegate :dashboard_timezone, to: :metrics_setting, allow_nil: true, prefix: true delegate :default_git_depth, :default_git_depth=, to: :ci_cd_settings, prefix: :ci delegate :forward_deployment_enabled, :forward_deployment_enabled=, :forward_deployment_enabled?, to: :ci_cd_settings delegate :actual_limits, :actual_plan_name, to: :namespace, allow_nil: true diff --git a/app/models/project_metrics_setting.rb b/app/models/project_metrics_setting.rb index a2a7dc571a4..4886334c53c 100644 --- a/app/models/project_metrics_setting.rb +++ b/app/models/project_metrics_setting.rb @@ -6,4 +6,6 @@ class ProjectMetricsSetting < ApplicationRecord validates :external_dashboard_url, length: { maximum: 255 }, addressable_url: { enforce_sanitization: true, ascii_only: true } + + enum dashboard_timezone: { local: 0, utc: 1 } end diff --git a/changelogs/unreleased/rc-add_dashboard_timezone.yml b/changelogs/unreleased/rc-add_dashboard_timezone.yml new file mode 100644 index 00000000000..190d3faadec --- /dev/null +++ b/changelogs/unreleased/rc-add_dashboard_timezone.yml @@ -0,0 +1,5 @@ +--- +title: Add column dashboard_timezone to project_metrics_setting +merge_request: 33120 +author: +type: added diff --git a/db/migrate/20200528171933_remove_not_null_from_external_dashboard_url.rb b/db/migrate/20200528171933_remove_not_null_from_external_dashboard_url.rb new file mode 100644 index 00000000000..d146c8b487b --- /dev/null +++ b/db/migrate/20200528171933_remove_not_null_from_external_dashboard_url.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# See https://docs.gitlab.com/ee/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class RemoveNotNullFromExternalDashboardUrl < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def change + change_column_null :project_metrics_settings, :external_dashboard_url, true + end +end diff --git a/db/migrate/20200601210148_add_dashboard_timezone_to_project_metrics_setting.rb b/db/migrate/20200601210148_add_dashboard_timezone_to_project_metrics_setting.rb new file mode 100644 index 00000000000..3f74ef28621 --- /dev/null +++ b/db/migrate/20200601210148_add_dashboard_timezone_to_project_metrics_setting.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# See https://docs.gitlab.com/ee/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddDashboardTimezoneToProjectMetricsSetting < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def change + add_column :project_metrics_settings, :dashboard_timezone, :integer, limit: 2, null: false, default: 0 + end +end diff --git a/db/structure.sql b/db/structure.sql index 3500354ac07..7dba1a8bfda 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -5220,7 +5220,8 @@ ALTER SEQUENCE public.project_incident_management_settings_project_id_seq OWNED CREATE TABLE public.project_metrics_settings ( project_id integer NOT NULL, - external_dashboard_url character varying NOT NULL + external_dashboard_url character varying, + dashboard_timezone smallint DEFAULT 0 NOT NULL ); CREATE TABLE public.project_mirror_data ( @@ -13798,6 +13799,8 @@ COPY "schema_migrations" (version) FROM STDIN; 20200528054112 20200528123703 20200528125905 +20200528171933 +20200601210148 20200602143020 20200603073101 \. diff --git a/doc/ci/environments/incremental_rollouts.md b/doc/ci/environments/incremental_rollouts.md index a3ecad3c180..c35e7cac0e5 100644 --- a/doc/ci/environments/incremental_rollouts.md +++ b/doc/ci/environments/incremental_rollouts.md @@ -114,3 +114,26 @@ timed rollout 30%: A [deployable application](https://gitlab.com/gl-release/timed-rollout-example) is available, [demonstrating configuration of timed rollouts](https://gitlab.com/gl-release/timed-rollout-example/blob/master/.gitlab-ci.yml#L86-95). + +## Blue-Green Deployment + +Also sometimes known as canary or red-black deployment, this technique is used to reduce +downtime and risk during a deployment. When combined with incremental rollouts, you can +minimize the impact of a deployment causing an issue. + +With this technique there are two deployments ("blue" and "green", but any naming can be used). +Only one of these deployments is live at any given time, except during an incremental rollout. + +For example, your blue deployment can be currently active on production, while the +green deployment is "live" for testing, but not deployed to production. If issues +are found, the green deployment can be updated without affecting the production +deployment (currently blue). If testing finds no issues, you switch production to the green +deployment, and blue is now available to test the next release. + +This process reduces downtime as there is no need to take down the production deployment +to switch to a different deployment. Both deployments are running in parallel, and +can be switched to at any time. + +An [example deployable application](https://gitlab.com/gl-release/blue-green-example) +is available, with a [`gitlab-ci.yml` CI/CD configuration file](https://gitlab.com/gl-release/blue-green-example/blob/master/.gitlab-ci.yml) +that demonstrates blue-green deployments. diff --git a/doc/ci/junit_test_reports.md b/doc/ci/junit_test_reports.md index 43523bbd507..aa0d40a4d06 100644 --- a/doc/ci/junit_test_reports.md +++ b/doc/ci/junit_test_reports.md @@ -192,6 +192,20 @@ cpp: junit: report.xml ``` +#### CUnit + +[CUnit](https://cunity.gitlab.io/cunit/) can be made to produce [JUnit XML reports](https://cunity.gitlab.io/cunit/group__CI.html) automatically when run using its `CUnitCI.h` macros: + +```yaml +cunit: + stage: test + script: + - ./my-cunit-test + artifacts: + reports: + junit: ./my-cunit-test.xml +``` + ### .Net example The [JunitXML.TestLogger](https://www.nuget.org/packages/JunitXml.TestLogger/) NuGet diff --git a/doc/development/geo/framework.md b/doc/development/geo/framework.md index d72f7cc4cc1..17a86205d28 100644 --- a/doc/development/geo/framework.md +++ b/doc/development/geo/framework.md @@ -356,7 +356,8 @@ Widgets should now be replicated by Geo! end ``` -1. Add fields `widget_count`, `widget_checksummed_count`, and `widget_checksum_failed_count` +1. Add fields `widget_count`, `widget_checksummed_count`, `widget_checksum_failed_count`, + `widget_synced_count` and `widget_failed_count` to `GeoNodeStatus#RESOURCE_STATUS_FIELDS` array in `ee/app/models/geo_node_status.rb`. 1. Add the same fields to `GeoNodeStatus#PROMETHEUS_METRICS` hash in `ee/app/models/geo_node_status.rb`. @@ -370,6 +371,8 @@ Widgets should now be replicated by Geo! self.widget_count = Geo::WidgetReplicator.model.count self.widget_checksummed_count = Geo::WidgetReplicator.checksummed.count self.widget_checksum_failed_count = Geo::WidgetReplicator.checksum_failed.count + self.widget_synced_count = Geo::WidgetReplicator.synced_count + self.widget_failed_count = Geo::WidgetReplicator.failed_count ``` 1. Make sure `Widget` model has `checksummed` and `checksum_failed` scopes. @@ -450,7 +453,7 @@ Widgets should now be verified by Geo! end ``` -1. Create `ee/app/graphql/types/geo/package_file_registry_type.rb`: +1. Create `ee/app/graphql/types/geo/widget_registry_type.rb`: ```ruby # frozen_string_literal: true diff --git a/doc/development/telemetry/usage_ping.md b/doc/development/telemetry/usage_ping.md index 22e26689169..d8fa50ac47a 100644 --- a/doc/development/telemetry/usage_ping.md +++ b/doc/development/telemetry/usage_ping.md @@ -295,262 +295,262 @@ On GitLab.com, we have DangerBot setup to monitor Telemetry related files and Da ## Usage Statistics definitions -| Statistic | Section | Stage | Description | -|:--------------------------------------------------------|:-----------------------------------|:------------|:--------------------------------------------------| -| `uuid` | | | | -| `hostname` | | | | -| `version` | | | | -| `installation_type` | | | | -| `active_user_count` | | | | -| `recorded_at` | | | | -| `edition` | | | | -| `license_md5` | | | | -| `license_id` | | | | -| `historical_max_users` | | | | -| `Name` | `licensee` | | | -| `Email` | `licensee` | | | -| `Company` | `licensee` | | | -| `license_user_count` | | | | -| `license_starts_at` | | | | -| `license_expires_at` | | | | -| `license_plan` | | | | -| `license_trial` | | | | -| `assignee_lists` | `counts` | | | -| `boards` | `counts` | | | -| `ci_builds` | `counts` | `verify` | Unique builds in project | -| `ci_internal_pipelines` | `counts` | `verify` | Total pipelines in GitLab repositories | -| `ci_external_pipelines` | `counts` | `verify` | Total pipelines in external repositories | -| `ci_pipeline_config_auto_devops` | `counts` | `verify` | Total pipelines from an Auto DevOps template | -| `ci_pipeline_config_repository` | `counts` | `verify` | Total Pipelines from templates in repository | -| `ci_runners` | `counts` | `verify` | Total configured Runners in project | -| `ci_triggers` | `counts` | `verify` | Total configured Triggers in project | -| `ci_pipeline_schedules` | `counts` | `verify` | Pipeline schedules in GitLab | -| `auto_devops_enabled` | `counts` |`configure` | Projects with Auto DevOps template enabled | -| `auto_devops_disabled` | `counts` |`configure` | Projects with Auto DevOps template disabled | -| `deploy_keys` | `counts` | | | -| `deployments` | `counts` |`release` | Total deployments | -| `dast_jobs` | `counts` | | | -| `successful_deployments` | `counts` |`release` | Total successful deployments | -| `failed_deployments` | `counts` |`release` | Total failed deployments | -| `environments` | `counts` |`release` | Total available and stopped environments | -| `clusters` | `counts` |`configure` | Total GitLab Managed clusters both enabled and disabled | -| `clusters_enabled` | `counts` |`configure` | Total GitLab Managed clusters currently enabled | -| `project_clusters_enabled` | `counts` |`configure` | Total GitLab Managed clusters attached to projects| -| `group_clusters_enabled` | `counts` |`configure` | Total GitLab Managed clusters attached to groups | -| `instance_clusters_enabled` | `counts` |`configure` | Total GitLab Managed clusters attached to the instance | -| `clusters_disabled` | `counts` |`configure` | Total GitLab Managed disabled clusters | -| `project_clusters_disabled` | `counts` |`configure` | Total GitLab Managed disabled clusters previously attached to projects | -| `group_clusters_disabled` | `counts` |`configure` | Total GitLab Managed disabled clusters previously attached to groups | -| `instance_clusters_disabled` | `counts` |`configure` | Total GitLab Managed disabled clusters previously attached to the instance | -| `clusters_platforms_eks` | `counts` |`configure` | Total GitLab Managed clusters provisioned with GitLab on AWS EKS | -| `clusters_platforms_gke` | `counts` |`configure` | Total GitLab Managed clusters provisioned with GitLab on GCE GKE | -| `clusters_platforms_user` | `counts` |`configure` | Total GitLab Managed clusters that are user provisioned | -| `clusters_applications_helm` | `counts` |`configure` | Total GitLab Managed clusters with Helm enabled | -| `clusters_applications_ingress` | `counts` |`configure` | Total GitLab Managed clusters with Ingress enabled | -| `clusters_applications_cert_managers` | `counts` |`configure` | Total GitLab Managed clusters with Cert Manager enabled | -| `clusters_applications_crossplane` | `counts` |`configure` | Total GitLab Managed clusters with Crossplane enabled | -| `clusters_applications_prometheus` | `counts` |`configure` | Total GitLab Managed clusters with Prometheus enabled | -| `clusters_applications_runner` | `counts` |`configure` | Total GitLab Managed clusters with Runner enabled | -| `clusters_applications_knative` | `counts` |`configure` | Total GitLab Managed clusters with Knative enabled | -| `clusters_applications_elastic_stack` | `counts` |`configure` | Total GitLab Managed clusters with Elastic Stack enabled | -| `clusters_management_project` | `counts` |`configure` | Total GitLab Managed clusters with defined cluster management project | -| `in_review_folder` | `counts` | | | -| `grafana_integrated_projects` | `counts` | | | -| `groups` | `counts` | | | -| `issues` | `counts` | | | -| `issues_created_from_gitlab_error_tracking_ui` | `counts` | `monitor` | | -| `issues_with_associated_zoom_link` | `counts` | `monitor` | | -| `issues_using_zoom_quick_actions` | `counts` | `monitor` | | -| `issues_with_embedded_grafana_charts_approx` | `counts` | `monitor` | | -| `issues_with_health_status` | `counts` | | | -| `keys` | `counts` | | | -| `label_lists` | `counts` | | | -| `lfs_objects` | `counts` | | | -| `milestone_lists` | `counts` | | | -| `milestones` | `counts` | | | -| `pages_domains` | `counts` |`release` | Total GitLab Pages domains | -| `pool_repositories` | `counts` | | | -| `projects` | `counts` | | | -| `projects_imported_from_github` | `counts` | | | -| `projects_with_repositories_enabled` | `counts` | | | -| `projects_with_error_tracking_enabled` | `counts` | `monitor` | | -| `protected_branches` | `counts` | | | -| `releases` | `counts` |`release` | Unique release tags | -| `remote_mirrors` | `counts` | | | -| `requirements_created` | `counts` | | | -| `snippets` | `counts` | | | -| `suggestions` | `counts` | | | -| `todos` | `counts` | | | -| `uploads` | `counts` | | | -| `web_hooks` | `counts` | | | -| `projects_alerts_active` | `counts` | | | -| `projects_asana_active` | `counts` | | | -| `projects_assembla_active` | `counts` | | | -| `projects_bamboo_active` | `counts` | | | -| `projects_bugzilla_active` | `counts` | | | -| `projects_buildkite_active` | `counts` | | | -| `projects_campfire_active` | `counts` | | | -| `projects_custom_issue_tracker_active` | `counts` | | | -| `projects_discord_active` | `counts` | | | -| `projects_drone_ci_active` | `counts` | | | -| `projects_emails_on_push_active` | `counts` | | | +| Statistic | Section | Stage | Tier | Description | +|:--------------------------------------------------------|:-----------------------------------|:------------|:---------------|:--------------------------------------------------| +| `uuid` | | | | | +| `hostname` | | | | | +| `version` | | | | | +| `installation_type` | | | | | +| `active_user_count` | | | | | +| `recorded_at` | | | | | +| `edition` | | | | | +| `license_md5` | | | | | +| `license_id` | | | | | +| `historical_max_users` | | | | | +| `Name` | `licensee` | | | | +| `Email` | `licensee` | | | | +| `Company` | `licensee` | | | | +| `license_user_count` | | | | | +| `license_starts_at` | | | | | +| `license_expires_at` | | | | | +| `license_plan` | | | | | +| `license_trial` | | | | | +| `assignee_lists` | `counts` | | | | +| `boards` | `counts` | | | | +| `ci_builds` | `counts` | `verify` | | Unique builds in project | +| `ci_internal_pipelines` | `counts` | `verify` | | Total pipelines in GitLab repositories | +| `ci_external_pipelines` | `counts` | `verify` | | Total pipelines in external repositories | +| `ci_pipeline_config_auto_devops` | `counts` | `verify` | | Total pipelines from an Auto DevOps template | +| `ci_pipeline_config_repository` | `counts` | `verify` | | Total Pipelines from templates in repository | +| `ci_runners` | `counts` | `verify` | | Total configured Runners in project | +| `ci_triggers` | `counts` | `verify` | | Total configured Triggers in project | +| `ci_pipeline_schedules` | `counts` | `verify` | | Pipeline schedules in GitLab | +| `auto_devops_enabled` | `counts` |`configure` | | Projects with Auto DevOps template enabled | +| `auto_devops_disabled` | `counts` |`configure` | | Projects with Auto DevOps template disabled | +| `deploy_keys` | `counts` | | | | +| `deployments` | `counts` |`release` | | Total deployments | +| `dast_jobs` | `counts` | | | | +| `successful_deployments` | `counts` |`release` | | Total successful deployments | +| `failed_deployments` | `counts` |`release` | | Total failed deployments | +| `environments` | `counts` |`release` | | Total available and stopped environments | +| `clusters` | `counts` |`configure` | | Total GitLab Managed clusters both enabled and disabled | +| `clusters_enabled` | `counts` |`configure` | | Total GitLab Managed clusters currently enabled | +| `project_clusters_enabled` | `counts` |`configure` | | Total GitLab Managed clusters attached to projects| +| `group_clusters_enabled` | `counts` |`configure` | | Total GitLab Managed clusters attached to groups | +| `instance_clusters_enabled` | `counts` |`configure` | | Total GitLab Managed clusters attached to the instance | +| `clusters_disabled` | `counts` |`configure` | | Total GitLab Managed disabled clusters | +| `project_clusters_disabled` | `counts` |`configure` | | Total GitLab Managed disabled clusters previously attached to projects | +| `group_clusters_disabled` | `counts` |`configure` | | Total GitLab Managed disabled clusters previously attached to groups | +| `instance_clusters_disabled` | `counts` |`configure` | | Total GitLab Managed disabled clusters previously attached to the instance | +| `clusters_platforms_eks` | `counts` |`configure` | | Total GitLab Managed clusters provisioned with GitLab on AWS EKS | +| `clusters_platforms_gke` | `counts` |`configure` | | Total GitLab Managed clusters provisioned with GitLab on GCE GKE | +| `clusters_platforms_user` | `counts` |`configure` | | Total GitLab Managed clusters that are user provisioned | +| `clusters_applications_helm` | `counts` |`configure` | | Total GitLab Managed clusters with Helm enabled | +| `clusters_applications_ingress` | `counts` |`configure` | | Total GitLab Managed clusters with Ingress enabled | +| `clusters_applications_cert_managers` | `counts` |`configure` | | Total GitLab Managed clusters with Cert Manager enabled | +| `clusters_applications_crossplane` | `counts` |`configure` | | Total GitLab Managed clusters with Crossplane enabled | +| `clusters_applications_prometheus` | `counts` |`configure` | | Total GitLab Managed clusters with Prometheus enabled | +| `clusters_applications_runner` | `counts` |`configure` | | Total GitLab Managed clusters with Runner enabled | +| `clusters_applications_knative` | `counts` |`configure` | | Total GitLab Managed clusters with Knative enabled | +| `clusters_applications_elastic_stack` | `counts` |`configure` | | Total GitLab Managed clusters with Elastic Stack enabled | +| `clusters_management_project` | `counts` |`configure` | | Total GitLab Managed clusters with defined cluster management project | +| `in_review_folder` | `counts` | | | | +| `grafana_integrated_projects` | `counts` | | | | +| `groups` | `counts` | | | | +| `issues` | `counts` | | | | +| `issues_created_from_gitlab_error_tracking_ui` | `counts` | `monitor` | | | +| `issues_with_associated_zoom_link` | `counts` | `monitor` | | | +| `issues_using_zoom_quick_actions` | `counts` | `monitor` | | | +| `issues_with_embedded_grafana_charts_approx` | `counts` | `monitor` | | | +| `issues_with_health_status` | `counts` | | | | +| `keys` | `counts` | | | | +| `label_lists` | `counts` | | | | +| `lfs_objects` | `counts` | | | | +| `milestone_lists` | `counts` | | | | +| `milestones` | `counts` | | | | +| `pages_domains` | `counts` |`release` | | Total GitLab Pages domains | +| `pool_repositories` | `counts` | | | | +| `projects` | `counts` | | | | +| `projects_imported_from_github` | `counts` | | | | +| `projects_with_repositories_enabled` | `counts` | | | | +| `projects_with_error_tracking_enabled` | `counts` | `monitor` | | | +| `protected_branches` | `counts` | | | | +| `releases` | `counts` |`release` | | Unique release tags | +| `remote_mirrors` | `counts` | | | | +| `requirements_created` | `counts` | | | | +| `snippets` | `counts` | | | | +| `suggestions` | `counts` | | | | +| `todos` | `counts` | | | | +| `uploads` | `counts` | | | | +| `web_hooks` | `counts` | | | | +| `projects_alerts_active` | `counts` | | | | +| `projects_asana_active` | `counts` | | | | +| `projects_assembla_active` | `counts` | | | | +| `projects_bamboo_active` | `counts` | | | | +| `projects_bugzilla_active` | `counts` | | | | +| `projects_buildkite_active` | `counts` | | | | +| `projects_campfire_active` | `counts` | | | | +| `projects_custom_issue_tracker_active` | `counts` | | | | +| `projects_discord_active` | `counts` | | | | +| `projects_drone_ci_active` | `counts` | | | | +| `projects_emails_on_push_active` | `counts` | | | | | `projects_external_wiki_active` | `counts` | | | -| `projects_flowdock_active` | `counts` | | | -| `projects_github_active` | `counts` | | | -| `projects_hangouts_chat_active` | `counts` | | | -| `projects_hipchat_active` | `counts` | | | -| `projects_irker_active` | `counts` | | | -| `projects_jenkins_active` | `counts` | | | -| `projects_jira_active` | `counts` | | | -| `projects_mattermost_active` | `counts` | | | -| `projects_mattermost_slash_commands_active` | `counts` | | | -| `projects_microsoft_teams_active` | `counts` | | | -| `projects_packagist_active` | `counts` | | | -| `projects_pipelines_email_active` | `counts` | | | -| `projects_pivotaltracker_active` | `counts` | | | -| `projects_prometheus_active` | `counts` | | | -| `projects_pushover_active` | `counts` | | | -| `projects_redmine_active` | `counts` | | | -| `projects_slack_active` | `counts` | | | -| `projects_slack_slash_commands_active` | `counts` | | | -| `projects_teamcity_active` | `counts` | | | -| `projects_unify_circuit_active` | `counts` | | | -| `projects_webex_teams_active` | `counts` | | | -| `projects_youtrack_active` | `counts` | | | -| `projects_slack_notifications_active` | `counts` | | | -| `projects_slack_slash_active` | `counts` | | | -| `projects_jira_server_active` | `counts` | | | -| `projects_jira_cloud_active` | `counts` | | | -| `projects_jira_dvcs_cloud_active` | `counts` | | | -| `projects_jira_dvcs_server_active` | `counts` | | | -| `labels` | `counts` | | | -| `merge_requests` | `counts` | | | -| `notes` | `counts` | | | -| `wiki_pages_create` | `counts` | | | -| `wiki_pages_update` | `counts` | | | -| `wiki_pages_delete` | `counts` | | | -| `web_ide_commits` | `counts` | | | -| `web_ide_views` | `counts` | | | -| `web_ide_merge_requests` | `counts` | | | -| `web_ide_previews` | `counts` | | | -| `snippet_comment` | `counts` | | | -| `commit_comment` | `counts` | | | -| `merge_request_comment` | `counts` | | | -| `snippet_create` | `counts` | | | -| `snippet_update` | `counts` | | | -| `navbar_searches` | `counts` | | | -| `cycle_analytics_views` | `counts` | | | -| `productivity_analytics_views` | `counts` | | | -| `source_code_pushes` | `counts` | | | -| `merge_request_create` | `counts` | | | -| `design_management_designs_create` | `counts` | | | -| `design_management_designs_update` | `counts` | | | -| `design_management_designs_delete` | `counts` | | | -| `licenses_list_views` | `counts` | | | -| `user_preferences_group_overview_details` | `counts` | | | -| `user_preferences_group_overview_security_dashboard` | `counts` | | | -| `ingress_modsecurity_logging` | `counts` | | | -| `ingress_modsecurity_blocking` | `counts` | | | -| `ingress_modsecurity_disabled` | `counts` | | | -| `ingress_modsecurity_not_installed` | `counts` | | | -| `dependency_list_usages_total` | `counts` | | | -| `epics` | `counts` | | | -| `feature_flags` | `counts` | | | -| `geo_nodes` | `counts` | `geo` | Number of sites in a Geo deployment | -| `geo_event_log_max_id` | `counts` | `geo` | Number of replication events on a Geo primary | -| `incident_issues` | `counts` | `monitor` | Issues created by the alert bot | -| `alert_bot_incident_issues` | `counts` | `monitor` | Issues created by the alert bot | -| `incident_labeled_issues` | `counts` | `monitor` | Issues with the incident label | -| `issues_created_gitlab_alerts` | `counts` | `monitor` | Issues created from alerts by non-alert bot users | -| `issues_created_manually_from_alerts` | `counts` | `monitor` | Issues created from alerts by non-alert bot users | -| `issues_created_from_alerts` | `counts` | `monitor` | Issues created from Prometheus and alert management alerts | -| `ldap_group_links` | `counts` | | | -| `ldap_keys` | `counts` | | | -| `ldap_users` | `counts` | | | -| `pod_logs_usages_total` | `counts` | | | -| `projects_enforcing_code_owner_approval` | `counts` | | | -| `projects_mirrored_with_pipelines_enabled` | `counts` |`release` | Projects with repository mirroring enabled | -| `projects_reporting_ci_cd_back_to_github` | `counts` |`verify` | Projects with a GitHub service pipeline enabled | -| `projects_with_packages` | `counts` |`package` | Projects with package registry configured | -| `projects_with_prometheus_alerts` | `counts` |`monitor` | Projects with Promethus alerting enabled | -| `projects_with_tracing_enabled` | `counts` |`monitor` | Projects with tracing enabled | -| `projects_with_alerts_service_enabled` | `counts` |`monitor` | Projects with alerting service enabled | -| `template_repositories` | `counts` | | | -| `container_scanning_jobs` | `counts` | | | -| `dependency_scanning_jobs` | `counts` | | | -| `license_management_jobs` | `counts` | | | -| `sast_jobs` | `counts` | | | -| `status_page_projects` | `counts` | `monitor` | Projects with status page enabled | -| `status_page_issues` | `counts` | `monitor` | Issues published to a Status Page | -| `epics_deepest_relationship_level` | `counts` | | | -| `operations_dashboard_default_dashboard` | `counts` | `monitor` | Active users with enabled operations dashboard | -| `operations_dashboard_users_with_projects_added` | `counts` | `monitor` | Active users with projects on operations dashboard| -| `container_registry_enabled` | | | | -| `dependency_proxy_enabled` | | | | -| `gitlab_shared_runners_enabled` | | | | -| `gravatar_enabled` | | | | -| `ldap_enabled` | | | | -| `mattermost_enabled` | | | | -| `omniauth_enabled` | | | | -| `prometheus_metrics_enabled` | | | | -| `reply_by_email_enabled` | | | | -| `average` | `avg_cycle_analytics - code` | | | -| `sd` | `avg_cycle_analytics - code` | | | -| `missing` | `avg_cycle_analytics - code` | | | -| `average` | `avg_cycle_analytics - test` | | | -| `sd` | `avg_cycle_analytics - test` | | | -| `missing` | `avg_cycle_analytics - test` | | | -| `average` | `avg_cycle_analytics - review` | | | -| `sd` | `avg_cycle_analytics - review` | | | -| `missing` | `avg_cycle_analytics - review` | | | -| `average` | `avg_cycle_analytics - staging` | | | -| `sd` | `avg_cycle_analytics - staging` | | | -| `missing` | `avg_cycle_analytics - staging` | | | -| `average` | `avg_cycle_analytics - production` | | | -| `sd` | `avg_cycle_analytics - production` | | | -| `missing` | `avg_cycle_analytics - production` | | | -| `total` | `avg_cycle_analytics` | | | -| `clusters_applications_cert_managers` | `usage_activity_by_stage` | `configure` | Unique clusters with certificate managers enabled | -| `clusters_applications_helm` | `usage_activity_by_stage` | `configure` | Unique clusters with Helm enabled | -| `clusters_applications_ingress` | `usage_activity_by_stage` | `configure` | Unique clusters with Ingress enabled | -| `clusters_applications_knative` | `usage_activity_by_stage` | `configure` | Unique clusters with Knative enabled | -| `clusters_management_project` | `usage_activity_by_stage` | `configure` | Unique clusters with project management enabled | -| `clusters_disabled` | `usage_activity_by_stage` | `configure` | Total non-"GitLab Managed clusters" | -| `clusters_enabled` | `usage_activity_by_stage` | `configure` | Total GitLab Managed clusters | -| `clusters_platforms_gke` | `usage_activity_by_stage` | `configure` | Unique clusters with Google Cloud installed | -| `clusters_platforms_eks` | `usage_activity_by_stage` | `configure` | Unique clusters with AWS installed | -| `clusters_platforms_user` | `usage_activity_by_stage` | `configure` | Unique clusters that are user provided | -| `instance_clusters_disabled` | `usage_activity_by_stage` | `configure` | Unique clusters disabled on instance | -| `instance_clusters_enabled` | `usage_activity_by_stage` | `configure` | Unique clusters enabled on instance | -| `group_clusters_disabled` | `usage_activity_by_stage` | `configure` | Unique clusters disabled on group | -| `group_clusters_enabled` | `usage_activity_by_stage` | `configure` | Unique clusters enabled on group | -| `project_clusters_disabled` | `usage_activity_by_stage` | `configure` | Unique clusters disabled on project | -| `project_clusters_enabled` | `usage_activity_by_stage` | `configure` | Unique clusters enabled on project | -| `projects_slack_notifications_active` | `usage_activity_by_stage` | `configure` | Unique projects with Slack service enabled | -| `projects_slack_slash_active` | `usage_activity_by_stage` | `configure` | Unique projects with Slack '/' commands enabled | -| `projects_with_prometheus_alerts: 0` | `usage_activity_by_stage` | `monitor` | Projects with Promethus enabled and no alerts | -| `deploy_keys` | `usage_activity_by_stage` | `create` | | -| `keys` | `usage_activity_by_stage` | `create` | | -| `projects_jira_dvcs_server_active` | `usage_activity_by_stage` | `plan` | | -| `service_desk_enabled_projects` | `usage_activity_by_stage` | `plan` | | -| `service_desk_issues` | `usage_activity_by_stage` | `plan` | | -| `todos: 0` | `usage_activity_by_stage` | `plan` | | -| `deployments` | `usage_activity_by_stage` | `release` | Total deployments | -| `failed_deployments` | `usage_activity_by_stage` | `release` | Total failed deployments | -| `projects_mirrored_with_pipelines_enabled` | `usage_activity_by_stage` | `release` | Projects with repository mirroring enabled | -| `releases` | `usage_activity_by_stage` | `release` | Unique release tags in project | -| `successful_deployments: 0` | `usage_activity_by_stage` | `release` | Total successful deployments | -| `user_preferences_group_overview_security_dashboard: 0` | `usage_activity_by_stage` | `secure` | | -| `ci_builds` | `usage_activity_by_stage` | `verify` | Unique builds in project | -| `ci_external_pipelines` | `usage_activity_by_stage` | `verify` | Total pipelines in external repositories | -| `ci_internal_pipelines` | `usage_activity_by_stage` | `verify` | Total pipelines in GitLab repositories | -| `ci_pipeline_config_auto_devops` | `usage_activity_by_stage` | `verify` | Total pipelines from an Auto DevOps template | -| `ci_pipeline_config_repository` | `usage_activity_by_stage` | `verify` | Pipelines from templates in repository | -| `ci_pipeline_schedules` | `usage_activity_by_stage` | `verify` | Pipeline schedules in GitLab | -| `ci_pipelines` | `usage_activity_by_stage` | `verify` | Total pipelines | -| `ci_triggers` | `usage_activity_by_stage` | `verify` | Triggers enabled | -| `clusters_applications_runner` | `usage_activity_by_stage` | `verify` | Unique clusters with Runner enabled | -| `projects_reporting_ci_cd_back_to_github: 0` | `usage_activity_by_stage` | `verify` | Unique projects with a GitHub pipeline enabled | +| `projects_flowdock_active` | `counts` | | | | +| `projects_github_active` | `counts` | | | | +| `projects_hangouts_chat_active` | `counts` | | | | +| `projects_hipchat_active` | `counts` | | | | +| `projects_irker_active` | `counts` | | | | +| `projects_jenkins_active` | `counts` | | | | +| `projects_jira_active` | `counts` | | | | +| `projects_mattermost_active` | `counts` | | | | +| `projects_mattermost_slash_commands_active` | `counts` | | | | +| `projects_microsoft_teams_active` | `counts` | | | | +| `projects_packagist_active` | `counts` | | | | +| `projects_pipelines_email_active` | `counts` | | | | +| `projects_pivotaltracker_active` | `counts` | | | | +| `projects_prometheus_active` | `counts` | | | | +| `projects_pushover_active` | `counts` | | | | +| `projects_redmine_active` | `counts` | | | | +| `projects_slack_active` | `counts` | | | | +| `projects_slack_slash_commands_active` | `counts` | | | | +| `projects_teamcity_active` | `counts` | | | | +| `projects_unify_circuit_active` | `counts` | | | | +| `projects_webex_teams_active` | `counts` | | | | +| `projects_youtrack_active` | `counts` | | | | +| `projects_slack_notifications_active` | `counts` | | | | +| `projects_slack_slash_active` | `counts` | | | | +| `projects_jira_server_active` | `counts` | | | | +| `projects_jira_cloud_active` | `counts` | | | | +| `projects_jira_dvcs_cloud_active` | `counts` | | | | +| `projects_jira_dvcs_server_active` | `counts` | | | | +| `labels` | `counts` | | | | +| `merge_requests` | `counts` | | | | +| `notes` | `counts` | | | | +| `wiki_pages_create` | `counts` | | | | +| `wiki_pages_update` | `counts` | | | | +| `wiki_pages_delete` | `counts` | | | | +| `web_ide_commits` | `counts` | | | | +| `web_ide_views` | `counts` | | | | +| `web_ide_merge_requests` | `counts` | | | | +| `web_ide_previews` | `counts` | | | | +| `snippet_comment` | `counts` | | | | +| `commit_comment` | `counts` | | | | +| `merge_request_comment` | `counts` | | | | +| `snippet_create` | `counts` | | | | +| `snippet_update` | `counts` | | | | +| `navbar_searches` | `counts` | | | | +| `cycle_analytics_views` | `counts` | | | | +| `productivity_analytics_views` | `counts` | | | | +| `source_code_pushes` | `counts` | | | | +| `merge_request_create` | `counts` | | | | +| `design_management_designs_create` | `counts` | | | | +| `design_management_designs_update` | `counts` | | | | +| `design_management_designs_delete` | `counts` | | | | +| `licenses_list_views` | `counts` | | | | +| `user_preferences_group_overview_details` | `counts` | | | | +| `user_preferences_group_overview_security_dashboard` | `counts` | | | | +| `ingress_modsecurity_logging` | `counts` | | | | +| `ingress_modsecurity_blocking` | `counts` | | | | +| `ingress_modsecurity_disabled` | `counts` | | | | +| `ingress_modsecurity_not_installed` | `counts` | | | | +| `dependency_list_usages_total` | `counts` | | | | +| `epics` | `counts` | | | | +| `feature_flags` | `counts` | | | | +| `geo_nodes` | `counts` | `geo` | | Number of sites in a Geo deployment | +| `geo_event_log_max_id` | `counts` | `geo` | | Number of replication events on a Geo primary | +| `incident_issues` | `counts` | `monitor` | | Issues created by the alert bot | +| `alert_bot_incident_issues` | `counts` | `monitor` | | Issues created by the alert bot | +| `incident_labeled_issues` | `counts` | `monitor` | | Issues with the incident label | +| `issues_created_gitlab_alerts` | `counts` | `monitor` | | Issues created from alerts by non-alert bot users | +| `issues_created_manually_from_alerts` | `counts` | `monitor` | | Issues created from alerts by non-alert bot users | +| `issues_created_from_alerts` | `counts` | `monitor` | | Issues created from Prometheus and alert management alerts | +| `ldap_group_links` | `counts` | | | | +| `ldap_keys` | `counts` | | | | +| `ldap_users` | `counts` | | | | +| `pod_logs_usages_total` | `counts` | | | | +| `projects_enforcing_code_owner_approval` | `counts` | | | | +| `projects_mirrored_with_pipelines_enabled` | `counts` |`release` | | Projects with repository mirroring enabled | +| `projects_reporting_ci_cd_back_to_github` | `counts` |`verify` | | Projects with a GitHub service pipeline enabled | +| `projects_with_packages` | `counts` |`package` | | Projects with package registry configured | +| `projects_with_prometheus_alerts` | `counts` |`monitor` | | Projects with Prometheus alerting enabled | +| `projects_with_tracing_enabled` | `counts` |`monitor` | | Projects with tracing enabled | +| `projects_with_alerts_service_enabled` | `counts` |`monitor` | | Projects with alerting service enabled | +| `template_repositories` | `counts` | | | | +| `container_scanning_jobs` | `counts` | | | | +| `dependency_scanning_jobs` | `counts` | | | | +| `license_management_jobs` | `counts` | | | | +| `sast_jobs` | `counts` | | | | +| `status_page_projects` | `counts` | `monitor` | | Projects with status page enabled | +| `status_page_issues` | `counts` | `monitor` | | Issues published to a Status Page | +| `epics_deepest_relationship_level` | `counts` | | | | +| `operations_dashboard_default_dashboard` | `counts` | `monitor` | | Active users with enabled operations dashboard | +| `operations_dashboard_users_with_projects_added` | `counts` | `monitor` | | Active users with projects on operations dashboard| +| `container_registry_enabled` | | | | | +| `dependency_proxy_enabled` | | | | | +| `gitlab_shared_runners_enabled` | | | | | +| `gravatar_enabled` | | | | | +| `ldap_enabled` | | | | | +| `mattermost_enabled` | | | | | +| `omniauth_enabled` | | | | | +| `prometheus_metrics_enabled` | | | | | +| `reply_by_email_enabled` | | | | | +| `average` | `avg_cycle_analytics - code` | | | | +| `sd` | `avg_cycle_analytics - code` | | | | +| `missing` | `avg_cycle_analytics - code` | | | | +| `average` | `avg_cycle_analytics - test` | | | | +| `sd` | `avg_cycle_analytics - test` | | | | +| `missing` | `avg_cycle_analytics - test` | | | | +| `average` | `avg_cycle_analytics - review` | | | | +| `sd` | `avg_cycle_analytics - review` | | | | +| `missing` | `avg_cycle_analytics - review` | | | | +| `average` | `avg_cycle_analytics - staging` | | | | +| `sd` | `avg_cycle_analytics - staging` | | | | +| `missing` | `avg_cycle_analytics - staging` | | | | +| `average` | `avg_cycle_analytics - production` | | | | +| `sd` | `avg_cycle_analytics - production` | | | | +| `missing` | `avg_cycle_analytics - production` | | | | +| `total` | `avg_cycle_analytics` | | | | +| `clusters_applications_cert_managers` | `usage_activity_by_stage` | `configure` | | Unique clusters with certificate managers enabled | +| `clusters_applications_helm` | `usage_activity_by_stage` | `configure` | | Unique clusters with Helm enabled | +| `clusters_applications_ingress` | `usage_activity_by_stage` | `configure` | | Unique clusters with Ingress enabled | +| `clusters_applications_knative` | `usage_activity_by_stage` | `configure` | | Unique clusters with Knative enabled | +| `clusters_management_project` | `usage_activity_by_stage` | `configure` | | Unique clusters with project management enabled | +| `clusters_disabled` | `usage_activity_by_stage` | `configure` | | Total non-"GitLab Managed clusters" | +| `clusters_enabled` | `usage_activity_by_stage` | `configure` | | Total GitLab Managed clusters | +| `clusters_platforms_gke` | `usage_activity_by_stage` | `configure` | | Unique clusters with Google Cloud installed | +| `clusters_platforms_eks` | `usage_activity_by_stage` | `configure` | | Unique clusters with AWS installed | +| `clusters_platforms_user` | `usage_activity_by_stage` | `configure` | | Unique clusters that are user provided | +| `instance_clusters_disabled` | `usage_activity_by_stage` | `configure` | | Unique clusters disabled on instance | +| `instance_clusters_enabled` | `usage_activity_by_stage` | `configure` | | Unique clusters enabled on instance | +| `group_clusters_disabled` | `usage_activity_by_stage` | `configure` | | Unique clusters disabled on group | +| `group_clusters_enabled` | `usage_activity_by_stage` | `configure` | | Unique clusters enabled on group | +| `project_clusters_disabled` | `usage_activity_by_stage` | `configure` | | Unique clusters disabled on project | +| `project_clusters_enabled` | `usage_activity_by_stage` | `configure` | | Unique clusters enabled on project | +| `projects_slack_notifications_active` | `usage_activity_by_stage` | `configure` | | Unique projects with Slack service enabled | +| `projects_slack_slash_active` | `usage_activity_by_stage` | `configure` | | Unique projects with Slack '/' commands enabled | +| `projects_with_prometheus_alerts: 0` | `usage_activity_by_stage` | `monitor` | | Projects with Prometheus enabled and no alerts | +| `deploy_keys` | `usage_activity_by_stage` | `create` | | | +| `keys` | `usage_activity_by_stage` | `create` | | | +| `projects_jira_dvcs_server_active` | `usage_activity_by_stage` | `plan` | | | +| `service_desk_enabled_projects` | `usage_activity_by_stage` | `plan` | | | +| `service_desk_issues` | `usage_activity_by_stage` | `plan` | | | +| `todos: 0` | `usage_activity_by_stage` | `plan` | | | +| `deployments` | `usage_activity_by_stage` | `release` | | Total deployments | +| `failed_deployments` | `usage_activity_by_stage` | `release` | | Total failed deployments | +| `projects_mirrored_with_pipelines_enabled` | `usage_activity_by_stage` | `release` | | Projects with repository mirroring enabled | +| `releases` | `usage_activity_by_stage` | `release` | | Unique release tags in project | +| `successful_deployments: 0` | `usage_activity_by_stage` | `release` | | Total successful deployments | +| `user_preferences_group_overview_security_dashboard: 0` | `usage_activity_by_stage` | `secure` | | | +| `ci_builds` | `usage_activity_by_stage` | `verify` | | Unique builds in project | +| `ci_external_pipelines` | `usage_activity_by_stage` | `verify` | | Total pipelines in external repositories | +| `ci_internal_pipelines` | `usage_activity_by_stage` | `verify` | | Total pipelines in GitLab repositories | +| `ci_pipeline_config_auto_devops` | `usage_activity_by_stage` | `verify` | | Total pipelines from an Auto DevOps template | +| `ci_pipeline_config_repository` | `usage_activity_by_stage` | `verify` | | Pipelines from templates in repository | +| `ci_pipeline_schedules` | `usage_activity_by_stage` | `verify` | | Pipeline schedules in GitLab | +| `ci_pipelines` | `usage_activity_by_stage` | `verify` | | Total pipelines | +| `ci_triggers` | `usage_activity_by_stage` | `verify` | | Triggers enabled | +| `clusters_applications_runner` | `usage_activity_by_stage` | `verify` | | Unique clusters with Runner enabled | +| `projects_reporting_ci_cd_back_to_github: 0` | `usage_activity_by_stage` | `verify` | | Unique projects with a GitHub pipeline enabled | ## Example Usage Ping payload diff --git a/doc/topics/autodevops/index.md b/doc/topics/autodevops/index.md index b92be0a0076..10f22e51ac9 100644 --- a/doc/topics/autodevops/index.md +++ b/doc/topics/autodevops/index.md @@ -235,6 +235,10 @@ are available: - `master` branch is directly deployed to staging. - Manual actions are provided for incremental rollout to production. +TIP: **Tip:** +Use the [blue-green deployment](../../ci/environments/incremental_rollouts.md#blue-green-deployment) technique +to minimize downtime and risk. + ## Using multiple Kubernetes clusters **(PREMIUM)** When using Auto DevOps, you can deploy different environments to diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml index b6a60dfe759..aa2dfe26caa 100644 --- a/spec/lib/gitlab/import_export/safe_model_attributes.yml +++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml @@ -751,6 +751,7 @@ ProjectMetricsSetting: - external_dashboard_url - created_at - updated_at +- dashboard_timezone Board: - id - project_id diff --git a/spec/services/projects/operations/update_service_spec.rb b/spec/services/projects/operations/update_service_spec.rb index 99a9fdd4184..e5842fb9085 100644 --- a/spec/services/projects/operations/update_service_spec.rb +++ b/spec/services/projects/operations/update_service_spec.rb @@ -96,7 +96,8 @@ describe Projects::Operations::UpdateService do let(:params) do { metrics_setting_attributes: { - external_dashboard_url: 'http://gitlab.com' + external_dashboard_url: 'http://gitlab.com', + dashboard_timezone: 'utc' } } end @@ -108,6 +109,7 @@ describe Projects::Operations::UpdateService do expect(project.reload.metrics_setting.external_dashboard_url).to eq( 'http://gitlab.com' ) + expect(project.metrics_setting.dashboard_timezone).to eq('utc') end end @@ -122,6 +124,7 @@ describe Projects::Operations::UpdateService do expect(project.reload.metrics_setting.external_dashboard_url).to eq( 'http://gitlab.com' ) + expect(project.metrics_setting.dashboard_timezone).to eq('utc') end context 'with blank external_dashboard_url in params' do