From bbc06065aa40c3d0d037bea16081f4f5c969053e Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 23 Mar 2022 21:08:09 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- GITALY_SERVER_VERSION | 2 +- app/models/ci/secure_file.rb | 9 + doc/administration/packages/index.md | 4 +- doc/api/secure_files.md | 13 +- doc/tutorials/how_git_works.md | 267 ++ .../img/branches_dropdown_v14_10.png | Bin 0 -> 43777 bytes doc/tutorials/img/clone_project_v14_9.png | Bin 0 -> 30075 bytes lib/api/ci/secure_files.rb | 4 +- lib/gitlab/usage_data_queries.rb | 15 +- lib/tasks/gitlab/usage_data.rake | 11 - locale/gitlab.pot | 3 + .../lib/gitlab/usage/sql_metrics_queries.json | 2209 ----------------- spec/lib/gitlab/usage_data_queries_spec.rb | 12 +- spec/requests/api/ci/secure_files_spec.rb | 32 + 14 files changed, 332 insertions(+), 2249 deletions(-) create mode 100644 doc/tutorials/how_git_works.md create mode 100644 doc/tutorials/img/branches_dropdown_v14_10.png create mode 100644 doc/tutorials/img/clone_project_v14_9.png delete mode 100644 spec/fixtures/lib/gitlab/usage/sql_metrics_queries.json diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index e6d9d1fa8c5..a7bfedf4e61 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -57048c3d003ebf72ba8342a03b2f6d510193e49e +36aaf4e475fdcc4ae89f14772662fa89125d7716 diff --git a/app/models/ci/secure_file.rb b/app/models/ci/secure_file.rb index 18f0093ea41..47af0e14142 100644 --- a/app/models/ci/secure_file.rb +++ b/app/models/ci/secure_file.rb @@ -11,10 +11,13 @@ module Ci self.limit_scope = :project self.limit_name = 'project_ci_secure_files' + attr_accessor :file_checksum + belongs_to :project, optional: false validates :file, presence: true, file_size: { maximum: FILE_SIZE_LIMIT } validates :checksum, :file_store, :name, :permissions, :project_id, presence: true + validate :validate_upload_checksum, on: :create before_validation :assign_checksum @@ -33,5 +36,11 @@ module Ci def assign_checksum self.checksum = file.checksum if file.present? && file_changed? end + + def validate_upload_checksum + unless self.file_checksum.nil? + errors.add(:file_checksum, _("Secure Files|File did not match the provided checksum")) unless self.file_checksum == self.checksum + end + end end end diff --git a/doc/administration/packages/index.md b/doc/administration/packages/index.md index abf5c46114b..b122cb9db90 100644 --- a/doc/administration/packages/index.md +++ b/doc/administration/packages/index.md @@ -10,9 +10,7 @@ GitLab Packages allows organizations to use GitLab as a private repository for a variety of common package managers. Users are able to build and publish packages, which can be easily consumed as a dependency in downstream projects. -The Packages feature allows GitLab to act as a repository for the following: - -The Package Registry supports the following formats: +The Packages feature allows GitLab to act as a repository and supports the following formats: | Package type | GitLab version | |-------------------------------------------------------------------|----------------| diff --git a/doc/api/secure_files.md b/doc/api/secure_files.md index 96190920a33..826a5de3489 100644 --- a/doc/api/secure_files.md +++ b/doc/api/secure_files.md @@ -101,12 +101,13 @@ POST /projects/:project_id/secure_files Supported attributes: -| Attribute | Type | Required | Description | -|---------------|----------------|------------------------|-------------| -| `project_id` | integer/string | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. | -| `name` | string | **{check-circle}** Yes | The `name` of the file being uploaded. | -| `file` | file | **{check-circle}** Yes | The `file` being uploaded. | -| `permissions` | string | **{dotted-circle}** No | The file is created with the specified permissions when created in the CI/CD job. Available types are: `read_only` (default), `read_write`, and `execute`. | +| Attribute | Type | Required | Description | +|-----------------|----------------|------------------------|-------------| +| `project_id` | integer/string | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. | +| `name` | string | **{check-circle}** Yes | The `name` of the file being uploaded. | +| `file` | file | **{check-circle}** Yes | The `file` being uploaded. | +| `file_checksum` | file | **{dotted-circle}** No | An optional sha256 checksum of the file to be uploaded. If provided, the checksum must match the uploaded file, or the upload will fail to validate. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/355653) in GitLab 14.10. | +| `permissions` | string | **{dotted-circle}** No | The file is created with the specified permissions when created in the CI/CD job. Available types are: `read_only` (default), `read_write`, and `execute`. | Example request: diff --git a/doc/tutorials/how_git_works.md b/doc/tutorials/how_git_works.md new file mode 100644 index 00000000000..8ca9af5f83e --- /dev/null +++ b/doc/tutorials/how_git_works.md @@ -0,0 +1,267 @@ +--- +stage: none +group: unassigned +info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments +--- + +# Make your first Git commit + +This tutorial is going to teach you a little bit about how Git works, and walk +you through the steps of creating your own project and editing a file. + +When you're done, you'll have a project where you can practice using Git. + +## What you need + +Before you begin: + +- [Install Git on your local machine](../topics/git/how_to_install_git/index.md). +- Ensure you can sign in to an instance of GitLab. If your organization doesn't + have GitLab, create an account on GitLab.com. +- [Create SSH keys and add them to GitLab](../ssh/index.md). SSH keys are how you + securely communicate between your computer and GitLab. + +## What is Git? + +Before we jump into steps, let's go over some basic Git concepts. + +Git is a version control system. It's used to track changes to files. + +You store files, like code or documents, in a Git *repository*. When you want to edit the files, you +*clone* the repository to your computer, make the changes, and *push* your changes +back to the repository. In GitLab, a Git repository is located in +a *project*. + +Each time you push a change, Git records it as a unique *commit*. These commits make up +the history of when and how a file changed, and who changed it. + +```mermaid +graph LR + subgraph Repository commit history + A(Author: Alex
Date: 3 Jan at 1PM
Commit message: Added sales figures for January
Commit ID: 123abc12) ---> B + B(Author: Sam
Date: 4 Jan at 10AM
Commit message: Removed outdated marketing information
Commit ID: aabb1122) ---> C + C(Author: Zhang
Date: 5 Jan at 3PM
Commit message: Added a new 'Invoices' file
Commit ID: ddee4455) + end +``` + +When you work in a Git repository, you work in *branches*. By default, the contents +of a repository are in a default branch. To make changes, you: + +1. Create your own branch, which is a snapshot of the default branch at the time + you create it. +1. Make changes and push them to your branch. Each push creates a commit. +1. When you're ready, *merge* your branch into the default branch. + +```mermaid +flowchart LR + subgraph Default branch + A[Commit] --> B[Commit] --> C[Commit] --> D[Commit] + end + subgraph My branch + B --1. Create my branch--> E(Commit) + E --2. Add my commit--> F(Commit) + F --2. Add my commit--> G(Commit) + G --3. Merge my branch to default--> D + end +``` + +If this all feels a bit overwhelming, hang in there. You're about to see these concepts in action. + +## Steps + +Here's an overview of what we're going to do: + +1. [Create a sample project](#create-a-sample-project). +1. [Clone the repository](#clone-the-repository). +1. [Create a branch and make your changes](#create-a-branch-and-make-changes). +1. [Commit and push your changes](#commit-and-push-your-changes). +1. [Merge your changes](#merge-your-changes). +1. [View your changes in GitLab](#view-your-changes-in-gitlab). + +### Create a sample project + +To start, create a sample project in GitLab. + +1. In GitLab, on the top bar, select **Menu > Projects > Create new project**. +1. Select **Create blank project**. +1. For **Project name**, enter `My sample project`. The project slug is generated for you. + This slug is the URL you can use to access the project after it's created. +1. Ensure **Initialize repository with a README** is selected. + How you complete the other fields is up to you. +1. Select **Create project**. + +### Clone the repository + +Now you can clone the repository in your project. *Cloning* a repository means you're creating +a copy on your computer, or wherever you want to store and work with the files. + +1. On your project page, select **Clone**. Copy the URL for **Clone with SSH**. + + ![Clone a project with SSH](img/clone_project_v14_9.png) + +1. Open a terminal on your computer and go to the directory + where you want to clone the files. + +1. Enter `git clone` and paste the URL: + + ```shell + git clone git@gitlab.com:gitlab-example/my-sample-project.git + ``` + +1. Go to the directory: + + ```shell + cd my-sample-project + ``` + +1. By default, you've cloned the default branch for the repository. Usually this + branch is `main`. To be sure, get the name of the default branch: + + ```shell + git branch + ``` + + The branch you're on is marked with an asterisk. + Press `Q` on your keyboard to return to the main terminal + window. + +### Create a branch and make changes + +Now that you have a copy of the repository, create your own branch so you can +work on your changes independently. + +1. Create a new branch called `example-tutorial-branch`. + + ```shell + git checkout -b example-tutorial-branch + ``` + +1. In a text editor like Visual Studio Code, Sublime, `vi`, or any other editor, + open the README.md file and add this text: + + ```plaintext + Hello world! I'm using Git! + ``` + +1. Save the file. + +1. Git keeps track of changed files. To confirm which files have changed, get + the status. + + ```shell + git status + ``` + + You should get output similar to the following: + + ```shell + On branch example-tutorial-branch + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: README.md + + no changes added to commit (use "git add" and/or "git commit -a") + ``` + +### Commit and push your changes + +You've made changes to a file in your repository. Now it's time to record +those changes by making your first commit. + +1. Add the `README.md` file to the *staging* area. The staging area is where you + put files before you commit them. + + ```shell + git add README.md + ``` + +1. Confirm the file is staged: + + ```shell + git status + ``` + + You should get output similar to the following, and the filename should be in + green text. + + ```shell + On branch example-tutorial-branch + Changes to be committed: + (use "git restore --staged ..." to unstage) + modified: README.md + ``` + +1. Now commit the staged file, and include a message + that describes the change you made. Make sure you surround the message in double + quotes ("). + + ```shell + git commit -m "I added text to the README file" + ``` + +1. The change has been committed to your branch, but your branch and its commits + are still only available on your computer. No one else has access to them yet. + Push your branch to GitLab: + + ```shell + git push origin example-tutorial-branch + ``` + +Your branch is now available on GitLab and visible to other users in your project. + +![Branches dropdown list](img/branches_dropdown_v14_10.png) + +### Merge your changes + +Now you're ready to merge the changes from your `example-tutorial-branch` branch +to the default branch (`main`). + +1. Check out the default branch for your repository. + + ```shell + git checkout main + ``` + +1. Merge your branch into the default branch. + + ```shell + git merge example-tutorial-branch + ``` + +1. Push the changes. + + ```shell + git push + ``` + +NOTE: +For this tutorial, you merge your branch directly to the default branch for your +repository. In GitLab, you typically use a [merge request](../user/project/merge_requests/) +to merge your branch. + +### View your changes in GitLab + +You did it! You updated the `README.md` file in your branch, and you merged those changes +into the `main` branch. + +Let's look in the UI and confirm it. + +1. In your project, scroll down and view the `README.md` file. + Your changes should be visible. +1. Above the list of files, select **History**. + Your commit and commit message should display. + +Now you can change back to your personal branch (`git checkout example-tutorial-branch`) +and continue updating or even creating files. Type `git status` to view the status +of your changes and commit with abandon. + +Don't worry if you mess things up. Everything in Git can be reverted, and if you +find you can't recover, you can always create a new branch and start again. + +Nice work. + +## Find more Git learning resources + +- Get a complete introduction to Git in the [Git for GitLab](https://www.youtube.com/watch?v=4lxvVj7wlZw) beginner's course (1h 33m). +- Find other tutorials about Git and GitLab on the [tutorials page](index.md). diff --git a/doc/tutorials/img/branches_dropdown_v14_10.png b/doc/tutorials/img/branches_dropdown_v14_10.png new file mode 100644 index 0000000000000000000000000000000000000000..9d132c2a11db82e65f361457c7ab9dfb5b25389a GIT binary patch literal 43777 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/img/clone_project_v14_9.png b/doc/tutorials/img/clone_project_v14_9.png new file mode 100644 index 0000000000000000000000000000000000000000..98666c95ba3e1df28f5efe0d0b9ad62e2ff5626f GIT binary patch literal 30075 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 HEJFVucvZE# literal 0 HcmV?d00001 diff --git a/lib/api/ci/secure_files.rb b/lib/api/ci/secure_files.rb index d5b21e2ef29..f0712ca30f8 100644 --- a/lib/api/ci/secure_files.rb +++ b/lib/api/ci/secure_files.rb @@ -62,12 +62,14 @@ module API requires :name, type: String, desc: 'The name of the file' requires :file, types: [Rack::Multipart::UploadedFile, ::API::Validations::Types::WorkhorseFile], desc: 'The secure file to be uploaded' optional :permissions, type: String, desc: 'The file permissions', default: 'read_only', values: %w[read_only read_write execute] + optional :file_checksum, type: String, desc: 'An optional sha256 checksum of the file to be uploaded' end route_setting :authentication, basic_auth_personal_access_token: true, job_token_allowed: true post ':id/secure_files' do secure_file = user_project.secure_files.new( name: params[:name], - permissions: params[:permissions] || :read_only + permissions: params[:permissions] || :read_only, + file_checksum: params[:file_checksum] ) secure_file.file = params[:file] diff --git a/lib/gitlab/usage_data_queries.rb b/lib/gitlab/usage_data_queries.rb index 54c130060e0..d40ac71afc6 100644 --- a/lib/gitlab/usage_data_queries.rb +++ b/lib/gitlab/usage_data_queries.rb @@ -50,7 +50,7 @@ module Gitlab def alt_usage_data(value = nil, fallback: FALLBACK, &block) if block_given? - { alt_usage_data_block: "non-SQL usage data block" } + { alt_usage_data_block: block.to_s } else { alt_usage_data_value: value } end @@ -58,9 +58,9 @@ module Gitlab def redis_usage_data(counter = nil, &block) if block_given? - { redis_usage_data_block: "non-SQL usage data block" } + { redis_usage_data_block: block.to_s } elsif counter.present? - { redis_usage_data_counter: counter.to_s } + { redis_usage_data_counter: counter } end end @@ -74,15 +74,6 @@ module Gitlab def epics_deepest_relationship_level { epics_deepest_relationship_level: 0 } end - - # Do not include Devise omniauth providers for consistency between local and CI-run specs - def auth_providers - AuthenticationEvent::STATIC_PROVIDERS - end - - def omniauth_provider_names - [] - end end end end diff --git a/lib/tasks/gitlab/usage_data.rake b/lib/tasks/gitlab/usage_data.rake index 6cd1f45f7dc..9f064ef4c0c 100644 --- a/lib/tasks/gitlab/usage_data.rake +++ b/lib/tasks/gitlab/usage_data.rake @@ -51,17 +51,6 @@ namespace :gitlab do File.write(Gitlab::UsageDataCounters::CiTemplateUniqueCounter::KNOWN_EVENTS_FILE_PATH, banner + YAML.dump(all_includes).gsub(/ *$/m, '')) end - desc 'GitLab | UsageDataMetrics | Generate raw SQL metrics queries fixture for RSpec' - task generate_sql_metrics_fixture: :environment do - path = Rails.root.join('spec/fixtures/lib/gitlab/usage/sql_metrics_queries.json') - - queries = Timecop.freeze(2021, 1, 1) do - Gitlab::Usage::ServicePingReport.for(output: :metrics_queries) - end - - File.write(path, Gitlab::Json.pretty_generate(queries)) - end - def ci_template_includes_hash(source, template_directory = nil) Gitlab::UsageDataCounters::CiTemplateUniqueCounter.ci_templates("lib/gitlab/ci/templates/#{template_directory}").map do |template| expanded_template_name = Gitlab::UsageDataCounters::CiTemplateUniqueCounter.expand_template_name("#{template_directory}/#{template}") diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 3dd57a94315..00cb4029660 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -32856,6 +32856,9 @@ msgstr "" msgid "Secure Files" msgstr "" +msgid "Secure Files|File did not match the provided checksum" +msgstr "" + msgid "Secure token that identifies an external storage request." msgstr "" diff --git a/spec/fixtures/lib/gitlab/usage/sql_metrics_queries.json b/spec/fixtures/lib/gitlab/usage/sql_metrics_queries.json deleted file mode 100644 index 21eb39b1813..00000000000 --- a/spec/fixtures/lib/gitlab/usage/sql_metrics_queries.json +++ /dev/null @@ -1,2209 +0,0 @@ -{ - "recorded_at": "2021-01-01 00:00:00 UTC", - "uuid": "d78a1ca1-e25b-4bc8-92ad-be3caf9673da", - "hostname": "localhost", - "version": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "installation_type": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "active_user_count": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4))", - "edition": "EE Free", - "license": { - }, - "settings": { - "ldap_encrypted_secrets_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "smtp_encrypted_secrets_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "operating_system": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "gitaly_apdex": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "collected_data_categories": [ - "standard", - "subscription", - "operational", - "optional" - ], - "service_ping_features_enabled": false, - "snowplow_enabled": false, - "snowplow_configured_to_gitlab_collector": false, - "certificate_based_clusters_ff": true - }, - "counts": { - "assignee_lists": "SELECT COUNT(\"lists\".\"id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 3", - "ci_builds": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build'", - "ci_internal_pipelines": "SELECT COUNT(\"ci_pipelines\".\"id\") FROM \"ci_pipelines\" WHERE (\"ci_pipelines\".\"source\" IN (1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15) OR \"ci_pipelines\".\"source\" IS NULL)", - "ci_external_pipelines": "SELECT COUNT(\"ci_pipelines\".\"id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"source\" = 6", - "ci_pipeline_config_auto_devops": "SELECT COUNT(\"ci_pipelines\".\"id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"config_source\" = 2", - "ci_pipeline_config_repository": "SELECT COUNT(\"ci_pipelines\".\"id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"config_source\" = 1", - "ci_triggers": "SELECT COUNT(\"ci_triggers\".\"id\") FROM \"ci_triggers\"", - "ci_pipeline_schedules": "SELECT COUNT(\"ci_pipeline_schedules\".\"id\") FROM \"ci_pipeline_schedules\"", - "auto_devops_enabled": "SELECT COUNT(\"project_auto_devops\".\"id\") FROM \"project_auto_devops\" WHERE \"project_auto_devops\".\"enabled\" = TRUE", - "auto_devops_disabled": "SELECT COUNT(\"project_auto_devops\".\"id\") FROM \"project_auto_devops\" WHERE \"project_auto_devops\".\"enabled\" = FALSE", - "deploy_keys": "SELECT COUNT(\"keys\".\"id\") FROM \"keys\" WHERE \"keys\".\"type\" = 'DeployKey'", - "deployments": "SELECT COUNT(\"deployments\".\"id\") FROM \"deployments\"", - "successful_deployments": "SELECT COUNT(\"deployments\".\"id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 2", - "failed_deployments": "SELECT COUNT(\"deployments\".\"id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 3", - "feature_flags": "SELECT COUNT(\"operations_feature_flags\".\"id\") FROM \"operations_feature_flags\"", - "environments": "SELECT COUNT(\"environments\".\"id\") FROM \"environments\"", - "clusters": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\"", - "clusters_enabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE", - "project_clusters_enabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 3", - "group_clusters_enabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 2", - "instance_clusters_enabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 1", - "clusters_disabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE", - "project_clusters_disabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 3", - "group_clusters_disabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 2", - "instance_clusters_disabled": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 1", - "clusters_platforms_eks": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" INNER JOIN \"cluster_providers_aws\" ON \"cluster_providers_aws\".\"cluster_id\" = \"clusters\".\"id\" WHERE \"clusters\".\"provider_type\" = 2 AND (\"cluster_providers_aws\".\"status\" IN (3)) AND \"clusters\".\"enabled\" = TRUE", - "clusters_platforms_gke": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" INNER JOIN \"cluster_providers_gcp\" ON \"cluster_providers_gcp\".\"cluster_id\" = \"clusters\".\"id\" WHERE \"clusters\".\"provider_type\" = 1 AND (\"cluster_providers_gcp\".\"status\" IN (3)) AND \"clusters\".\"enabled\" = TRUE", - "clusters_platforms_user": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"provider_type\" = 0 AND \"clusters\".\"enabled\" = TRUE", - "clusters_management_project": "SELECT COUNT(\"clusters\".\"id\") FROM \"clusters\" WHERE \"clusters\".\"management_project_id\" IS NOT NULL", - "clusters_integrations_elastic_stack": "SELECT COUNT(\"clusters_integration_elasticstack\".\"cluster_id\") FROM \"clusters_integration_elasticstack\" WHERE \"clusters_integration_elasticstack\".\"enabled\" = TRUE", - "clusters_integrations_prometheus": "SELECT COUNT(\"clusters_integration_prometheus\".\"cluster_id\") FROM \"clusters_integration_prometheus\" WHERE \"clusters_integration_prometheus\".\"enabled\" = TRUE", - "kubernetes_agents": "SELECT COUNT(\"cluster_agents\".\"id\") FROM \"cluster_agents\"", - "kubernetes_agents_with_token": "SELECT COUNT(DISTINCT \"cluster_agent_tokens\".\"agent_id\") FROM \"cluster_agent_tokens\"", - "in_review_folder": "SELECT COUNT(\"environments\".\"id\") FROM \"environments\" WHERE \"environments\".\"environment_type\" = 'review'", - "grafana_integrated_projects": "SELECT COUNT(\"grafana_integrations\".\"id\") FROM \"grafana_integrations\" WHERE \"grafana_integrations\".\"enabled\" = TRUE", - "groups": "SELECT COUNT(\"namespaces\".\"id\") FROM \"namespaces\" WHERE \"namespaces\".\"type\" = 'Group'", - "issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\"", - "issues_created_from_gitlab_error_tracking_ui": "SELECT COUNT(\"sentry_issues\".\"id\") FROM \"sentry_issues\"", - "issues_with_associated_zoom_link": "SELECT COUNT(\"zoom_meetings\".\"id\") FROM \"zoom_meetings\" WHERE \"zoom_meetings\".\"issue_status\" = 1", - "issues_using_zoom_quick_actions": "SELECT COUNT(DISTINCT \"zoom_meetings\".\"issue_id\") FROM \"zoom_meetings\"", - "issues_with_embedded_grafana_charts_approx": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" JOIN grafana_integrations USING (project_id) WHERE (issues.description LIKE '%' || grafana_integrations.grafana_url || '%') AND \"grafana_integrations\".\"enabled\" = TRUE", - "issues_created_from_alerts": "SELECT (SELECT COUNT(\"issues\".\"id\") FROM \"issues\" INNER JOIN \"alert_management_alerts\" ON \"alert_management_alerts\".\"issue_id\" = \"issues\".\"id\") + (SELECT COUNT(\"issues\".\"id\") FROM \"issues\" INNER JOIN \"issues_self_managed_prometheus_alert_events\" ON \"issues_self_managed_prometheus_alert_events\".\"issue_id\" = \"issues\".\"id\") + (SELECT COUNT(\"issues\".\"id\") FROM \"issues\" INNER JOIN \"issues_prometheus_alert_events\" ON \"issues_prometheus_alert_events\".\"issue_id\" = \"issues\".\"id\")", - "issues_created_gitlab_alerts": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" INNER JOIN \"alert_management_alerts\" ON \"alert_management_alerts\".\"issue_id\" = \"issues\".\"id\" WHERE \"issues\".\"author_id\" != 125", - "issues_created_manually_from_alerts": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" INNER JOIN \"alert_management_alerts\" ON \"alert_management_alerts\".\"issue_id\" = \"issues\".\"id\" WHERE \"issues\".\"author_id\" != 125", - "incident_issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" WHERE \"issues\".\"issue_type\" = 1", - "alert_bot_incident_issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" WHERE \"issues\".\"author_id\" = 125", - "keys": "SELECT COUNT(\"keys\".\"id\") FROM \"keys\"", - "label_lists": "SELECT COUNT(\"lists\".\"id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 1", - "lfs_objects": "SELECT COUNT(\"lfs_objects\".\"id\") FROM \"lfs_objects\"", - "milestone_lists": "SELECT COUNT(\"lists\".\"id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 4", - "milestones": "SELECT COUNT(\"milestones\".\"id\") FROM \"milestones\"", - "projects_with_packages": "SELECT COUNT(DISTINCT \"packages_packages\".\"project_id\") FROM \"packages_packages\"", - "packages": "SELECT COUNT(\"packages_packages\".\"id\") FROM \"packages_packages\"", - "pages_domains": "SELECT COUNT(\"pages_domains\".\"id\") FROM \"pages_domains\"", - "pool_repositories": "SELECT COUNT(\"pool_repositories\".\"id\") FROM \"pool_repositories\"", - "projects": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\"", - "projects_creating_incidents": "SELECT COUNT(DISTINCT \"issues\".\"project_id\") FROM \"issues\" WHERE \"issues\".\"issue_type\" = 1", - "projects_imported_from_github": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github'", - "projects_with_repositories_enabled": "SELECT COUNT(\"project_features\".\"id\") FROM \"project_features\" WHERE (repository_access_level > 0)", - "projects_with_tracing_enabled": "SELECT COUNT(\"project_tracing_settings\".\"id\") FROM \"project_tracing_settings\"", - "projects_with_error_tracking_enabled": "SELECT COUNT(\"project_error_tracking_settings\".\"project_id\") FROM \"project_error_tracking_settings\" WHERE \"project_error_tracking_settings\".\"enabled\" = TRUE", - "projects_with_alerts_created": "SELECT COUNT(DISTINCT \"alert_management_alerts\".\"project_id\") FROM \"alert_management_alerts\"", - "projects_with_enabled_alert_integrations": "SELECT COUNT(DISTINCT \"alert_management_http_integrations\".\"project_id\") FROM \"alert_management_http_integrations\" WHERE \"alert_management_http_integrations\".\"active\" = TRUE", - "projects_with_terraform_reports": "SELECT COUNT(DISTINCT \"ci_job_artifacts\".\"project_id\") FROM \"ci_job_artifacts\" WHERE \"ci_job_artifacts\".\"file_type\" = 18", - "projects_with_terraform_states": "SELECT COUNT(DISTINCT \"terraform_states\".\"project_id\") FROM \"terraform_states\"", - "protected_branches": "SELECT COUNT(\"protected_branches\".\"id\") FROM \"protected_branches\"", - "protected_branches_except_default": "SELECT COUNT(\"protected_branches\".\"id\") FROM \"protected_branches\" WHERE NOT ((\"protected_branches\".\"name\" IN ('main', 'master') OR \"protected_branches\".\"name\" IS NULL))", - "releases": "SELECT COUNT(\"releases\".\"id\") FROM \"releases\"", - "remote_mirrors": "SELECT COUNT(\"remote_mirrors\".\"id\") FROM \"remote_mirrors\"", - "personal_snippets": "SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'PersonalSnippet'", - "project_snippets": "SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'ProjectSnippet'", - "suggestions": "SELECT COUNT(\"suggestions\".\"id\") FROM \"suggestions\"", - "terraform_reports": "SELECT COUNT(\"ci_job_artifacts\".\"id\") FROM \"ci_job_artifacts\" WHERE \"ci_job_artifacts\".\"file_type\" = 18", - "terraform_states": "SELECT COUNT(\"terraform_states\".\"id\") FROM \"terraform_states\"", - "todos": "SELECT COUNT(\"todos\".\"id\") FROM \"todos\"", - "uploads": "SELECT COUNT(\"uploads\".\"id\") FROM \"uploads\"", - "web_hooks": "SELECT COUNT(\"web_hooks\".\"id\") FROM \"web_hooks\"", - "labels": "SELECT COUNT(\"labels\".\"id\") FROM \"labels\" ORDER BY \"labels\".\"title\" ASC", - "merge_requests": "SELECT COUNT(\"merge_requests\".\"id\") FROM \"merge_requests\"", - "notes": "SELECT COUNT(\"notes\".\"id\") FROM \"notes\"", - "ci_runners": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\"", - "ci_runners_instance_type_active": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\" WHERE \"ci_runners\".\"runner_type\" = 1 AND \"ci_runners\".\"active\" = TRUE", - "ci_runners_group_type_active": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\" WHERE \"ci_runners\".\"runner_type\" = 2 AND \"ci_runners\".\"active\" = TRUE", - "ci_runners_project_type_active": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\" WHERE \"ci_runners\".\"runner_type\" = 3 AND \"ci_runners\".\"active\" = TRUE", - "ci_runners_instance_type_active_online": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\" WHERE \"ci_runners\".\"runner_type\" = 1 AND \"ci_runners\".\"active\" = TRUE AND (contacted_at > '2020-12-31 22:00:00')", - "ci_runners_group_type_active_online": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\" WHERE \"ci_runners\".\"runner_type\" = 2 AND \"ci_runners\".\"active\" = TRUE AND (contacted_at > '2020-12-31 22:00:00')", - "ci_runners_project_type_active_online": "SELECT COUNT(\"ci_runners\".\"id\") FROM \"ci_runners\" WHERE \"ci_runners\".\"runner_type\" = 3 AND \"ci_runners\".\"active\" = TRUE AND (contacted_at > '2020-12-31 22:00:00')", - "projects_asana_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Asana'", - "groups_asana_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Asana'", - "instances_asana_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Asana'", - "projects_inheriting_asana_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Asana'", - "groups_inheriting_asana_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Asana'", - "projects_assembla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Assembla'", - "groups_assembla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Assembla'", - "instances_assembla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Assembla'", - "projects_inheriting_assembla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Assembla'", - "groups_inheriting_assembla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Assembla'", - "projects_bamboo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bamboo'", - "groups_bamboo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bamboo'", - "instances_bamboo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Bamboo'", - "projects_inheriting_bamboo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bamboo'", - "groups_inheriting_bamboo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bamboo'", - "projects_bugzilla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bugzilla'", - "groups_bugzilla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bugzilla'", - "instances_bugzilla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Bugzilla'", - "projects_inheriting_bugzilla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bugzilla'", - "groups_inheriting_bugzilla_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Bugzilla'", - "projects_buildkite_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Buildkite'", - "groups_buildkite_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Buildkite'", - "instances_buildkite_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Buildkite'", - "projects_inheriting_buildkite_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Buildkite'", - "groups_inheriting_buildkite_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Buildkite'", - "projects_campfire_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Campfire'", - "groups_campfire_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Campfire'", - "instances_campfire_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Campfire'", - "projects_inheriting_campfire_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Campfire'", - "groups_inheriting_campfire_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Campfire'", - "projects_confluence_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Confluence'", - "groups_confluence_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Confluence'", - "instances_confluence_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Confluence'", - "projects_inheriting_confluence_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Confluence'", - "groups_inheriting_confluence_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Confluence'", - "projects_custom_issue_tracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::CustomIssueTracker'", - "groups_custom_issue_tracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::CustomIssueTracker'", - "instances_custom_issue_tracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::CustomIssueTracker'", - "projects_inheriting_custom_issue_tracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::CustomIssueTracker'", - "groups_inheriting_custom_issue_tracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::CustomIssueTracker'", - "projects_datadog_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Datadog'", - "groups_datadog_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Datadog'", - "instances_datadog_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Datadog'", - "projects_inheriting_datadog_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Datadog'", - "groups_inheriting_datadog_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Datadog'", - "projects_discord_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Discord'", - "groups_discord_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Discord'", - "instances_discord_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Discord'", - "projects_inheriting_discord_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Discord'", - "groups_inheriting_discord_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Discord'", - "projects_drone_ci_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::DroneCi'", - "groups_drone_ci_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::DroneCi'", - "instances_drone_ci_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::DroneCi'", - "projects_inheriting_drone_ci_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::DroneCi'", - "groups_inheriting_drone_ci_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::DroneCi'", - "projects_emails_on_push_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::EmailsOnPush'", - "groups_emails_on_push_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::EmailsOnPush'", - "instances_emails_on_push_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::EmailsOnPush'", - "projects_inheriting_emails_on_push_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::EmailsOnPush'", - "groups_inheriting_emails_on_push_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::EmailsOnPush'", - "projects_ewm_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Ewm'", - "groups_ewm_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Ewm'", - "instances_ewm_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Ewm'", - "projects_inheriting_ewm_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Ewm'", - "groups_inheriting_ewm_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Ewm'", - "projects_external_wiki_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::ExternalWiki'", - "groups_external_wiki_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::ExternalWiki'", - "instances_external_wiki_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::ExternalWiki'", - "projects_inheriting_external_wiki_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::ExternalWiki'", - "groups_inheriting_external_wiki_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::ExternalWiki'", - "projects_flowdock_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Flowdock'", - "groups_flowdock_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Flowdock'", - "instances_flowdock_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Flowdock'", - "projects_inheriting_flowdock_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Flowdock'", - "groups_inheriting_flowdock_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Flowdock'", - "projects_github_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Github'", - "groups_github_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Github'", - "instances_github_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Github'", - "projects_inheriting_github_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Github'", - "groups_inheriting_github_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Github'", - "projects_gitlab_slack_application_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::GitlabSlackApplication'", - "groups_gitlab_slack_application_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::GitlabSlackApplication'", - "instances_gitlab_slack_application_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::GitlabSlackApplication'", - "projects_inheriting_gitlab_slack_application_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::GitlabSlackApplication'", - "groups_inheriting_gitlab_slack_application_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::GitlabSlackApplication'", - "projects_hangouts_chat_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::HangoutsChat'", - "groups_hangouts_chat_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::HangoutsChat'", - "instances_hangouts_chat_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::HangoutsChat'", - "projects_inheriting_hangouts_chat_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::HangoutsChat'", - "groups_inheriting_hangouts_chat_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::HangoutsChat'", - "projects_harbor_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Harbor'", - "groups_harbor_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Harbor'", - "instances_harbor_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Harbor'", - "projects_inheriting_harbor_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Harbor'", - "groups_inheriting_harbor_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Harbor'", - "projects_irker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Irker'", - "groups_irker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Irker'", - "instances_irker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Irker'", - "projects_inheriting_irker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Irker'", - "groups_inheriting_irker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Irker'", - "projects_jenkins_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jenkins'", - "groups_jenkins_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jenkins'", - "instances_jenkins_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Jenkins'", - "projects_inheriting_jenkins_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jenkins'", - "groups_inheriting_jenkins_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jenkins'", - "projects_jira_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jira'", - "groups_jira_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jira'", - "instances_jira_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Jira'", - "projects_inheriting_jira_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jira'", - "groups_inheriting_jira_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Jira'", - "projects_mattermost_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Mattermost'", - "groups_mattermost_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Mattermost'", - "instances_mattermost_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Mattermost'", - "projects_inheriting_mattermost_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Mattermost'", - "groups_inheriting_mattermost_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Mattermost'", - "projects_mattermost_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MattermostSlashCommands'", - "groups_mattermost_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MattermostSlashCommands'", - "instances_mattermost_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::MattermostSlashCommands'", - "projects_inheriting_mattermost_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MattermostSlashCommands'", - "groups_inheriting_mattermost_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MattermostSlashCommands'", - "projects_microsoft_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MicrosoftTeams'", - "groups_microsoft_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MicrosoftTeams'", - "instances_microsoft_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::MicrosoftTeams'", - "projects_inheriting_microsoft_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MicrosoftTeams'", - "groups_inheriting_microsoft_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::MicrosoftTeams'", - "projects_packagist_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Packagist'", - "groups_packagist_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Packagist'", - "instances_packagist_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Packagist'", - "projects_inheriting_packagist_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Packagist'", - "groups_inheriting_packagist_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Packagist'", - "projects_pipelines_email_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::PipelinesEmail'", - "groups_pipelines_email_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::PipelinesEmail'", - "instances_pipelines_email_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::PipelinesEmail'", - "projects_inheriting_pipelines_email_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::PipelinesEmail'", - "groups_inheriting_pipelines_email_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::PipelinesEmail'", - "projects_pivotaltracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pivotaltracker'", - "groups_pivotaltracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pivotaltracker'", - "instances_pivotaltracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Pivotaltracker'", - "projects_inheriting_pivotaltracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pivotaltracker'", - "groups_inheriting_pivotaltracker_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pivotaltracker'", - "projects_prometheus_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Prometheus'", - "groups_prometheus_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Prometheus'", - "instances_prometheus_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Prometheus'", - "projects_inheriting_prometheus_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Prometheus'", - "groups_inheriting_prometheus_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Prometheus'", - "projects_pushover_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pushover'", - "groups_pushover_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pushover'", - "instances_pushover_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Pushover'", - "projects_inheriting_pushover_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pushover'", - "groups_inheriting_pushover_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Pushover'", - "projects_redmine_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Redmine'", - "groups_redmine_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Redmine'", - "instances_redmine_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Redmine'", - "projects_inheriting_redmine_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Redmine'", - "groups_inheriting_redmine_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Redmine'", - "projects_shimo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Shimo'", - "groups_shimo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Shimo'", - "instances_shimo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Shimo'", - "projects_inheriting_shimo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Shimo'", - "groups_inheriting_shimo_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Shimo'", - "projects_slack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Slack'", - "groups_slack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Slack'", - "instances_slack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Slack'", - "projects_inheriting_slack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Slack'", - "groups_inheriting_slack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Slack'", - "projects_slack_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands'", - "groups_slack_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands'", - "instances_slack_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands'", - "projects_inheriting_slack_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands'", - "groups_inheriting_slack_slash_commands_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands'", - "projects_teamcity_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Teamcity'", - "groups_teamcity_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Teamcity'", - "instances_teamcity_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Teamcity'", - "projects_inheriting_teamcity_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Teamcity'", - "groups_inheriting_teamcity_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Teamcity'", - "projects_unify_circuit_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::UnifyCircuit'", - "groups_unify_circuit_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::UnifyCircuit'", - "instances_unify_circuit_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::UnifyCircuit'", - "projects_inheriting_unify_circuit_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::UnifyCircuit'", - "groups_inheriting_unify_circuit_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::UnifyCircuit'", - "projects_webex_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::WebexTeams'", - "groups_webex_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::WebexTeams'", - "instances_webex_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::WebexTeams'", - "projects_inheriting_webex_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::WebexTeams'", - "groups_inheriting_webex_teams_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::WebexTeams'", - "projects_youtrack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Youtrack'", - "groups_youtrack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Youtrack'", - "instances_youtrack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Youtrack'", - "projects_inheriting_youtrack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Youtrack'", - "groups_inheriting_youtrack_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Youtrack'", - "projects_zentao_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Zentao'", - "groups_zentao_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Zentao'", - "instances_zentao_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"instance\" = TRUE AND \"integrations\".\"type_new\" = 'Integrations::Zentao'", - "projects_inheriting_zentao_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"project_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Zentao'", - "groups_inheriting_zentao_active": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"active\" = TRUE AND \"integrations\".\"group_id\" IS NOT NULL AND \"integrations\".\"inherit_from_id\" IS NOT NULL AND \"integrations\".\"type_new\" = 'Integrations::Zentao'", - "projects_jira_server_active": 0, - "projects_jira_cloud_active": 0, - "projects_jira_dvcs_cloud_active": "SELECT COUNT(\"project_feature_usages\".\"project_id\") FROM \"project_feature_usages\" WHERE \"project_feature_usages\".\"jira_dvcs_cloud_last_sync_at\" IS NOT NULL", - "projects_jira_dvcs_server_active": "SELECT COUNT(\"project_feature_usages\".\"project_id\") FROM \"project_feature_usages\" WHERE \"project_feature_usages\".\"jira_dvcs_server_last_sync_at\" IS NOT NULL", - "projects_jira_issuelist_active": "SELECT COUNT(DISTINCT \"integrations\".\"id\") FROM \"integrations\" LEFT OUTER JOIN \"jira_tracker_data\" ON \"jira_tracker_data\".\"service_id\" = \"integrations\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE AND \"jira_tracker_data\".\"issues_enabled\" = TRUE", - "jira_imports_total_imported_count": "SELECT COUNT(\"jira_imports\".\"id\") FROM \"jira_imports\" WHERE \"jira_imports\".\"status\" = 4", - "jira_imports_projects_count": "SELECT COUNT(DISTINCT \"jira_imports\".\"project_id\") FROM \"jira_imports\" WHERE \"jira_imports\".\"status\" = 4", - "jira_imports_total_imported_issues_count": "SELECT SUM(\"jira_imports\".\"imported_issues_count\") FROM \"jira_imports\" WHERE \"jira_imports\".\"status\" = 4", - "redis_usage_data_counter": "Gitlab::UsageDataCounters::LicenseTestingCounter", - "user_preferences_user_gitpod_enabled": "SELECT COUNT(\"user_preferences\".\"id\") FROM \"user_preferences\" INNER JOIN \"users\" ON \"users\".\"id\" = \"user_preferences\".\"user_id\" WHERE \"user_preferences\".\"gitpod_enabled\" = TRUE AND (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4))", - "user_preferences_group_overview_details": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND (group_view = 1 OR group_view IS NULL)", - "user_preferences_group_overview_security_dashboard": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"group_view\" = 2", - "projects_with_expiration_policy_disabled": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = FALSE", - "projects_with_expiration_policy_enabled": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE", - "projects_with_expiration_policy_enabled_with_keep_n_set_to_1": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" = 1", - "projects_with_expiration_policy_enabled_with_keep_n_set_to_5": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" = 5", - "projects_with_expiration_policy_enabled_with_keep_n_set_to_10": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" = 10", - "projects_with_expiration_policy_enabled_with_keep_n_set_to_25": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" = 25", - "projects_with_expiration_policy_enabled_with_keep_n_set_to_50": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" = 50", - "projects_with_expiration_policy_enabled_with_keep_n_set_to_100": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" = 100", - "projects_with_expiration_policy_enabled_with_cadence_set_to_1d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"cadence\" = '1d'", - "projects_with_expiration_policy_enabled_with_cadence_set_to_7d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"cadence\" = '7d'", - "projects_with_expiration_policy_enabled_with_cadence_set_to_14d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"cadence\" = '14d'", - "projects_with_expiration_policy_enabled_with_cadence_set_to_1month": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"cadence\" = '1month'", - "projects_with_expiration_policy_enabled_with_cadence_set_to_3month": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"cadence\" = '3month'", - "projects_with_expiration_policy_enabled_with_older_than_set_to_7d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"older_than\" = '7d'", - "projects_with_expiration_policy_enabled_with_older_than_set_to_14d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"older_than\" = '14d'", - "projects_with_expiration_policy_enabled_with_older_than_set_to_30d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"older_than\" = '30d'", - "projects_with_expiration_policy_enabled_with_older_than_set_to_60d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"older_than\" = '60d'", - "projects_with_expiration_policy_enabled_with_older_than_set_to_90d": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"older_than\" = '90d'", - "projects_with_expiration_policy_enabled_with_keep_n_unset": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"keep_n\" IS NULL", - "projects_with_expiration_policy_enabled_with_older_than_unset": "SELECT COUNT(DISTINCT \"container_expiration_policies\".\"project_id\") FROM \"container_expiration_policies\" WHERE \"container_expiration_policies\".\"enabled\" = TRUE AND \"container_expiration_policies\".\"older_than\" IS NULL", - "service_desk_enabled_projects": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"service_desk_enabled\" = TRUE", - "service_desk_issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" WHERE \"issues\".\"project_id\" IN (SELECT \"projects\".\"id\" FROM \"projects\" WHERE \"projects\".\"service_desk_enabled\" = TRUE) AND \"issues\".\"author_id\" = 126 AND \"issues\".\"confidential\" = TRUE", - "in_product_marketing_email_create_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_create_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_create_1_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_create_1_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_create_2_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_create_2_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_verify_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_verify_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_verify_1_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_verify_1_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_verify_2_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_verify_2_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_1_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_1_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_2_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_2_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_1_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_1_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_2_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_2_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_experience_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_short_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_team_short_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_short_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_trial_short_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_admin_verify_0_sent": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "in_product_marketing_email_admin_verify_0_cta_clicked": "SELECT COUNT(\"in_product_marketing_emails\".\"id\") FROM \"in_product_marketing_emails\" WHERE \"in_product_marketing_emails\".\"cta_clicked_at\" IS NOT NULL GROUP BY \"in_product_marketing_emails\".\"track\", \"in_product_marketing_emails\".\"series\"", - "snippets": "SELECT (SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'PersonalSnippet') + (SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'ProjectSnippet')", - "confidential_epics": "SELECT COUNT(\"epics\".\"id\") FROM \"epics\" WHERE \"epics\".\"confidential\" = TRUE", - "epics": "SELECT COUNT(\"epics\".\"id\") FROM \"epics\"", - "epic_issues": "SELECT COUNT(\"epic_issues\".\"id\") FROM \"epic_issues\"", - "geo_nodes": "SELECT COUNT(\"geo_nodes\".\"id\") FROM \"geo_nodes\"", - "geo_event_log_max_id": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "ldap_group_links": "SELECT COUNT(\"ldap_group_links\".\"id\") FROM \"ldap_group_links\"", - "issues_with_health_status": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" WHERE \"issues\".\"health_status\" IS NOT NULL", - "ldap_keys": "SELECT COUNT(\"keys\".\"id\") FROM \"keys\" WHERE \"keys\".\"type\" = 'LDAPKey'", - "ldap_users": "SELECT COUNT(\"users\".\"users.id\") FROM \"users\" INNER JOIN \"identities\" ON \"identities\".\"user_id\" = \"users\".\"id\" WHERE (identities.provider LIKE 'ldap%')", - "merged_merge_requests_using_approval_rules": "SELECT COUNT(\"merge_requests\".\"id\") FROM \"merge_requests\" INNER JOIN \"approval_merge_request_rules\" ON \"approval_merge_request_rules\".\"merge_request_id\" = \"merge_requests\".\"id\" WHERE (\"merge_requests\".\"state_id\" IN (3))", - "merged_merge_requests_using_approval_rules_distinct": "SELECT COUNT(DISTINCT \"merge_requests\".\"id\") FROM \"merge_requests\" INNER JOIN \"approval_merge_request_rules\" ON \"approval_merge_request_rules\".\"merge_request_id\" = \"merge_requests\".\"id\" WHERE (\"merge_requests\".\"state_id\" IN (3))", - "projects_mirrored_with_pipelines_enabled": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" INNER JOIN \"project_features\" ON \"project_features\".\"project_id\" = \"projects\".\"id\" WHERE \"projects\".\"mirror\" = TRUE AND \"projects\".\"mirror_trigger_builds\" = TRUE AND \"project_features\".\"builds_access_level\" = 20", - "projects_reporting_ci_cd_back_to_github": "SELECT COUNT(\"integrations\".\"id\") FROM \"integrations\" WHERE \"integrations\".\"type_new\" = 'Integrations::Github' AND \"integrations\".\"active\" = TRUE", - "status_page_projects": "SELECT COUNT(\"status_page_settings\".\"project_id\") FROM \"status_page_settings\" WHERE \"status_page_settings\".\"enabled\" = TRUE", - "status_page_issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"issues\".\"project_id\" INNER JOIN \"status_page_settings\" ON \"status_page_settings\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"status_page_published_incidents\" ON \"status_page_published_incidents\".\"issue_id\" = \"issues\".\"id\" WHERE \"status_page_settings\".\"enabled\" = TRUE AND (NOT EXISTS (SELECT 1 FROM \"banned_users\" WHERE (issues.author_id = banned_users.user_id))) AND \"issues\".\"confidential\" = FALSE", - "template_repositories": "SELECT (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"namespace_id\" = 0) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" INNER JOIN namespaces ON projects.namespace_id = namespaces.custom_project_templates_group_id)", - "container_scanning_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'container_scanning'", - "dast_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'dast'", - "dependency_scanning_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'dependency_scanning'", - "sast_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'sast'", - "secret_detection_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'secret_detection'", - "coverage_fuzzing_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'coverage_fuzzing'", - "api_fuzzing_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'apifuzzer_fuzz'", - "api_fuzzing_dnd_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'apifuzzer_fuzz_dnd'", - "license_management_jobs": "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" IN ('license_management', 'license_scanning')", - "dast_on_demand_pipelines": "SELECT COUNT(\"ci_pipelines\".\"id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"source\" = 13", - "epics_deepest_relationship_level": 0, - "operations_dashboard_default_dashboard": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"dashboard\" = 8", - "operations_dashboard_users_with_projects_added": "SELECT COUNT(DISTINCT \"users_ops_dashboard_projects\".\"user_id\") FROM \"users_ops_dashboard_projects\" INNER JOIN \"users\" ON \"users\".\"id\" = \"users_ops_dashboard_projects\".\"user_id\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4))", - "projects_with_external_status_checks": "SELECT COUNT(DISTINCT \"external_status_checks\".\"project_id\") FROM \"external_status_checks\"", - "external_status_checks": "SELECT COUNT(\"external_status_checks\".\"id\") FROM \"external_status_checks\"", - "boards": "SELECT COUNT(\"boards\".\"id\") FROM \"boards\"", - "source_code_pushes": 0 - }, - "counts_monthly": { - "deployments": "SELECT COUNT(\"deployments\".\"id\") FROM \"deployments\" WHERE \"deployments\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "successful_deployments": "SELECT COUNT(\"deployments\".\"id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 2 AND \"deployments\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "failed_deployments": "SELECT COUNT(\"deployments\".\"id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 3 AND \"deployments\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "packages": "SELECT COUNT(\"packages_packages\".\"id\") FROM \"packages_packages\" WHERE \"packages_packages\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "personal_snippets": "SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'PersonalSnippet' AND \"snippets\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "project_snippets": "SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'ProjectSnippet' AND \"snippets\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_alerts_created": "SELECT COUNT(DISTINCT \"alert_management_alerts\".\"project_id\") FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "promoted_issues": -1000, - "snippets": "SELECT (SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'PersonalSnippet' AND \"snippets\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00') + (SELECT COUNT(\"snippets\".\"id\") FROM \"snippets\" WHERE \"snippets\".\"type\" = 'ProjectSnippet' AND \"snippets\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00')", - "aggregated_metrics": { - "code_review_group_monthly_active_users": 0, - "code_review_category_monthly_active_users": 0, - "code_review_extension_category_monthly_active_users": 0, - "compliance_features_track_unique_visits_union": 0, - "incident_management_alerts_total_unique_counts": 0, - "incident_management_incidents_total_unique_counts": 0, - "i_testing_paid_monthly_active_user_total": 0 - } - }, - "counts_weekly": { - "aggregated_metrics": { - "code_review_group_monthly_active_users": 0, - "code_review_category_monthly_active_users": 0, - "code_review_extension_category_monthly_active_users": 0, - "compliance_features_track_unique_visits_union": 0, - "incident_management_alerts_total_unique_counts": 0, - "incident_management_incidents_total_unique_counts": 0, - "i_testing_paid_monthly_active_user_total": 0 - } - }, - "instance_auto_devops_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "container_registry_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "dependency_proxy_enabled": false, - "gitlab_shared_runners_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "gravatar_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "ldap_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "mattermost_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "omniauth_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "prometheus_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "prometheus_metrics_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "reply_by_email_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "signup_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "web_ide_clientside_preview_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "grafana_link_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "gitpod_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "elasticsearch_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "license_trial_ends_on": null, - "geo_enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "user_cap_feature_enabled": null, - "git": { - "version": { - "alt_usage_data_block": "non-SQL usage data block" - } - }, - "gitaly": { - "version": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "servers": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "clusters": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "filesystems": { - "alt_usage_data_block": "non-SQL usage data block" - } - }, - "gitlab_pages": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "version": { - "alt_usage_data_block": "non-SQL usage data block" - } - }, - "container_registry_server": { - "vendor": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "version": { - "alt_usage_data_block": "non-SQL usage data block" - } - }, - "database": { - "adapter": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "version": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "pg_system_id": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "flavor": { - "alt_usage_data_block": "non-SQL usage data block" - } - }, - "mail": { - "smtp_server": { - "alt_usage_data_block": "non-SQL usage data block" - } - }, - "advanced_search": { - "distribution": "NA", - "version": "NA", - "build_type": "NA", - "lucene_version": "NA" - }, - "object_store": { - "artifacts": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "object_store": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "direct_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "background_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "provider": { - "alt_usage_data_block": "non-SQL usage data block" - } - } - }, - "external_diffs": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "object_store": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "direct_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "background_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "provider": { - "alt_usage_data_block": "non-SQL usage data block" - } - } - }, - "lfs": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "object_store": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "direct_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "background_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "provider": { - "alt_usage_data_block": "non-SQL usage data block" - } - } - }, - "uploads": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "object_store": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "direct_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "background_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "provider": { - "alt_usage_data_block": "non-SQL usage data block" - } - } - }, - "packages": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "object_store": { - "enabled": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "direct_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "background_upload": { - "alt_usage_data_block": "non-SQL usage data block" - }, - "provider": { - "alt_usage_data_block": "non-SQL usage data block" - } - } - } - }, - "topology": { - "duration_s": 0.0011761150090023875, - "failures": [ - - ] - }, - "usage_activity_by_stage": { - "configure": { - "clusters_management_project": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"management_project_id\" IS NOT NULL", - "clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE", - "clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE", - "clusters_platforms_gke": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" INNER JOIN \"cluster_providers_gcp\" ON \"cluster_providers_gcp\".\"cluster_id\" = \"clusters\".\"id\" WHERE \"clusters\".\"provider_type\" = 1 AND (\"cluster_providers_gcp\".\"status\" IN (3)) AND \"clusters\".\"enabled\" = TRUE", - "clusters_platforms_eks": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" INNER JOIN \"cluster_providers_aws\" ON \"cluster_providers_aws\".\"cluster_id\" = \"clusters\".\"id\" WHERE \"clusters\".\"provider_type\" = 2 AND (\"cluster_providers_aws\".\"status\" IN (3)) AND \"clusters\".\"enabled\" = TRUE", - "clusters_platforms_user": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"provider_type\" = 0 AND \"clusters\".\"enabled\" = TRUE", - "instance_clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 1", - "instance_clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 1", - "group_clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 2", - "group_clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 2", - "project_clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 3", - "project_clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 3", - "projects_slack_notifications_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" AND \"integrations\".\"type_new\" = 'Integrations::Slack'", - "projects_slack_slash_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands'" - }, - "create": { - "deploy_keys": "SELECT COUNT(DISTINCT \"keys\".\"user_id\") FROM \"keys\" WHERE \"keys\".\"type\" = 'DeployKey'", - "keys": "SELECT COUNT(DISTINCT \"keys\".\"user_id\") FROM \"keys\" WHERE (\"keys\".\"type\" IN ('LDAPKey', 'Key') OR \"keys\".\"type\" IS NULL)", - "merge_requests": "SELECT COUNT(DISTINCT \"merge_requests\".\"author_id\") FROM \"merge_requests\"", - "projects_with_disable_overriding_approvers_per_merge_request": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"disable_overriding_approvers_per_merge_request\" = TRUE", - "projects_without_disable_overriding_approvers_per_merge_request": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE (\"projects\".\"disable_overriding_approvers_per_merge_request\" = FALSE OR \"projects\".\"disable_overriding_approvers_per_merge_request\" IS NULL)", - "remote_mirrors": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"remote_mirrors\" ON \"remote_mirrors\".\"project_id\" = \"projects\".\"id\" WHERE \"remote_mirrors\".\"enabled\" = TRUE", - "snippets": "SELECT COUNT(DISTINCT \"snippets\".\"author_id\") FROM \"snippets\"", - "projects_enforcing_code_owner_approval": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"protected_branches\" ON \"protected_branches\".\"project_id\" = \"projects\".\"id\" WHERE \"protected_branches\".\"code_owner_approval_required\" = TRUE", - "projects_with_sectional_code_owner_rules": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_requests.target_project_id\") FROM \"approval_merge_request_rules\" INNER JOIN \"merge_requests\" ON \"merge_requests\".\"id\" = \"approval_merge_request_rules\".\"merge_request_id\" WHERE \"approval_merge_request_rules\".\"rule_type\" = 2 AND \"approval_merge_request_rules\".\"section\" != 'codeowners'", - "merge_requests_with_added_rules": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" LEFT OUTER JOIN \"approval_merge_request_rule_sources\" ON \"approval_merge_request_rule_sources\".\"approval_merge_request_rule_id\" = \"approval_merge_request_rules\".\"id\" WHERE \"approval_merge_request_rule_sources\".\"approval_merge_request_rule_id\" IS NULL", - "merge_requests_with_optional_codeowners": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" WHERE \"approval_merge_request_rules\".\"rule_type\" = 2 AND \"approval_merge_request_rules\".\"approvals_required\" = 0", - "merge_requests_with_overridden_project_rules": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" WHERE ((EXISTS (\n SELECT\n 1\n FROM\n approval_merge_request_rule_sources\n WHERE\n approval_merge_request_rule_sources.approval_merge_request_rule_id = approval_merge_request_rules.id\n AND NOT EXISTS (\n SELECT\n 1\n FROM\n approval_project_rules\n WHERE\n approval_project_rules.id = approval_merge_request_rule_sources.approval_project_rule_id\n AND EXISTS (\n SELECT\n 1\n FROM\n projects\n WHERE\n projects.id = approval_project_rules.project_id\n AND projects.disable_overriding_approvers_per_merge_request = FALSE))))\n OR(\"approval_merge_request_rules\".\"modified_from_project_rule\" = TRUE)\n)", - "merge_requests_with_required_codeowners": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" WHERE \"approval_merge_request_rules\".\"rule_type\" = 2 AND (approvals_required > 0)", - "projects_imported_from_github": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github'", - "projects_with_repositories_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_features\" ON \"project_features\".\"project_id\" = \"projects\".\"id\" WHERE \"project_features\".\"repository_access_level\" = 20", - "protected_branches": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"protected_branches\" ON \"protected_branches\".\"project_id\" = \"projects\".\"id\"", - "users_using_path_locks": "SELECT COUNT(DISTINCT \"path_locks\".\"user_id\") FROM \"path_locks\"", - "users_using_lfs_locks": "SELECT COUNT(DISTINCT \"lfs_file_locks\".\"user_id\") FROM \"lfs_file_locks\"", - "total_number_of_path_locks": "SELECT COUNT(\"path_locks\".\"id\") FROM \"path_locks\"", - "total_number_of_locked_files": "SELECT COUNT(\"lfs_file_locks\".\"id\") FROM \"lfs_file_locks\"", - "approval_project_rules": "SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\"", - "approval_project_rules_with_target_branch": "SELECT COUNT(\"approval_project_rules_protected_branches\".\"approval_project_rule_id\") FROM \"approval_project_rules_protected_branches\"", - "approval_project_rules_with_more_approvers_than_required": "SELECT COUNT(*) FROM (SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\" INNER JOIN approval_project_rules_users ON approval_project_rules_users.approval_project_rule_id = approval_project_rules.id WHERE \"approval_project_rules\".\"rule_type\" = 0 GROUP BY \"approval_project_rules\".\"id\" HAVING (COUNT(approval_project_rules_users) > approvals_required)) subquery", - "approval_project_rules_with_less_approvers_than_required": "SELECT COUNT(*) FROM (SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\" INNER JOIN approval_project_rules_users ON approval_project_rules_users.approval_project_rule_id = approval_project_rules.id WHERE \"approval_project_rules\".\"rule_type\" = 0 GROUP BY \"approval_project_rules\".\"id\" HAVING (COUNT(approval_project_rules_users) < approvals_required)) subquery", - "approval_project_rules_with_exact_required_approvers": "SELECT COUNT(*) FROM (SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\" INNER JOIN approval_project_rules_users ON approval_project_rules_users.approval_project_rule_id = approval_project_rules.id WHERE \"approval_project_rules\".\"rule_type\" = 0 GROUP BY \"approval_project_rules\".\"id\" HAVING (COUNT(approval_project_rules_users) = approvals_required)) subquery" - }, - "enablement": { - }, - "manage": { - "events": -1, - "groups": "SELECT COUNT(DISTINCT \"members\".\"user_id\") FROM \"members\" WHERE \"members\".\"type\" = 'GroupMember' AND \"members\".\"source_type\" = 'Namespace'", - "users_created": "SELECT COUNT(\"users\".\"id\") FROM \"users\"", - "omniauth_providers": [ - - ], - "user_auth_by_provider": { - "two-factor": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'two-factor'", - "two-factor-via-u2f-device": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'two-factor-via-u2f-device'", - "two-factor-via-webauthn-device": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'two-factor-via-webauthn-device'", - "standard": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'standard'" - }, - "unique_users_all_imports": "SELECT (SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(DISTINCT \"bulk_imports\".\"user_id\") FROM \"bulk_imports\") + (SELECT COUNT(DISTINCT \"jira_imports\".\"user_id\") FROM \"jira_imports\") + (SELECT COUNT(DISTINCT \"csv_issue_imports\".\"user_id\") FROM \"csv_issue_imports\") + (SELECT COUNT(DISTINCT \"group_import_states\".\"user_id\") FROM \"group_import_states\")", - "bulk_imports": { - "gitlab_v1": "SELECT COUNT(\"bulk_imports\".\"id\") FROM \"bulk_imports\" WHERE \"bulk_imports\".\"source_type\" = 0" - }, - "project_imports": { - "gitlab_project": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab_project' AND \"projects\".\"import_type\" IS NOT NULL", - "gitlab": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab' AND \"projects\".\"import_type\" IS NOT NULL", - "github": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github' AND \"projects\".\"import_type\" IS NOT NULL", - "bitbucket": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket' AND \"projects\".\"import_type\" IS NOT NULL", - "bitbucket_server": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket_server' AND \"projects\".\"import_type\" IS NOT NULL", - "gitea": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitea' AND \"projects\".\"import_type\" IS NOT NULL", - "git": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'git' AND \"projects\".\"import_type\" IS NOT NULL", - "manifest": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'manifest' AND \"projects\".\"import_type\" IS NOT NULL", - "gitlab_migration": "SELECT COUNT(\"bulk_import_entities\".\"id\") FROM \"bulk_import_entities\" WHERE \"bulk_import_entities\".\"source_type\" = 1", - "total": "SELECT (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab_project' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket_server' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitea' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'git' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'manifest' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"bulk_import_entities\".\"id\") FROM \"bulk_import_entities\" WHERE \"bulk_import_entities\".\"source_type\" = 1)" - }, - "issue_imports": { - "jira": "SELECT COUNT(\"jira_imports\".\"id\") FROM \"jira_imports\"", - "fogbugz": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'fogbugz' AND \"projects\".\"import_type\" IS NOT NULL", - "phabricator": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'phabricator' AND \"projects\".\"import_type\" IS NOT NULL", - "csv": "SELECT COUNT(\"csv_issue_imports\".\"id\") FROM \"csv_issue_imports\"" - }, - "group_imports": { - "group_import": "SELECT COUNT(\"group_import_states\".\"group_id\") FROM \"group_import_states\"", - "gitlab_migration": "SELECT COUNT(\"bulk_import_entities\".\"id\") FROM \"bulk_import_entities\" WHERE \"bulk_import_entities\".\"source_type\" = 0" - }, - "ldap_keys": "SELECT COUNT(DISTINCT \"keys\".\"user_id\") FROM \"keys\" WHERE \"keys\".\"type\" = 'LDAPKey'", - "ldap_users": "SELECT COUNT(DISTINCT \"members\".\"user_id\") FROM \"members\" WHERE \"members\".\"type\" = 'GroupMember' AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"ldap\" = TRUE", - "value_stream_management_customized_group_stages": "SELECT COUNT(\"analytics_cycle_analytics_group_stages\".\"id\") FROM \"analytics_cycle_analytics_group_stages\" WHERE \"analytics_cycle_analytics_group_stages\".\"custom\" = TRUE", - "projects_with_compliance_framework": "SELECT COUNT(\"project_compliance_framework_settings\".\"project_id\") FROM \"project_compliance_framework_settings\"", - "custom_compliance_frameworks": "SELECT COUNT(\"compliance_management_frameworks\".\"id\") FROM \"compliance_management_frameworks\"", - "compliance_frameworks_with_pipeline": "SELECT COUNT(\"compliance_management_frameworks\".\"id\") FROM \"compliance_management_frameworks\" WHERE \"compliance_management_frameworks\".\"pipeline_configuration_full_path\" IS NOT NULL", - "ldap_servers": 0, - "ldap_group_sync_enabled": false, - "ldap_admin_sync_enabled": false, - "group_saml_enabled": false, - "audit_event_destinations": "SELECT COUNT(\"audit_events_external_audit_event_destinations\".\"id\") FROM \"audit_events_external_audit_event_destinations\"", - "groups_with_event_streaming_destinations": "SELECT COUNT(DISTINCT \"namespaces\".\"id\") FROM \"namespaces\" INNER JOIN \"audit_events_external_audit_event_destinations\" ON \"audit_events_external_audit_event_destinations\".\"namespace_id\" = \"namespaces\".\"id\" WHERE \"namespaces\".\"type\" = 'Group'" - }, - "monitor": { - "clusters": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\"", - "clusters_integrations_prometheus": "SELECT COUNT(DISTINCT \"clusters_integration_prometheus\".\"clusters.user_id\") FROM \"clusters_integration_prometheus\" INNER JOIN \"clusters\" ON \"clusters\".\"id\" = \"clusters_integration_prometheus\".\"cluster_id\" WHERE \"clusters_integration_prometheus\".\"enabled\" = TRUE", - "operations_dashboard_default_dashboard": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"dashboard\" = 8", - "projects_with_tracing_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_tracing_settings\" ON \"project_tracing_settings\".\"project_id\" = \"projects\".\"id\"", - "projects_with_error_tracking_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_error_tracking_settings\" ON \"project_error_tracking_settings\".\"project_id\" = \"projects\".\"id\" WHERE \"project_error_tracking_settings\".\"enabled\" = TRUE", - "projects_with_incidents": "SELECT COUNT(DISTINCT \"issues\".\"project_id\") FROM \"issues\" WHERE \"issues\".\"issue_type\" = 1", - "projects_with_alert_incidents": "SELECT COUNT(DISTINCT \"issues\".\"project_id\") FROM \"issues\" INNER JOIN \"alert_management_alerts\" ON \"alert_management_alerts\".\"issue_id\" = \"issues\".\"id\" WHERE \"issues\".\"issue_type\" = 1", - "projects_with_enabled_alert_integrations_histogram": "WITH \"count_cte\" AS MATERIALIZED (SELECT COUNT(*) AS count_grouped FROM \"alert_management_http_integrations\" WHERE \"alert_management_http_integrations\".\"active\" = TRUE GROUP BY \"alert_management_http_integrations\".\"project_id\") SELECT WIDTH_BUCKET(\"count_cte\".\"count_grouped\", 1, 100, 99) AS buckets, \"count_cte\".\"count\" FROM \"count_cte\" GROUP BY buckets ORDER BY buckets", - "operations_dashboard_users_with_projects_added": "SELECT COUNT(DISTINCT \"users_ops_dashboard_projects\".\"user_id\") FROM \"users_ops_dashboard_projects\" INNER JOIN \"users\" ON \"users\".\"id\" = \"users_ops_dashboard_projects\".\"user_id\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4))", - "projects_incident_sla_enabled": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" INNER JOIN \"project_incident_management_settings\" ON \"project_incident_management_settings\".\"project_id\" = \"projects\".\"id\" WHERE \"project_incident_management_settings\".\"sla_timer\" = TRUE" - }, - "package": { - "projects_with_packages": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"packages_packages\" ON \"packages_packages\".\"project_id\" = \"projects\".\"id\"" - }, - "plan": { - "issues": "SELECT COUNT(DISTINCT \"issues\".\"author_id\") FROM \"issues\"", - "notes": "SELECT COUNT(DISTINCT \"notes\".\"author_id\") FROM \"notes\"", - "projects": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\"", - "todos": "SELECT COUNT(DISTINCT \"todos\".\"author_id\") FROM \"todos\"", - "service_desk_enabled_projects": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"service_desk_enabled\" = TRUE", - "service_desk_issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" WHERE \"issues\".\"author_id\" = 126", - "projects_jira_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE", - "projects_jira_dvcs_cloud_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"project_feature_usages\" ON \"project_feature_usages\".\"project_id\" = \"projects\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE AND \"project_feature_usages\".\"jira_dvcs_cloud_last_sync_at\" IS NOT NULL", - "projects_jira_dvcs_server_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"project_feature_usages\" ON \"project_feature_usages\".\"project_id\" = \"projects\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE AND \"project_feature_usages\".\"jira_dvcs_server_last_sync_at\" IS NOT NULL", - "assignee_lists": "SELECT COUNT(DISTINCT \"lists\".\"user_id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 3", - "epics": "SELECT COUNT(DISTINCT \"epics\".\"author_id\") FROM \"epics\"", - "label_lists": "SELECT COUNT(DISTINCT \"lists\".\"user_id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 1", - "milestone_lists": "SELECT COUNT(DISTINCT \"lists\".\"user_id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 4" - }, - "release": { - "deployments": "SELECT COUNT(DISTINCT \"deployments\".\"user_id\") FROM \"deployments\"", - "failed_deployments": "SELECT COUNT(DISTINCT \"deployments\".\"user_id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 3", - "releases": "SELECT COUNT(DISTINCT \"releases\".\"author_id\") FROM \"releases\"", - "successful_deployments": "SELECT COUNT(DISTINCT \"deployments\".\"user_id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 2", - "releases_with_milestones": "SELECT COUNT(DISTINCT \"releases\".\"author_id\") FROM \"releases\" INNER JOIN \"milestone_releases\" ON \"milestone_releases\".\"release_id\" = \"releases\".\"id\"", - "projects_mirrored_with_pipelines_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_features\" ON \"project_features\".\"project_id\" = \"projects\".\"id\" WHERE \"projects\".\"mirror\" = TRUE AND \"projects\".\"mirror_trigger_builds\" = TRUE AND \"project_features\".\"builds_access_level\" = 20", - "releases_with_group_milestones": "SELECT COUNT(DISTINCT \"releases\".\"author_id\") FROM \"releases\" INNER JOIN \"milestone_releases\" ON \"milestone_releases\".\"release_id\" = \"releases\".\"id\" INNER JOIN \"milestones\" ON \"milestones\".\"id\" = \"milestone_releases\".\"milestone_id\" WHERE \"milestones\".\"group_id\" IS NOT NULL" - }, - "secure": { - "user_preferences_group_overview_security_dashboard": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"group_view\" = 2", - "user_container_scanning_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'container_scanning'", - "user_dast_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'dast'", - "user_dependency_scanning_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'dependency_scanning'", - "user_license_management_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'license_management'", - "user_sast_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'sast'", - "user_secret_detection_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'secret_detection'", - "user_coverage_fuzzing_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'coverage_fuzzing'", - "user_api_fuzzing_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'apifuzzer_fuzz'", - "user_api_fuzzing_dnd_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = 'apifuzzer_fuzz_dnd'", - "sast_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 1", - "dependency_scanning_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 2", - "container_scanning_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 3", - "dast_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 4", - "secret_detection_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 5", - "coverage_fuzzing_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 6", - "api_fuzzing_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 7", - "cluster_image_scanning_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 8", - "user_unique_users_all_secure_scanners": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" IN ('container_scanning', 'dast', 'dependency_scanning', 'license_management', 'license_scanning', 'sast', 'secret_detection', 'coverage_fuzzing', 'apifuzzer_fuzz', 'apifuzzer_fuzz_dnd')" - }, - "verify": { - "ci_builds": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build'", - "ci_external_pipelines": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"source\" = 6", - "ci_internal_pipelines": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE (\"ci_pipelines\".\"source\" IN (1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15) OR \"ci_pipelines\".\"source\" IS NULL)", - "ci_pipeline_config_auto_devops": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"config_source\" = 2", - "ci_pipeline_config_repository": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"config_source\" = 1", - "ci_pipeline_schedules": "SELECT COUNT(DISTINCT \"ci_pipeline_schedules\".\"owner_id\") FROM \"ci_pipeline_schedules\"", - "ci_pipelines": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\"", - "ci_triggers": "SELECT COUNT(DISTINCT \"ci_triggers\".\"owner_id\") FROM \"ci_triggers\"", - "projects_reporting_ci_cd_back_to_github": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" AND \"integrations\".\"type_new\" = 'Integrations::Github' WHERE \"integrations\".\"type_new\" = 'Integrations::Github' AND \"integrations\".\"pipeline_events\" = TRUE AND \"integrations\".\"active\" = TRUE" - } - }, - "usage_activity_by_stage_monthly": { - "configure": { - "clusters_management_project": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"management_project_id\" IS NOT NULL AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "clusters_platforms_gke": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" INNER JOIN \"cluster_providers_gcp\" ON \"cluster_providers_gcp\".\"cluster_id\" = \"clusters\".\"id\" WHERE \"clusters\".\"provider_type\" = 1 AND (\"cluster_providers_gcp\".\"status\" IN (3)) AND \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "clusters_platforms_eks": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" INNER JOIN \"cluster_providers_aws\" ON \"cluster_providers_aws\".\"cluster_id\" = \"clusters\".\"id\" WHERE \"clusters\".\"provider_type\" = 2 AND (\"cluster_providers_aws\".\"status\" IN (3)) AND \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "clusters_platforms_user": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"provider_type\" = 0 AND \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "instance_clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 1 AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "instance_clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 1 AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "group_clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 2 AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "group_clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 2 AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "project_clusters_disabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = FALSE AND \"clusters\".\"cluster_type\" = 3 AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "project_clusters_enabled": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"enabled\" = TRUE AND \"clusters\".\"cluster_type\" = 3 AND \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_slack_notifications_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" AND \"integrations\".\"type_new\" = 'Integrations::Slack' WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_slack_slash_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" AND \"integrations\".\"type_new\" = 'Integrations::SlackSlashCommands' WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "create": { - "deploy_keys": "SELECT COUNT(DISTINCT \"keys\".\"user_id\") FROM \"keys\" WHERE \"keys\".\"type\" = 'DeployKey' AND \"keys\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "keys": "SELECT COUNT(DISTINCT \"keys\".\"user_id\") FROM \"keys\" WHERE (\"keys\".\"type\" IN ('LDAPKey', 'Key') OR \"keys\".\"type\" IS NULL) AND \"keys\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "merge_requests": "SELECT COUNT(DISTINCT \"merge_requests\".\"author_id\") FROM \"merge_requests\" WHERE \"merge_requests\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_disable_overriding_approvers_per_merge_request": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"projects\".\"disable_overriding_approvers_per_merge_request\" = TRUE", - "projects_without_disable_overriding_approvers_per_merge_request": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND (\"projects\".\"disable_overriding_approvers_per_merge_request\" = FALSE OR \"projects\".\"disable_overriding_approvers_per_merge_request\" IS NULL)", - "remote_mirrors": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"remote_mirrors\" ON \"remote_mirrors\".\"project_id\" = \"projects\".\"id\" WHERE \"remote_mirrors\".\"enabled\" = TRUE AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "snippets": "SELECT COUNT(DISTINCT \"snippets\".\"author_id\") FROM \"snippets\" WHERE \"snippets\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "merge_requests_users": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_project_repo": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_design_management": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_wiki_repo": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_git_write": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_web_ide_edit": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_sfe_edit": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_snippet_editor_edit": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_sse_edit": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "action_monthly_active_users_ide_edit": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "projects_enforcing_code_owner_approval": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"protected_branches\" ON \"protected_branches\".\"project_id\" = \"projects\".\"id\" WHERE \"protected_branches\".\"code_owner_approval_required\" = TRUE AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_sectional_code_owner_rules": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_requests.target_project_id\") FROM \"approval_merge_request_rules\" INNER JOIN \"merge_requests\" ON \"merge_requests\".\"id\" = \"approval_merge_request_rules\".\"merge_request_id\" WHERE \"approval_merge_request_rules\".\"rule_type\" = 2 AND \"approval_merge_request_rules\".\"section\" != 'codeowners' AND \"approval_merge_request_rules\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "merge_requests_with_added_rules": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" LEFT OUTER JOIN \"approval_merge_request_rule_sources\" ON \"approval_merge_request_rule_sources\".\"approval_merge_request_rule_id\" = \"approval_merge_request_rules\".\"id\" WHERE \"approval_merge_request_rules\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"approval_merge_request_rule_sources\".\"approval_merge_request_rule_id\" IS NULL", - "merge_requests_with_optional_codeowners": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" WHERE \"approval_merge_request_rules\".\"rule_type\" = 2 AND \"approval_merge_request_rules\".\"approvals_required\" = 0 AND \"approval_merge_request_rules\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "merge_requests_with_overridden_project_rules": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" WHERE \"approval_merge_request_rules\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND ((EXISTS (\n SELECT\n 1\n FROM\n approval_merge_request_rule_sources\n WHERE\n approval_merge_request_rule_sources.approval_merge_request_rule_id = approval_merge_request_rules.id\n AND NOT EXISTS (\n SELECT\n 1\n FROM\n approval_project_rules\n WHERE\n approval_project_rules.id = approval_merge_request_rule_sources.approval_project_rule_id\n AND EXISTS (\n SELECT\n 1\n FROM\n projects\n WHERE\n projects.id = approval_project_rules.project_id\n AND projects.disable_overriding_approvers_per_merge_request = FALSE))))\n OR(\"approval_merge_request_rules\".\"modified_from_project_rule\" = TRUE)\n)", - "merge_requests_with_required_codeowners": "SELECT COUNT(DISTINCT \"approval_merge_request_rules\".\"merge_request_id\") FROM \"approval_merge_request_rules\" WHERE \"approval_merge_request_rules\".\"rule_type\" = 2 AND (approvals_required > 0) AND \"approval_merge_request_rules\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_imported_from_github": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github' AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_repositories_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_features\" ON \"project_features\".\"project_id\" = \"projects\".\"id\" WHERE \"project_features\".\"repository_access_level\" = 20 AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "protected_branches": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"protected_branches\" ON \"protected_branches\".\"project_id\" = \"projects\".\"id\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "users_using_path_locks": "SELECT COUNT(DISTINCT \"path_locks\".\"user_id\") FROM \"path_locks\" WHERE \"path_locks\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "users_using_lfs_locks": "SELECT COUNT(DISTINCT \"lfs_file_locks\".\"user_id\") FROM \"lfs_file_locks\" WHERE \"lfs_file_locks\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "total_number_of_path_locks": "SELECT COUNT(\"path_locks\".\"id\") FROM \"path_locks\" WHERE \"path_locks\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "total_number_of_locked_files": "SELECT COUNT(\"lfs_file_locks\".\"id\") FROM \"lfs_file_locks\" WHERE \"lfs_file_locks\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "approval_project_rules": "SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\"", - "approval_project_rules_with_target_branch": "SELECT COUNT(\"approval_project_rules_protected_branches\".\"approval_project_rule_id\") FROM \"approval_project_rules_protected_branches\"", - "approval_project_rules_with_more_approvers_than_required": "SELECT COUNT(*) FROM (SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\" INNER JOIN approval_project_rules_users ON approval_project_rules_users.approval_project_rule_id = approval_project_rules.id WHERE \"approval_project_rules\".\"rule_type\" = 0 GROUP BY \"approval_project_rules\".\"id\" HAVING (COUNT(approval_project_rules_users) > approvals_required)) subquery", - "approval_project_rules_with_less_approvers_than_required": "SELECT COUNT(*) FROM (SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\" INNER JOIN approval_project_rules_users ON approval_project_rules_users.approval_project_rule_id = approval_project_rules.id WHERE \"approval_project_rules\".\"rule_type\" = 0 GROUP BY \"approval_project_rules\".\"id\" HAVING (COUNT(approval_project_rules_users) < approvals_required)) subquery", - "approval_project_rules_with_exact_required_approvers": "SELECT COUNT(*) FROM (SELECT COUNT(\"approval_project_rules\".\"id\") FROM \"approval_project_rules\" INNER JOIN approval_project_rules_users ON approval_project_rules_users.approval_project_rule_id = approval_project_rules.id WHERE \"approval_project_rules\".\"rule_type\" = 0 GROUP BY \"approval_project_rules\".\"id\" HAVING (COUNT(approval_project_rules_users) = approvals_required)) subquery" - }, - "enablement": { - }, - "manage": { - "events": "SELECT COUNT(DISTINCT \"events\".\"author_id\") FROM \"events\" WHERE \"events\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "groups": "SELECT COUNT(DISTINCT \"members\".\"user_id\") FROM \"members\" WHERE \"members\".\"type\" = 'GroupMember' AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "users_created": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE \"users\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "omniauth_providers": [ - - ], - "user_auth_by_provider": { - "two-factor": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'two-factor' AND \"authentication_events\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "two-factor-via-u2f-device": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'two-factor-via-u2f-device' AND \"authentication_events\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "two-factor-via-webauthn-device": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'two-factor-via-webauthn-device' AND \"authentication_events\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "standard": "SELECT COUNT(DISTINCT \"authentication_events\".\"user_id\") FROM \"authentication_events\" WHERE \"authentication_events\".\"result\" = 1 AND \"authentication_events\".\"provider\" = 'standard' AND \"authentication_events\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "unique_users_all_imports": "SELECT (SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(DISTINCT \"bulk_imports\".\"user_id\") FROM \"bulk_imports\" WHERE \"bulk_imports\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00') + (SELECT COUNT(DISTINCT \"jira_imports\".\"user_id\") FROM \"jira_imports\" WHERE \"jira_imports\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00') + (SELECT COUNT(DISTINCT \"csv_issue_imports\".\"user_id\") FROM \"csv_issue_imports\" WHERE \"csv_issue_imports\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00') + (SELECT COUNT(DISTINCT \"group_import_states\".\"user_id\") FROM \"group_import_states\" WHERE \"group_import_states\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00')", - "bulk_imports": { - "gitlab_v1": "SELECT COUNT(\"bulk_imports\".\"id\") FROM \"bulk_imports\" WHERE \"bulk_imports\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"bulk_imports\".\"source_type\" = 0" - }, - "project_imports": { - "gitlab_project": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab_project' AND \"projects\".\"import_type\" IS NOT NULL", - "gitlab": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab' AND \"projects\".\"import_type\" IS NOT NULL", - "github": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github' AND \"projects\".\"import_type\" IS NOT NULL", - "bitbucket": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket' AND \"projects\".\"import_type\" IS NOT NULL", - "bitbucket_server": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket_server' AND \"projects\".\"import_type\" IS NOT NULL", - "gitea": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitea' AND \"projects\".\"import_type\" IS NOT NULL", - "git": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'git' AND \"projects\".\"import_type\" IS NOT NULL", - "manifest": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'manifest' AND \"projects\".\"import_type\" IS NOT NULL", - "gitlab_migration": "SELECT COUNT(\"bulk_import_entities\".\"id\") FROM \"bulk_import_entities\" WHERE \"bulk_import_entities\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"bulk_import_entities\".\"source_type\" = 1", - "total": "SELECT (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab_project' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitlab' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'github' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'bitbucket_server' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'gitea' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'git' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'manifest' AND \"projects\".\"import_type\" IS NOT NULL) + (SELECT COUNT(\"bulk_import_entities\".\"id\") FROM \"bulk_import_entities\" WHERE \"bulk_import_entities\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"bulk_import_entities\".\"source_type\" = 1)" - }, - "issue_imports": { - "jira": "SELECT COUNT(\"jira_imports\".\"id\") FROM \"jira_imports\" WHERE \"jira_imports\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "fogbugz": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'fogbugz' AND \"projects\".\"import_type\" IS NOT NULL", - "phabricator": "SELECT COUNT(\"projects\".\"id\") FROM \"projects\" WHERE \"projects\".\"import_type\" = 'phabricator' AND \"projects\".\"import_type\" IS NOT NULL", - "csv": "SELECT COUNT(\"csv_issue_imports\".\"id\") FROM \"csv_issue_imports\" WHERE \"csv_issue_imports\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "group_imports": { - "group_import": "SELECT COUNT(\"group_import_states\".\"group_id\") FROM \"group_import_states\" WHERE \"group_import_states\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "gitlab_migration": "SELECT COUNT(\"bulk_import_entities\".\"id\") FROM \"bulk_import_entities\" WHERE \"bulk_import_entities\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"bulk_import_entities\".\"source_type\" = 0" - }, - "ldap_keys": "SELECT COUNT(DISTINCT \"keys\".\"user_id\") FROM \"keys\" WHERE \"keys\".\"type\" = 'LDAPKey' AND \"keys\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ldap_users": "SELECT COUNT(DISTINCT \"members\".\"user_id\") FROM \"members\" WHERE \"members\".\"type\" = 'GroupMember' AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"ldap\" = TRUE AND \"members\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "value_stream_management_customized_group_stages": "SELECT COUNT(\"analytics_cycle_analytics_group_stages\".\"id\") FROM \"analytics_cycle_analytics_group_stages\" WHERE \"analytics_cycle_analytics_group_stages\".\"custom\" = TRUE", - "projects_with_compliance_framework": "SELECT COUNT(\"project_compliance_framework_settings\".\"project_id\") FROM \"project_compliance_framework_settings\"", - "custom_compliance_frameworks": "SELECT COUNT(\"compliance_management_frameworks\".\"id\") FROM \"compliance_management_frameworks\"", - "compliance_frameworks_with_pipeline": "SELECT COUNT(\"compliance_management_frameworks\".\"id\") FROM \"compliance_management_frameworks\" WHERE \"compliance_management_frameworks\".\"pipeline_configuration_full_path\" IS NOT NULL", - "ldap_servers": 0, - "ldap_group_sync_enabled": false, - "ldap_admin_sync_enabled": false, - "group_saml_enabled": false, - "audit_event_destinations": "SELECT COUNT(\"audit_events_external_audit_event_destinations\".\"id\") FROM \"audit_events_external_audit_event_destinations\" WHERE \"audit_events_external_audit_event_destinations\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "groups_with_event_streaming_destinations": "SELECT COUNT(DISTINCT \"namespaces\".\"id\") FROM \"namespaces\" INNER JOIN \"audit_events_external_audit_event_destinations\" ON \"audit_events_external_audit_event_destinations\".\"namespace_id\" = \"namespaces\".\"id\" WHERE \"namespaces\".\"type\" = 'Group' AND \"namespaces\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "monitor": { - "clusters": "SELECT COUNT(DISTINCT \"clusters\".\"user_id\") FROM \"clusters\" WHERE \"clusters\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "clusters_integrations_prometheus": "SELECT COUNT(DISTINCT \"clusters_integration_prometheus\".\"clusters.user_id\") FROM \"clusters_integration_prometheus\" INNER JOIN \"clusters\" ON \"clusters\".\"id\" = \"clusters_integration_prometheus\".\"cluster_id\" WHERE \"clusters_integration_prometheus\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"clusters_integration_prometheus\".\"enabled\" = TRUE", - "operations_dashboard_default_dashboard": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"dashboard\" = 8 AND \"users\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_tracing_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_tracing_settings\" ON \"project_tracing_settings\".\"project_id\" = \"projects\".\"id\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_error_tracking_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_error_tracking_settings\" ON \"project_error_tracking_settings\".\"project_id\" = \"projects\".\"id\" WHERE \"project_error_tracking_settings\".\"enabled\" = TRUE AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_incidents": "SELECT COUNT(DISTINCT \"issues\".\"project_id\") FROM \"issues\" WHERE \"issues\".\"issue_type\" = 1 AND \"issues\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_with_alert_incidents": "SELECT COUNT(DISTINCT \"issues\".\"project_id\") FROM \"issues\" INNER JOIN \"alert_management_alerts\" ON \"alert_management_alerts\".\"issue_id\" = \"issues\".\"id\" WHERE \"issues\".\"issue_type\" = 1 AND \"issues\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "operations_dashboard_users_with_projects_added": "SELECT COUNT(DISTINCT \"users_ops_dashboard_projects\".\"user_id\") FROM \"users_ops_dashboard_projects\" INNER JOIN \"users\" ON \"users\".\"id\" = \"users_ops_dashboard_projects\".\"user_id\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users_ops_dashboard_projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "package": { - "projects_with_packages": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"packages_packages\" ON \"packages_packages\".\"project_id\" = \"projects\".\"id\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "plan": { - "issues": "SELECT COUNT(DISTINCT \"issues\".\"author_id\") FROM \"issues\" WHERE \"issues\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "notes": "SELECT COUNT(DISTINCT \"notes\".\"author_id\") FROM \"notes\" WHERE \"notes\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "todos": "SELECT COUNT(DISTINCT \"todos\".\"author_id\") FROM \"todos\" WHERE \"todos\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "service_desk_enabled_projects": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" WHERE \"projects\".\"service_desk_enabled\" = TRUE AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "service_desk_issues": "SELECT COUNT(\"issues\".\"id\") FROM \"issues\" WHERE \"issues\".\"author_id\" = 126 AND \"issues\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_jira_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_jira_dvcs_cloud_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"project_feature_usages\" ON \"project_feature_usages\".\"project_id\" = \"projects\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE AND \"project_feature_usages\".\"jira_dvcs_cloud_last_sync_at\" IS NOT NULL AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_jira_dvcs_server_active": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"project_feature_usages\" ON \"project_feature_usages\".\"project_id\" = \"projects\".\"id\" WHERE \"integrations\".\"type_new\" = 'Integrations::Jira' AND \"integrations\".\"active\" = TRUE AND \"project_feature_usages\".\"jira_dvcs_server_last_sync_at\" IS NOT NULL AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "assignee_lists": "SELECT COUNT(DISTINCT \"lists\".\"user_id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 3 AND \"lists\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "epics": "SELECT COUNT(DISTINCT \"epics\".\"author_id\") FROM \"epics\" WHERE \"epics\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "label_lists": "SELECT COUNT(DISTINCT \"lists\".\"user_id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 1 AND \"lists\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "milestone_lists": "SELECT COUNT(DISTINCT \"lists\".\"user_id\") FROM \"lists\" WHERE \"lists\".\"list_type\" = 4 AND \"lists\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "release": { - "deployments": "SELECT COUNT(DISTINCT \"deployments\".\"user_id\") FROM \"deployments\" WHERE \"deployments\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "failed_deployments": "SELECT COUNT(DISTINCT \"deployments\".\"user_id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 3 AND \"deployments\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "releases": "SELECT COUNT(DISTINCT \"releases\".\"author_id\") FROM \"releases\" WHERE \"releases\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "successful_deployments": "SELECT COUNT(DISTINCT \"deployments\".\"user_id\") FROM \"deployments\" WHERE \"deployments\".\"status\" = 2 AND \"deployments\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "releases_with_milestones": "SELECT COUNT(DISTINCT \"releases\".\"author_id\") FROM \"releases\" INNER JOIN \"milestone_releases\" ON \"milestone_releases\".\"release_id\" = \"releases\".\"id\" WHERE \"releases\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_mirrored_with_pipelines_enabled": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"project_features\" ON \"project_features\".\"project_id\" = \"projects\".\"id\" WHERE \"projects\".\"mirror\" = TRUE AND \"projects\".\"mirror_trigger_builds\" = TRUE AND \"project_features\".\"builds_access_level\" = 20 AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "releases_with_group_milestones": "SELECT COUNT(DISTINCT \"releases\".\"author_id\") FROM \"releases\" INNER JOIN \"milestone_releases\" ON \"milestone_releases\".\"release_id\" = \"releases\".\"id\" INNER JOIN \"milestones\" ON \"milestones\".\"id\" = \"milestone_releases\".\"milestone_id\" WHERE \"milestones\".\"group_id\" IS NOT NULL AND \"releases\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "secure": { - "user_preferences_group_overview_security_dashboard": "SELECT COUNT(\"users\".\"id\") FROM \"users\" WHERE (\"users\".\"state\" IN ('active')) AND (\"users\".\"user_type\" IS NULL OR \"users\".\"user_type\" IN (6, 4)) AND \"users\".\"group_view\" = 2 AND \"users\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "user_container_scanning_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'container_scanning'", - "user_dast_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'dast'", - "user_dependency_scanning_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'dependency_scanning'", - "user_license_management_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'license_management'", - "user_sast_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'sast'", - "user_secret_detection_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'secret_detection'", - "user_coverage_fuzzing_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'coverage_fuzzing'", - "user_api_fuzzing_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'apifuzzer_fuzz'", - "user_api_fuzzing_dnd_jobs": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00' AND \"ci_builds\".\"name\" = 'apifuzzer_fuzz_dnd'", - "sast_pipeline": 0, - "dependency_scanning_pipeline": 0, - "container_scanning_pipeline": 0, - "dast_pipeline": 0, - "secret_detection_pipeline": 0, - "coverage_fuzzing_pipeline": 0, - "api_fuzzing_pipeline": 0, - "cluster_image_scanning_pipeline": 0, - "sast_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 1 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "dependency_scanning_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 2 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "container_scanning_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 3 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "dast_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 4 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "secret_detection_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 5 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "coverage_fuzzing_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 6 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "api_fuzzing_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 7 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "cluster_image_scanning_scans": "SELECT COUNT(\"security_scans\".\"build_id\") FROM \"security_scans\" WHERE \"security_scans\".\"scan_type\" = 8 AND \"security_scans\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "user_unique_users_all_secure_scanners": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" IN ('container_scanning', 'dast', 'dependency_scanning', 'license_management', 'license_scanning', 'sast', 'secret_detection', 'coverage_fuzzing', 'apifuzzer_fuzz', 'apifuzzer_fuzz_dnd') AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - }, - "verify": { - "ci_builds": "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_external_pipelines": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"source\" = 6 AND \"ci_pipelines\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_internal_pipelines": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE (\"ci_pipelines\".\"source\" IN (1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15) OR \"ci_pipelines\".\"source\" IS NULL) AND \"ci_pipelines\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_pipeline_config_auto_devops": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"config_source\" = 2 AND \"ci_pipelines\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_pipeline_config_repository": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"config_source\" = 1 AND \"ci_pipelines\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_pipeline_schedules": "SELECT COUNT(DISTINCT \"ci_pipeline_schedules\".\"owner_id\") FROM \"ci_pipeline_schedules\" WHERE \"ci_pipeline_schedules\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_pipelines": "SELECT COUNT(DISTINCT \"ci_pipelines\".\"user_id\") FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "ci_triggers": "SELECT COUNT(DISTINCT \"ci_triggers\".\"owner_id\") FROM \"ci_triggers\" WHERE \"ci_triggers\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'", - "projects_reporting_ci_cd_back_to_github": "SELECT COUNT(DISTINCT \"projects\".\"creator_id\") FROM \"projects\" INNER JOIN \"integrations\" ON \"integrations\".\"project_id\" = \"projects\".\"id\" AND \"integrations\".\"type_new\" = 'Integrations::Github' WHERE \"integrations\".\"type_new\" = 'Integrations::Github' AND \"integrations\".\"pipeline_events\" = TRUE AND \"integrations\".\"active\" = TRUE AND \"projects\".\"created_at\" BETWEEN '2020-12-02 00:00:00' AND '2020-12-30 00:00:00'" - } - }, - "analytics_unique_visits": { - "users_viewing_analytics_group_devops_adoption": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_analytics_dev_ops_adoption": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_analytics_dev_ops_score": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_merge_request": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_analytics_instance_statistics": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "g_analytics_contribution": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "g_analytics_insights": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "g_analytics_issues": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "g_analytics_productivity": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "g_analytics_valuestream": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_pipelines": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_code_reviews": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_valuestream": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_insights": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_issues": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_repo": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_analytics_cohorts": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_ci_cd_pipelines": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_ci_cd_deployment_frequency": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "p_analytics_ci_cd_lead_time": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "analytics_unique_visits_for_any_target": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "analytics_unique_visits_for_any_target_monthly": { - "redis_usage_data_block": "non-SQL usage data block" - } - }, - "compliance_unique_visits": { - "g_compliance_dashboard": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "g_compliance_audit_events": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_compliance_audit_events": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_compliance_credential_inventory": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "a_compliance_audit_events_api": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "compliance_unique_visits_for_any_target": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "compliance_unique_visits_for_any_target_monthly": { - "redis_usage_data_block": "non-SQL usage data block" - } - }, - "search_unique_visits": { - "i_search_total": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_search_advanced": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "i_search_paid": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "search_unique_visits_for_any_target_weekly": { - "redis_usage_data_block": "non-SQL usage data block" - }, - "search_unique_visits_for_any_target_monthly": { - "redis_usage_data_block": "non-SQL usage data block" - } - }, - "redis_hll_counters": { - "error_tracking": { - "error_tracking_view_details_weekly": 0, - "error_tracking_view_details_monthly": 0, - "error_tracking_view_list_weekly": 0, - "error_tracking_view_list_monthly": 0, - "error_tracking_total_unique_counts_weekly": 0, - "error_tracking_total_unique_counts_monthly": 0 - }, - "epics_usage": { - "g_project_management_epic_created_weekly": 0, - "g_project_management_epic_created_monthly": 0, - "project_management_users_unchecking_epic_task_weekly": 0, - "project_management_users_unchecking_epic_task_monthly": 0, - "project_management_users_checking_epic_task_weekly": 0, - "project_management_users_checking_epic_task_monthly": 0, - "g_project_management_users_updating_epic_titles_weekly": 0, - "g_project_management_users_updating_epic_titles_monthly": 0, - "g_project_management_users_updating_epic_descriptions_weekly": 0, - "g_project_management_users_updating_epic_descriptions_monthly": 0, - "g_project_management_users_creating_epic_notes_weekly": 0, - "g_project_management_users_creating_epic_notes_monthly": 0, - "g_project_management_users_updating_epic_notes_weekly": 0, - "g_project_management_users_updating_epic_notes_monthly": 0, - "g_project_management_users_destroying_epic_notes_weekly": 0, - "g_project_management_users_destroying_epic_notes_monthly": 0, - "g_project_management_users_awarding_epic_emoji_weekly": 0, - "g_project_management_users_awarding_epic_emoji_monthly": 0, - "g_project_management_users_removing_epic_emoji_weekly": 0, - "g_project_management_users_removing_epic_emoji_monthly": 0, - "g_project_management_users_setting_epic_start_date_as_fixed_weekly": 0, - "g_project_management_users_setting_epic_start_date_as_fixed_monthly": 0, - "g_project_management_users_updating_fixed_epic_start_date_weekly": 0, - "g_project_management_users_updating_fixed_epic_start_date_monthly": 0, - "g_project_management_users_setting_epic_start_date_as_inherited_weekly": 0, - "g_project_management_users_setting_epic_start_date_as_inherited_monthly": 0, - "g_project_management_users_setting_epic_due_date_as_fixed_weekly": 0, - "g_project_management_users_setting_epic_due_date_as_fixed_monthly": 0, - "g_project_management_users_updating_fixed_epic_due_date_weekly": 0, - "g_project_management_users_updating_fixed_epic_due_date_monthly": 0, - "g_project_management_users_setting_epic_due_date_as_inherited_weekly": 0, - "g_project_management_users_setting_epic_due_date_as_inherited_monthly": 0, - "g_project_management_epic_issue_added_weekly": 0, - "g_project_management_epic_issue_added_monthly": 0, - "g_project_management_epic_issue_removed_weekly": 0, - "g_project_management_epic_issue_removed_monthly": 0, - "g_project_management_epic_issue_moved_from_project_weekly": 0, - "g_project_management_epic_issue_moved_from_project_monthly": 0, - "g_project_management_users_updating_epic_parent_weekly": 0, - "g_project_management_users_updating_epic_parent_monthly": 0, - "g_project_management_epic_closed_weekly": 0, - "g_project_management_epic_closed_monthly": 0, - "g_project_management_epic_reopened_weekly": 0, - "g_project_management_epic_reopened_monthly": 0, - "g_project_management_issue_promoted_to_epic_weekly": 0, - "g_project_management_issue_promoted_to_epic_monthly": 0, - "g_project_management_users_setting_epic_confidential_weekly": 0, - "g_project_management_users_setting_epic_confidential_monthly": 0, - "g_project_management_users_setting_epic_visible_weekly": 0, - "g_project_management_users_setting_epic_visible_monthly": 0, - "g_project_management_epic_users_changing_labels_weekly": 0, - "g_project_management_epic_users_changing_labels_monthly": 0, - "g_project_management_epic_destroyed_weekly": 0, - "g_project_management_epic_destroyed_monthly": 0, - "g_project_management_epic_cross_referenced_weekly": 0, - "g_project_management_epic_cross_referenced_monthly": 0, - "g_project_management_users_epic_issue_added_from_epic_weekly": 0, - "g_project_management_users_epic_issue_added_from_epic_monthly": 0, - "epics_usage_total_unique_counts_weekly": 0, - "epics_usage_total_unique_counts_monthly": 0 - }, - "importer": { - "github_import_project_start_weekly": 0, - "github_import_project_start_monthly": 0, - "github_import_project_success_weekly": 0, - "github_import_project_success_monthly": 0, - "github_import_project_failure_weekly": 0, - "github_import_project_failure_monthly": 0 - }, - "ci_users": { - "ci_users_executing_deployment_job_weekly": 0, - "ci_users_executing_deployment_job_monthly": 0 - }, - "analytics": { - "users_viewing_analytics_group_devops_adoption_weekly": 0, - "users_viewing_analytics_group_devops_adoption_monthly": 0, - "i_analytics_dev_ops_adoption_weekly": 0, - "i_analytics_dev_ops_adoption_monthly": 0, - "i_analytics_dev_ops_score_weekly": 0, - "i_analytics_dev_ops_score_monthly": 0, - "p_analytics_merge_request_weekly": 0, - "p_analytics_merge_request_monthly": 0, - "i_analytics_instance_statistics_weekly": 0, - "i_analytics_instance_statistics_monthly": 0, - "g_analytics_contribution_weekly": 0, - "g_analytics_contribution_monthly": 0, - "g_analytics_insights_weekly": 0, - "g_analytics_insights_monthly": 0, - "g_analytics_issues_weekly": 0, - "g_analytics_issues_monthly": 0, - "g_analytics_productivity_weekly": 0, - "g_analytics_productivity_monthly": 0, - "g_analytics_valuestream_weekly": 0, - "g_analytics_valuestream_monthly": 0, - "p_analytics_pipelines_weekly": 0, - "p_analytics_pipelines_monthly": 0, - "p_analytics_code_reviews_weekly": 0, - "p_analytics_code_reviews_monthly": 0, - "p_analytics_valuestream_weekly": 0, - "p_analytics_valuestream_monthly": 0, - "p_analytics_insights_weekly": 0, - "p_analytics_insights_monthly": 0, - "p_analytics_issues_weekly": 0, - "p_analytics_issues_monthly": 0, - "p_analytics_repo_weekly": 0, - "p_analytics_repo_monthly": 0, - "i_analytics_cohorts_weekly": 0, - "i_analytics_cohorts_monthly": 0, - "p_analytics_ci_cd_pipelines_weekly": 0, - "p_analytics_ci_cd_pipelines_monthly": 0, - "p_analytics_ci_cd_deployment_frequency_weekly": 0, - "p_analytics_ci_cd_deployment_frequency_monthly": 0, - "p_analytics_ci_cd_lead_time_weekly": 0, - "p_analytics_ci_cd_lead_time_monthly": 0, - "analytics_total_unique_counts_weekly": 0, - "analytics_total_unique_counts_monthly": 0 - }, - "epic_boards_usage": { - "g_project_management_users_creating_epic_boards_weekly": 0, - "g_project_management_users_creating_epic_boards_monthly": 0, - "g_project_management_users_viewing_epic_boards_weekly": 0, - "g_project_management_users_viewing_epic_boards_monthly": 0, - "g_project_management_users_updating_epic_board_names_weekly": 0, - "g_project_management_users_updating_epic_board_names_monthly": 0, - "epic_boards_usage_total_unique_counts_weekly": 0, - "epic_boards_usage_total_unique_counts_monthly": 0 - }, - "quickactions": { - "i_quickactions_approve_weekly": 0, - "i_quickactions_approve_monthly": 0, - "i_quickactions_unapprove_weekly": 0, - "i_quickactions_unapprove_monthly": 0, - "i_quickactions_assign_single_weekly": 0, - "i_quickactions_assign_single_monthly": 0, - "i_quickactions_assign_multiple_weekly": 0, - "i_quickactions_assign_multiple_monthly": 0, - "i_quickactions_assign_self_weekly": 0, - "i_quickactions_assign_self_monthly": 0, - "i_quickactions_assign_reviewer_weekly": 0, - "i_quickactions_assign_reviewer_monthly": 0, - "i_quickactions_award_weekly": 0, - "i_quickactions_award_monthly": 0, - "i_quickactions_board_move_weekly": 0, - "i_quickactions_board_move_monthly": 0, - "i_quickactions_child_epic_weekly": 0, - "i_quickactions_child_epic_monthly": 0, - "i_quickactions_clear_weight_weekly": 0, - "i_quickactions_clear_weight_monthly": 0, - "i_quickactions_clear_health_status_weekly": 0, - "i_quickactions_clear_health_status_monthly": 0, - "i_quickactions_clone_weekly": 0, - "i_quickactions_clone_monthly": 0, - "i_quickactions_close_weekly": 0, - "i_quickactions_close_monthly": 0, - "i_quickactions_confidential_weekly": 0, - "i_quickactions_confidential_monthly": 0, - "i_quickactions_copy_metadata_merge_request_weekly": 0, - "i_quickactions_copy_metadata_merge_request_monthly": 0, - "i_quickactions_copy_metadata_issue_weekly": 0, - "i_quickactions_copy_metadata_issue_monthly": 0, - "i_quickactions_create_merge_request_weekly": 0, - "i_quickactions_create_merge_request_monthly": 0, - "i_quickactions_done_weekly": 0, - "i_quickactions_done_monthly": 0, - "i_quickactions_draft_weekly": 0, - "i_quickactions_draft_monthly": 0, - "i_quickactions_due_weekly": 0, - "i_quickactions_due_monthly": 0, - "i_quickactions_duplicate_weekly": 0, - "i_quickactions_duplicate_monthly": 0, - "i_quickactions_epic_weekly": 0, - "i_quickactions_epic_monthly": 0, - "i_quickactions_estimate_weekly": 0, - "i_quickactions_estimate_monthly": 0, - "i_quickactions_iteration_weekly": 0, - "i_quickactions_iteration_monthly": 0, - "i_quickactions_label_weekly": 0, - "i_quickactions_label_monthly": 0, - "i_quickactions_lock_weekly": 0, - "i_quickactions_lock_monthly": 0, - "i_quickactions_merge_weekly": 0, - "i_quickactions_merge_monthly": 0, - "i_quickactions_milestone_weekly": 0, - "i_quickactions_milestone_monthly": 0, - "i_quickactions_move_weekly": 0, - "i_quickactions_move_monthly": 0, - "i_quickactions_parent_epic_weekly": 0, - "i_quickactions_parent_epic_monthly": 0, - "i_quickactions_promote_weekly": 0, - "i_quickactions_promote_monthly": 0, - "i_quickactions_promote_to_incident_weekly": 0, - "i_quickactions_promote_to_incident_monthly": 0, - "i_quickactions_page_weekly": 0, - "i_quickactions_page_monthly": 0, - "i_quickactions_publish_weekly": 0, - "i_quickactions_publish_monthly": 0, - "i_quickactions_reassign_weekly": 0, - "i_quickactions_reassign_monthly": 0, - "i_quickactions_reassign_reviewer_weekly": 0, - "i_quickactions_reassign_reviewer_monthly": 0, - "i_quickactions_rebase_weekly": 0, - "i_quickactions_rebase_monthly": 0, - "i_quickactions_relabel_weekly": 0, - "i_quickactions_relabel_monthly": 0, - "i_quickactions_relate_weekly": 0, - "i_quickactions_relate_monthly": 0, - "i_quickactions_remove_child_epic_weekly": 0, - "i_quickactions_remove_child_epic_monthly": 0, - "i_quickactions_remove_due_date_weekly": 0, - "i_quickactions_remove_due_date_monthly": 0, - "i_quickactions_remove_epic_weekly": 0, - "i_quickactions_remove_epic_monthly": 0, - "i_quickactions_remove_estimate_weekly": 0, - "i_quickactions_remove_estimate_monthly": 0, - "i_quickactions_remove_iteration_weekly": 0, - "i_quickactions_remove_iteration_monthly": 0, - "i_quickactions_remove_milestone_weekly": 0, - "i_quickactions_remove_milestone_monthly": 0, - "i_quickactions_remove_parent_epic_weekly": 0, - "i_quickactions_remove_parent_epic_monthly": 0, - "i_quickactions_remove_time_spent_weekly": 0, - "i_quickactions_remove_time_spent_monthly": 0, - "i_quickactions_remove_zoom_weekly": 0, - "i_quickactions_remove_zoom_monthly": 0, - "i_quickactions_reopen_weekly": 0, - "i_quickactions_reopen_monthly": 0, - "i_quickactions_severity_weekly": 0, - "i_quickactions_severity_monthly": 0, - "i_quickactions_shrug_weekly": 0, - "i_quickactions_shrug_monthly": 0, - "i_quickactions_spend_subtract_weekly": 0, - "i_quickactions_spend_subtract_monthly": 0, - "i_quickactions_spend_add_weekly": 0, - "i_quickactions_spend_add_monthly": 0, - "i_quickactions_submit_review_weekly": 0, - "i_quickactions_submit_review_monthly": 0, - "i_quickactions_subscribe_weekly": 0, - "i_quickactions_subscribe_monthly": 0, - "i_quickactions_tableflip_weekly": 0, - "i_quickactions_tableflip_monthly": 0, - "i_quickactions_tag_weekly": 0, - "i_quickactions_tag_monthly": 0, - "i_quickactions_target_branch_weekly": 0, - "i_quickactions_target_branch_monthly": 0, - "i_quickactions_title_weekly": 0, - "i_quickactions_title_monthly": 0, - "i_quickactions_todo_weekly": 0, - "i_quickactions_todo_monthly": 0, - "i_quickactions_unassign_specific_weekly": 0, - "i_quickactions_unassign_specific_monthly": 0, - "i_quickactions_unassign_all_weekly": 0, - "i_quickactions_unassign_all_monthly": 0, - "i_quickactions_unassign_reviewer_weekly": 0, - "i_quickactions_unassign_reviewer_monthly": 0, - "i_quickactions_unlabel_specific_weekly": 0, - "i_quickactions_unlabel_specific_monthly": 0, - "i_quickactions_unlabel_all_weekly": 0, - "i_quickactions_unlabel_all_monthly": 0, - "i_quickactions_unlock_weekly": 0, - "i_quickactions_unlock_monthly": 0, - "i_quickactions_unsubscribe_weekly": 0, - "i_quickactions_unsubscribe_monthly": 0, - "i_quickactions_weight_weekly": 0, - "i_quickactions_weight_monthly": 0, - "i_quickactions_health_status_weekly": 0, - "i_quickactions_health_status_monthly": 0, - "i_quickactions_wip_weekly": 0, - "i_quickactions_wip_monthly": 0, - "i_quickactions_zoom_weekly": 0, - "i_quickactions_zoom_monthly": 0, - "i_quickactions_invite_email_single_weekly": 0, - "i_quickactions_invite_email_single_monthly": 0, - "i_quickactions_invite_email_multiple_weekly": 0, - "i_quickactions_invite_email_multiple_monthly": 0, - "i_quickactions_add_contacts_weekly": 0, - "i_quickactions_add_contacts_monthly": 0, - "i_quickactions_remove_contacts_weekly": 0, - "i_quickactions_remove_contacts_monthly": 0, - "i_quickactions_attention_weekly": 0, - "i_quickactions_attention_monthly": 0, - "i_quickactions_remove_attention_weekly": 0, - "i_quickactions_remove_attention_monthly": 0, - "quickactions_total_unique_counts_weekly": 0, - "quickactions_total_unique_counts_monthly": 0 - }, - "compliance": { - "g_compliance_dashboard_weekly": 0, - "g_compliance_dashboard_monthly": 0, - "g_compliance_audit_events_weekly": 0, - "g_compliance_audit_events_monthly": 0, - "i_compliance_audit_events_weekly": 0, - "i_compliance_audit_events_monthly": 0, - "i_compliance_credential_inventory_weekly": 0, - "i_compliance_credential_inventory_monthly": 0, - "a_compliance_audit_events_api_weekly": 0, - "a_compliance_audit_events_api_monthly": 0, - "compliance_total_unique_counts_weekly": 0, - "compliance_total_unique_counts_monthly": 0 - }, - "ide_edit": { - "g_edit_by_web_ide_weekly": 0, - "g_edit_by_web_ide_monthly": 0, - "g_edit_by_sfe_weekly": 0, - "g_edit_by_sfe_monthly": 0, - "g_edit_by_sse_weekly": 0, - "g_edit_by_sse_monthly": 0, - "g_edit_by_snippet_ide_weekly": 0, - "g_edit_by_snippet_ide_monthly": 0, - "ide_edit_total_unique_counts_weekly": 0, - "ide_edit_total_unique_counts_monthly": 0 - }, - "search": { - "i_search_total_weekly": 0, - "i_search_total_monthly": 0, - "i_search_advanced_weekly": 0, - "i_search_advanced_monthly": 0, - "i_search_paid_weekly": 0, - "i_search_paid_monthly": 0, - "search_total_unique_counts_weekly": 0, - "search_total_unique_counts_monthly": 0 - }, - "source_code": { - "wiki_action_weekly": 0, - "wiki_action_monthly": 0, - "design_action_weekly": 0, - "design_action_monthly": 0, - "project_action_weekly": 0, - "project_action_monthly": 0, - "git_write_action_weekly": 0, - "git_write_action_monthly": 0, - "merge_request_action_weekly": 0, - "merge_request_action_monthly": 0, - "i_source_code_code_intelligence_weekly": 0, - "i_source_code_code_intelligence_monthly": 0 - }, - "incident_management": { - "incident_management_alert_status_changed_weekly": 0, - "incident_management_alert_status_changed_monthly": 0, - "incident_management_alert_assigned_weekly": 0, - "incident_management_alert_assigned_monthly": 0, - "incident_management_alert_todo_weekly": 0, - "incident_management_alert_todo_monthly": 0, - "incident_management_incident_created_weekly": 0, - "incident_management_incident_created_monthly": 0, - "incident_management_incident_reopened_weekly": 0, - "incident_management_incident_reopened_monthly": 0, - "incident_management_incident_closed_weekly": 0, - "incident_management_incident_closed_monthly": 0, - "incident_management_incident_assigned_weekly": 0, - "incident_management_incident_assigned_monthly": 0, - "incident_management_incident_todo_weekly": 0, - "incident_management_incident_todo_monthly": 0, - "incident_management_incident_comment_weekly": 0, - "incident_management_incident_comment_monthly": 0, - "incident_management_incident_zoom_meeting_weekly": 0, - "incident_management_incident_zoom_meeting_monthly": 0, - "incident_management_incident_published_weekly": 0, - "incident_management_incident_published_monthly": 0, - "incident_management_incident_relate_weekly": 0, - "incident_management_incident_relate_monthly": 0, - "incident_management_incident_unrelate_weekly": 0, - "incident_management_incident_unrelate_monthly": 0, - "incident_management_incident_change_confidential_weekly": 0, - "incident_management_incident_change_confidential_monthly": 0, - "incident_management_total_unique_counts_weekly": 0, - "incident_management_total_unique_counts_monthly": 0 - }, - "incident_management_alerts": { - "incident_management_alert_create_incident_weekly": 0, - "incident_management_alert_create_incident_monthly": 0 - }, - "incident_management_oncall": { - "i_incident_management_oncall_notification_sent_weekly": 0, - "i_incident_management_oncall_notification_sent_monthly": 0 - }, - "testing": { - "i_testing_test_case_parsed_weekly": 0, - "i_testing_test_case_parsed_monthly": 0, - "i_testing_metrics_report_widget_total_weekly": 0, - "i_testing_metrics_report_widget_total_monthly": 0, - "i_testing_group_code_coverage_visit_total_weekly": 0, - "i_testing_group_code_coverage_visit_total_monthly": 0, - "i_testing_full_code_quality_report_total_weekly": 0, - "i_testing_full_code_quality_report_total_monthly": 0, - "i_testing_web_performance_widget_total_weekly": 0, - "i_testing_web_performance_widget_total_monthly": 0, - "i_testing_group_code_coverage_project_click_total_weekly": 0, - "i_testing_group_code_coverage_project_click_total_monthly": 0, - "i_testing_load_performance_widget_total_weekly": 0, - "i_testing_load_performance_widget_total_monthly": 0, - "i_testing_metrics_report_artifact_uploaders_weekly": 0, - "i_testing_metrics_report_artifact_uploaders_monthly": 0, - "i_testing_summary_widget_total_weekly": 0, - "i_testing_summary_widget_total_monthly": 0, - "users_expanding_testing_code_quality_report_weekly": 0, - "users_expanding_testing_code_quality_report_monthly": 0, - "users_expanding_testing_accessibility_report_weekly": 0, - "users_expanding_testing_accessibility_report_monthly": 0, - "users_expanding_testing_license_compliance_report_weekly": 0, - "users_expanding_testing_license_compliance_report_monthly": 0, - "users_visiting_testing_license_compliance_full_report_weekly": 0, - "users_visiting_testing_license_compliance_full_report_monthly": 0, - "users_visiting_testing_manage_license_compliance_weekly": 0, - "users_visiting_testing_manage_license_compliance_monthly": 0, - "users_clicking_license_testing_visiting_external_website_weekly": 0, - "users_clicking_license_testing_visiting_external_website_monthly": 0, - "testing_total_unique_counts_weekly": 0, - "testing_total_unique_counts_monthly": 0 - }, - "issues_edit": { - "g_project_management_issue_title_changed_weekly": 0, - "g_project_management_issue_title_changed_monthly": 0, - "g_project_management_issue_description_changed_weekly": 0, - "g_project_management_issue_description_changed_monthly": 0, - "g_project_management_issue_assignee_changed_weekly": 0, - "g_project_management_issue_assignee_changed_monthly": 0, - "g_project_management_issue_made_confidential_weekly": 0, - "g_project_management_issue_made_confidential_monthly": 0, - "g_project_management_issue_made_visible_weekly": 0, - "g_project_management_issue_made_visible_monthly": 0, - "g_project_management_issue_created_weekly": 0, - "g_project_management_issue_created_monthly": 0, - "g_project_management_issue_closed_weekly": 0, - "g_project_management_issue_closed_monthly": 0, - "g_project_management_issue_reopened_weekly": 0, - "g_project_management_issue_reopened_monthly": 0, - "g_project_management_issue_label_changed_weekly": 0, - "g_project_management_issue_label_changed_monthly": 0, - "g_project_management_issue_milestone_changed_weekly": 0, - "g_project_management_issue_milestone_changed_monthly": 0, - "g_project_management_issue_iteration_changed_weekly": 0, - "g_project_management_issue_iteration_changed_monthly": 0, - "g_project_management_issue_weight_changed_weekly": 0, - "g_project_management_issue_weight_changed_monthly": 0, - "g_project_management_issue_cross_referenced_weekly": 0, - "g_project_management_issue_cross_referenced_monthly": 0, - "g_project_management_issue_moved_weekly": 0, - "g_project_management_issue_moved_monthly": 0, - "g_project_management_issue_related_weekly": 0, - "g_project_management_issue_related_monthly": 0, - "g_project_management_issue_unrelated_weekly": 0, - "g_project_management_issue_unrelated_monthly": 0, - "g_project_management_issue_marked_as_duplicate_weekly": 0, - "g_project_management_issue_marked_as_duplicate_monthly": 0, - "g_project_management_issue_locked_weekly": 0, - "g_project_management_issue_locked_monthly": 0, - "g_project_management_issue_unlocked_weekly": 0, - "g_project_management_issue_unlocked_monthly": 0, - "g_project_management_issue_added_to_epic_weekly": 0, - "g_project_management_issue_added_to_epic_monthly": 0, - "g_project_management_issue_removed_from_epic_weekly": 0, - "g_project_management_issue_removed_from_epic_monthly": 0, - "g_project_management_issue_changed_epic_weekly": 0, - "g_project_management_issue_changed_epic_monthly": 0, - "g_project_management_issue_designs_added_weekly": 0, - "g_project_management_issue_designs_added_monthly": 0, - "g_project_management_issue_designs_modified_weekly": 0, - "g_project_management_issue_designs_modified_monthly": 0, - "g_project_management_issue_designs_removed_weekly": 0, - "g_project_management_issue_designs_removed_monthly": 0, - "g_project_management_issue_due_date_changed_weekly": 0, - "g_project_management_issue_due_date_changed_monthly": 0, - "g_project_management_issue_time_estimate_changed_weekly": 0, - "g_project_management_issue_time_estimate_changed_monthly": 0, - "g_project_management_issue_time_spent_changed_weekly": 0, - "g_project_management_issue_time_spent_changed_monthly": 0, - "g_project_management_issue_comment_added_weekly": 0, - "g_project_management_issue_comment_added_monthly": 0, - "g_project_management_issue_comment_edited_weekly": 0, - "g_project_management_issue_comment_edited_monthly": 0, - "g_project_management_issue_comment_removed_weekly": 0, - "g_project_management_issue_comment_removed_monthly": 0, - "g_project_management_issue_health_status_changed_weekly": 0, - "g_project_management_issue_health_status_changed_monthly": 0, - "g_project_management_issue_cloned_weekly": 0, - "g_project_management_issue_cloned_monthly": 0, - "issues_edit_total_unique_counts_weekly": 0, - "issues_edit_total_unique_counts_monthly": 0 - }, - "ci_secrets_management": { - "i_ci_secrets_management_vault_build_created_weekly": 0, - "i_ci_secrets_management_vault_build_created_monthly": 0 - }, - "snippets": { - "i_snippets_show_weekly": 0, - "i_snippets_show_monthly": 0 - }, - "terraform": { - "p_terraform_state_api_unique_users_weekly": 0, - "p_terraform_state_api_unique_users_monthly": 0 - }, - "pipeline_authoring": { - "o_pipeline_authoring_unique_users_committing_ciconfigfile_weekly": 0, - "o_pipeline_authoring_unique_users_committing_ciconfigfile_monthly": 0, - "o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_weekly": 0, - "o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_monthly": 0, - "pipeline_authoring_total_unique_counts_weekly": 0, - "pipeline_authoring_total_unique_counts_monthly": 0 - }, - "secure": { - "users_expanding_secure_security_report_weekly": 0, - "users_expanding_secure_security_report_monthly": 0 - }, - "network_policies": { - "clusters_using_network_policies_ui_weekly": 0, - "clusters_using_network_policies_ui_monthly": 0 - }, - "geo": { - "g_geo_proxied_requests_weekly": 0, - "g_geo_proxied_requests_monthly": 0 - }, - "growth": { - "users_clicking_registration_features_offer_weekly": 0, - "users_clicking_registration_features_offer_monthly": 0 - }, - "deploy_token_packages": { - "i_package_composer_deploy_token_monthly": 0, - "i_package_conan_deploy_token_weekly": 0, - "i_package_conan_deploy_token_monthly": 0, - "i_package_generic_deploy_token_weekly": 0, - "i_package_generic_deploy_token_monthly": 0, - "i_package_helm_deploy_token_weekly": 0, - "i_package_helm_deploy_token_monthly": 0, - "i_package_maven_deploy_token_weekly": 0, - "i_package_maven_deploy_token_monthly": 0, - "i_package_npm_deploy_token_weekly": 0, - "i_package_npm_deploy_token_monthly": 0, - "i_package_nuget_deploy_token_weekly": 0, - "i_package_nuget_deploy_token_monthly": 0, - "i_package_pypi_deploy_token_weekly": 0, - "i_package_pypi_deploy_token_monthly": 0, - "i_package_rubygems_deploy_token_weekly": 0, - "i_package_rubygems_deploy_token_monthly": 0, - "i_package_terraform_module_deploy_token_weekly": 0, - "i_package_terraform_module_deploy_token_monthly": 0, - "deploy_token_packages_total_unique_counts_weekly": 0, - "deploy_token_packages_total_unique_counts_monthly": 0 - }, - "user_packages": { - "i_package_composer_user_weekly": 0, - "i_package_composer_user_monthly": 0, - "i_package_conan_user_weekly": 0, - "i_package_conan_user_monthly": 0, - "i_package_generic_user_weekly": 0, - "i_package_generic_user_monthly": 0, - "i_package_helm_user_weekly": 0, - "i_package_helm_user_monthly": 0, - "i_package_maven_user_weekly": 0, - "i_package_maven_user_monthly": 0, - "i_package_npm_user_weekly": 0, - "i_package_npm_user_monthly": 0, - "i_package_nuget_user_weekly": 0, - "i_package_nuget_user_monthly": 0, - "i_package_pypi_user_weekly": 0, - "i_package_pypi_user_monthly": 0, - "i_package_rubygems_user_weekly": 0, - "i_package_rubygems_user_monthly": 0, - "i_package_terraform_module_user_weekly": 0, - "i_package_terraform_module_user_monthly": 0, - "user_packages_total_unique_counts_weekly": 0, - "user_packages_total_unique_counts_monthly": 0 - }, - "ci_templates": { - "p_ci_templates_terraform_base_latest_weekly": 0, - "p_ci_templates_terraform_base_latest_monthly": 0, - "p_ci_templates_terraform_base_weekly": 0, - "p_ci_templates_terraform_base_monthly": 0, - "p_ci_templates_dotnet_weekly": 0, - "p_ci_templates_dotnet_monthly": 0, - "p_ci_templates_nodejs_weekly": 0, - "p_ci_templates_nodejs_monthly": 0, - "p_ci_templates_openshift_weekly": 0, - "p_ci_templates_openshift_monthly": 0, - "p_ci_templates_auto_devops_weekly": 0, - "p_ci_templates_auto_devops_monthly": 0, - "p_ci_templates_bash_weekly": 0, - "p_ci_templates_bash_monthly": 0, - "p_ci_templates_rust_weekly": 0, - "p_ci_templates_rust_monthly": 0, - "p_ci_templates_elixir_weekly": 0, - "p_ci_templates_elixir_monthly": 0, - "p_ci_templates_clojure_weekly": 0, - "p_ci_templates_clojure_monthly": 0, - "p_ci_templates_crystal_weekly": 0, - "p_ci_templates_crystal_monthly": 0, - "p_ci_templates_getting_started_weekly": 0, - "p_ci_templates_getting_started_monthly": 0, - "p_ci_templates_code_quality_weekly": 0, - "p_ci_templates_code_quality_monthly": 0, - "p_ci_templates_verify_load_performance_testing_weekly": 0, - "p_ci_templates_verify_load_performance_testing_monthly": 0, - "p_ci_templates_verify_accessibility_weekly": 0, - "p_ci_templates_verify_accessibility_monthly": 0, - "p_ci_templates_verify_failfast_weekly": 0, - "p_ci_templates_verify_failfast_monthly": 0, - "p_ci_templates_verify_browser_performance_weekly": 0, - "p_ci_templates_verify_browser_performance_monthly": 0, - "p_ci_templates_verify_browser_performance_latest_weekly": 0, - "p_ci_templates_verify_browser_performance_latest_monthly": 0, - "p_ci_templates_grails_weekly": 0, - "p_ci_templates_grails_monthly": 0, - "p_ci_templates_security_sast_weekly": 0, - "p_ci_templates_security_sast_monthly": 0, - "p_ci_templates_security_dast_runner_validation_weekly": 0, - "p_ci_templates_security_dast_runner_validation_monthly": 0, - "p_ci_templates_security_dast_on_demand_scan_weekly": 0, - "p_ci_templates_security_dast_on_demand_scan_monthly": 0, - "p_ci_templates_security_secret_detection_weekly": 0, - "p_ci_templates_security_secret_detection_monthly": 0, - "p_ci_templates_security_license_scanning_weekly": 0, - "p_ci_templates_security_license_scanning_monthly": 0, - "p_ci_templates_security_dast_on_demand_api_scan_weekly": 0, - "p_ci_templates_security_dast_on_demand_api_scan_monthly": 0, - "p_ci_templates_security_coverage_fuzzing_weekly": 0, - "p_ci_templates_security_coverage_fuzzing_monthly": 0, - "p_ci_templates_security_api_fuzzing_latest_weekly": 0, - "p_ci_templates_security_api_fuzzing_latest_monthly": 0, - "p_ci_templates_security_secure_binaries_weekly": 0, - "p_ci_templates_security_secure_binaries_monthly": 0, - "p_ci_templates_security_dast_api_weekly": 0, - "p_ci_templates_security_dast_api_monthly": 0, - "p_ci_templates_security_container_scanning_weekly": 0, - "p_ci_templates_security_container_scanning_monthly": 0, - "p_ci_templates_security_dast_latest_weekly": 0, - "p_ci_templates_security_dast_latest_monthly": 0, - "p_ci_templates_security_dependency_scanning_weekly": 0, - "p_ci_templates_security_dependency_scanning_monthly": 0, - "p_ci_templates_security_dast_api_latest_weekly": 0, - "p_ci_templates_security_dast_api_latest_monthly": 0, - "p_ci_templates_security_api_fuzzing_weekly": 0, - "p_ci_templates_security_api_fuzzing_monthly": 0, - "p_ci_templates_security_dast_weekly": 0, - "p_ci_templates_security_dast_monthly": 0, - "p_ci_templates_security_sast_iac_latest_weekly": 0, - "p_ci_templates_security_sast_iac_latest_monthly": 0, - "p_ci_templates_security_cluster_image_scanning_weekly": 0, - "p_ci_templates_security_cluster_image_scanning_monthly": 0, - "p_ci_templates_qualys_iac_security_weekly": 0, - "p_ci_templates_qualys_iac_security_monthly": 0, - "p_ci_templates_ios_fastlane_weekly": 0, - "p_ci_templates_ios_fastlane_monthly": 0, - "p_ci_templates_composer_weekly": 0, - "p_ci_templates_composer_monthly": 0, - "p_ci_templates_c_weekly": 0, - "p_ci_templates_c_monthly": 0, - "p_ci_templates_python_weekly": 0, - "p_ci_templates_python_monthly": 0, - "p_ci_templates_android_fastlane_weekly": 0, - "p_ci_templates_android_fastlane_monthly": 0, - "p_ci_templates_android_latest_weekly": 0, - "p_ci_templates_android_latest_monthly": 0, - "p_ci_templates_django_weekly": 0, - "p_ci_templates_django_monthly": 0, - "p_ci_templates_maven_weekly": 0, - "p_ci_templates_maven_monthly": 0, - "p_ci_templates_flutter_weekly": 0, - "p_ci_templates_flutter_monthly": 0, - "p_ci_templates_workflows_branch_pipelines_weekly": 0, - "p_ci_templates_workflows_branch_pipelines_monthly": 0, - "p_ci_templates_workflows_mergerequest_pipelines_weekly": 0, - "p_ci_templates_workflows_mergerequest_pipelines_monthly": 0, - "p_ci_templates_laravel_weekly": 0, - "p_ci_templates_laravel_monthly": 0, - "p_ci_templates_kaniko_weekly": 0, - "p_ci_templates_kaniko_monthly": 0, - "p_ci_templates_managed_cluster_applications_weekly": 0, - "p_ci_templates_managed_cluster_applications_monthly": 0, - "p_ci_templates_php_weekly": 0, - "p_ci_templates_php_monthly": 0, - "p_ci_templates_packer_weekly": 0, - "p_ci_templates_packer_monthly": 0, - "p_ci_templates_terraform_weekly": 0, - "p_ci_templates_terraform_monthly": 0, - "p_ci_templates_mono_weekly": 0, - "p_ci_templates_mono_monthly": 0, - "p_ci_templates_serverless_weekly": 0, - "p_ci_templates_serverless_monthly": 0, - "p_ci_templates_go_weekly": 0, - "p_ci_templates_go_monthly": 0, - "p_ci_templates_scala_weekly": 0, - "p_ci_templates_scala_monthly": 0, - "p_ci_templates_latex_weekly": 0, - "p_ci_templates_latex_monthly": 0, - "p_ci_templates_android_weekly": 0, - "p_ci_templates_android_monthly": 0, - "p_ci_templates_indeni_cloudrail_weekly": 0, - "p_ci_templates_indeni_cloudrail_monthly": 0, - "p_ci_templates_deploy_ecs_weekly": 0, - "p_ci_templates_deploy_ecs_monthly": 0, - "p_ci_templates_aws_cf_provision_and_deploy_ec2_weekly": 0, - "p_ci_templates_aws_cf_provision_and_deploy_ec2_monthly": 0, - "p_ci_templates_aws_deploy_ecs_weekly": 0, - "p_ci_templates_aws_deploy_ecs_monthly": 0, - "p_ci_templates_gradle_weekly": 0, - "p_ci_templates_gradle_monthly": 0, - "p_ci_templates_chef_weekly": 0, - "p_ci_templates_chef_monthly": 0, - "p_ci_templates_jobs_dast_default_branch_deploy_weekly": 0, - "p_ci_templates_jobs_dast_default_branch_deploy_monthly": 0, - "p_ci_templates_jobs_load_performance_testing_weekly": 0, - "p_ci_templates_jobs_load_performance_testing_monthly": 0, - "p_ci_templates_jobs_helm_2to3_weekly": 0, - "p_ci_templates_jobs_helm_2to3_monthly": 0, - "p_ci_templates_jobs_sast_weekly": 0, - "p_ci_templates_jobs_sast_monthly": 0, - "p_ci_templates_jobs_secret_detection_weekly": 0, - "p_ci_templates_jobs_secret_detection_monthly": 0, - "p_ci_templates_jobs_license_scanning_weekly": 0, - "p_ci_templates_jobs_license_scanning_monthly": 0, - "p_ci_templates_jobs_code_intelligence_weekly": 0, - "p_ci_templates_jobs_code_intelligence_monthly": 0, - "p_ci_templates_jobs_code_quality_weekly": 0, - "p_ci_templates_jobs_code_quality_monthly": 0, - "p_ci_templates_jobs_deploy_ecs_weekly": 0, - "p_ci_templates_jobs_deploy_ecs_monthly": 0, - "p_ci_templates_jobs_deploy_ec2_weekly": 0, - "p_ci_templates_jobs_deploy_ec2_monthly": 0, - "p_ci_templates_jobs_deploy_weekly": 0, - "p_ci_templates_jobs_deploy_monthly": 0, - "p_ci_templates_jobs_build_weekly": 0, - "p_ci_templates_jobs_build_monthly": 0, - "p_ci_templates_jobs_browser_performance_testing_weekly": 0, - "p_ci_templates_jobs_browser_performance_testing_monthly": 0, - "p_ci_templates_jobs_test_weekly": 0, - "p_ci_templates_jobs_test_monthly": 0, - "p_ci_templates_jobs_dependency_scanning_weekly": 0, - "p_ci_templates_jobs_dependency_scanning_monthly": 0, - "p_ci_templates_jobs_deploy_latest_weekly": 0, - "p_ci_templates_jobs_deploy_latest_monthly": 0, - "p_ci_templates_jobs_browser_performance_testing_latest_weekly": 0, - "p_ci_templates_jobs_browser_performance_testing_latest_monthly": 0, - "p_ci_templates_jobs_cf_provision_weekly": 0, - "p_ci_templates_jobs_cf_provision_monthly": 0, - "p_ci_templates_jobs_build_latest_weekly": 0, - "p_ci_templates_jobs_build_latest_monthly": 0, - "p_ci_templates_jobs_sast_iac_latest_weekly": 0, - "p_ci_templates_jobs_sast_iac_latest_monthly": 0, - "p_ci_templates_terraform_latest_weekly": 0, - "p_ci_templates_terraform_latest_monthly": 0, - "p_ci_templates_swift_weekly": 0, - "p_ci_templates_swift_monthly": 0, - "p_ci_templates_pages_jekyll_weekly": 0, - "p_ci_templates_pages_jekyll_monthly": 0, - "p_ci_templates_pages_harp_weekly": 0, - "p_ci_templates_pages_harp_monthly": 0, - "p_ci_templates_pages_octopress_weekly": 0, - "p_ci_templates_pages_octopress_monthly": 0, - "p_ci_templates_pages_brunch_weekly": 0, - "p_ci_templates_pages_brunch_monthly": 0, - "p_ci_templates_pages_doxygen_weekly": 0, - "p_ci_templates_pages_doxygen_monthly": 0, - "p_ci_templates_pages_hyde_weekly": 0, - "p_ci_templates_pages_hyde_monthly": 0, - "p_ci_templates_pages_lektor_weekly": 0, - "p_ci_templates_pages_lektor_monthly": 0, - "p_ci_templates_pages_jbake_weekly": 0, - "p_ci_templates_pages_jbake_monthly": 0, - "p_ci_templates_pages_hexo_weekly": 0, - "p_ci_templates_pages_hexo_monthly": 0, - "p_ci_templates_pages_middleman_weekly": 0, - "p_ci_templates_pages_middleman_monthly": 0, - "p_ci_templates_pages_hugo_weekly": 0, - "p_ci_templates_pages_hugo_monthly": 0, - "p_ci_templates_pages_pelican_weekly": 0, - "p_ci_templates_pages_pelican_monthly": 0, - "p_ci_templates_pages_nanoc_weekly": 0, - "p_ci_templates_pages_nanoc_monthly": 0, - "p_ci_templates_pages_swaggerui_weekly": 0, - "p_ci_templates_pages_swaggerui_monthly": 0, - "p_ci_templates_pages_jigsaw_weekly": 0, - "p_ci_templates_pages_jigsaw_monthly": 0, - "p_ci_templates_pages_metalsmith_weekly": 0, - "p_ci_templates_pages_metalsmith_monthly": 0, - "p_ci_templates_pages_gatsby_weekly": 0, - "p_ci_templates_pages_gatsby_monthly": 0, - "p_ci_templates_pages_html_weekly": 0, - "p_ci_templates_pages_html_monthly": 0, - "p_ci_templates_dart_weekly": 0, - "p_ci_templates_dart_monthly": 0, - "p_ci_templates_docker_weekly": 0, - "p_ci_templates_docker_monthly": 0, - "p_ci_templates_julia_weekly": 0, - "p_ci_templates_julia_monthly": 0, - "p_ci_templates_npm_weekly": 0, - "p_ci_templates_npm_monthly": 0, - "p_ci_templates_dotnet_core_weekly": 0, - "p_ci_templates_dotnet_core_monthly": 0, - "p_ci_templates_5_minute_production_app_weekly": 0, - "p_ci_templates_5_minute_production_app_monthly": 0, - "p_ci_templates_ruby_weekly": 0, - "p_ci_templates_ruby_monthly": 0, - "p_ci_templates_implicit_auto_devops_weekly": 0, - "p_ci_templates_implicit_auto_devops_monthly": 0, - "p_ci_templates_implicit_jobs_dast_default_branch_deploy_weekly": 0, - "p_ci_templates_implicit_jobs_dast_default_branch_deploy_monthly": 0, - "p_ci_templates_implicit_jobs_load_performance_testing_weekly": 0, - "p_ci_templates_implicit_jobs_load_performance_testing_monthly": 0, - "p_ci_templates_implicit_jobs_helm_2to3_weekly": 0, - "p_ci_templates_implicit_jobs_helm_2to3_monthly": 0, - "p_ci_templates_implicit_jobs_sast_weekly": 0, - "p_ci_templates_implicit_jobs_sast_monthly": 0, - "p_ci_templates_implicit_jobs_secret_detection_weekly": 0, - "p_ci_templates_implicit_jobs_secret_detection_monthly": 0, - "p_ci_templates_implicit_jobs_license_scanning_weekly": 0, - "p_ci_templates_implicit_jobs_license_scanning_monthly": 0, - "p_ci_templates_implicit_jobs_code_intelligence_weekly": 0, - "p_ci_templates_implicit_jobs_code_intelligence_monthly": 0, - "p_ci_templates_implicit_jobs_code_quality_weekly": 0, - "p_ci_templates_implicit_jobs_code_quality_monthly": 0, - "p_ci_templates_implicit_jobs_deploy_ecs_weekly": 0, - "p_ci_templates_implicit_jobs_deploy_ecs_monthly": 0, - "p_ci_templates_implicit_jobs_deploy_ec2_weekly": 0, - "p_ci_templates_implicit_jobs_deploy_ec2_monthly": 0, - "p_ci_templates_implicit_jobs_deploy_weekly": 0, - "p_ci_templates_implicit_jobs_deploy_monthly": 0, - "p_ci_templates_implicit_jobs_build_weekly": 0, - "p_ci_templates_implicit_jobs_build_monthly": 0, - "p_ci_templates_implicit_jobs_browser_performance_testing_weekly": 0, - "p_ci_templates_implicit_jobs_browser_performance_testing_monthly": 0, - "p_ci_templates_implicit_jobs_test_weekly": 0, - "p_ci_templates_implicit_jobs_test_monthly": 0, - "p_ci_templates_implicit_jobs_dependency_scanning_weekly": 0, - "p_ci_templates_implicit_jobs_dependency_scanning_monthly": 0, - "p_ci_templates_implicit_jobs_deploy_latest_weekly": 0, - "p_ci_templates_implicit_jobs_deploy_latest_monthly": 0, - "p_ci_templates_implicit_jobs_browser_performance_testing_latest_weekly": 0, - "p_ci_templates_implicit_jobs_browser_performance_testing_latest_monthly": 0, - "p_ci_templates_implicit_jobs_cf_provision_weekly": 0, - "p_ci_templates_implicit_jobs_cf_provision_monthly": 0, - "p_ci_templates_implicit_jobs_build_latest_weekly": 0, - "p_ci_templates_implicit_jobs_build_latest_monthly": 0, - "p_ci_templates_implicit_jobs_sast_iac_latest_weekly": 0, - "p_ci_templates_implicit_jobs_sast_iac_latest_monthly": 0, - "p_ci_templates_implicit_security_sast_weekly": 0, - "p_ci_templates_implicit_security_sast_monthly": 0, - "p_ci_templates_implicit_security_dast_runner_validation_weekly": 0, - "p_ci_templates_implicit_security_dast_runner_validation_monthly": 0, - "p_ci_templates_implicit_security_dast_on_demand_scan_weekly": 0, - "p_ci_templates_implicit_security_dast_on_demand_scan_monthly": 0, - "p_ci_templates_implicit_security_secret_detection_weekly": 0, - "p_ci_templates_implicit_security_secret_detection_monthly": 0, - "p_ci_templates_implicit_security_license_scanning_weekly": 0, - "p_ci_templates_implicit_security_license_scanning_monthly": 0, - "p_ci_templates_implicit_security_dast_on_demand_api_scan_weekly": 0, - "p_ci_templates_implicit_security_dast_on_demand_api_scan_monthly": 0, - "p_ci_templates_implicit_security_coverage_fuzzing_weekly": 0, - "p_ci_templates_implicit_security_coverage_fuzzing_monthly": 0, - "p_ci_templates_implicit_security_api_fuzzing_latest_weekly": 0, - "p_ci_templates_implicit_security_api_fuzzing_latest_monthly": 0, - "p_ci_templates_implicit_security_secure_binaries_weekly": 0, - "p_ci_templates_implicit_security_secure_binaries_monthly": 0, - "p_ci_templates_implicit_security_dast_api_weekly": 0, - "p_ci_templates_implicit_security_dast_api_monthly": 0, - "p_ci_templates_implicit_security_container_scanning_weekly": 0, - "p_ci_templates_implicit_security_container_scanning_monthly": 0, - "p_ci_templates_implicit_security_dast_latest_weekly": 0, - "p_ci_templates_implicit_security_dast_latest_monthly": 0, - "p_ci_templates_implicit_security_dependency_scanning_weekly": 0, - "p_ci_templates_implicit_security_dependency_scanning_monthly": 0, - "p_ci_templates_implicit_security_dast_api_latest_weekly": 0, - "p_ci_templates_implicit_security_dast_api_latest_monthly": 0, - "p_ci_templates_implicit_security_api_fuzzing_weekly": 0, - "p_ci_templates_implicit_security_api_fuzzing_monthly": 0, - "p_ci_templates_implicit_security_dast_weekly": 0, - "p_ci_templates_implicit_security_dast_monthly": 0, - "p_ci_templates_implicit_security_sast_iac_latest_weekly": 0, - "p_ci_templates_implicit_security_sast_iac_latest_monthly": 0, - "p_ci_templates_implicit_security_cluster_image_scanning_weekly": 0, - "p_ci_templates_implicit_security_cluster_image_scanning_monthly": 0 - }, - "code_review": { - "i_code_review_mr_diffs_weekly": 0, - "i_code_review_mr_diffs_monthly": 0, - "i_code_review_user_single_file_diffs_weekly": 0, - "i_code_review_user_single_file_diffs_monthly": 0, - "i_code_review_mr_single_file_diffs_weekly": 0, - "i_code_review_mr_single_file_diffs_monthly": 0, - "i_code_review_user_toggled_task_item_status_weekly": 0, - "i_code_review_user_toggled_task_item_status_monthly": 0, - "i_code_review_user_create_mr_weekly": 0, - "i_code_review_user_create_mr_monthly": 0, - "i_code_review_user_close_mr_weekly": 0, - "i_code_review_user_close_mr_monthly": 0, - "i_code_review_user_reopen_mr_weekly": 0, - "i_code_review_user_reopen_mr_monthly": 0, - "i_code_review_user_approve_mr_weekly": 0, - "i_code_review_user_approve_mr_monthly": 0, - "i_code_review_user_unapprove_mr_weekly": 0, - "i_code_review_user_unapprove_mr_monthly": 0, - "i_code_review_user_resolve_thread_weekly": 0, - "i_code_review_user_resolve_thread_monthly": 0, - "i_code_review_user_unresolve_thread_weekly": 0, - "i_code_review_user_unresolve_thread_monthly": 0, - "i_code_review_edit_mr_title_weekly": 0, - "i_code_review_edit_mr_title_monthly": 0, - "i_code_review_edit_mr_desc_weekly": 0, - "i_code_review_edit_mr_desc_monthly": 0, - "i_code_review_user_merge_mr_weekly": 0, - "i_code_review_user_merge_mr_monthly": 0, - "i_code_review_user_create_mr_comment_weekly": 0, - "i_code_review_user_create_mr_comment_monthly": 0, - "i_code_review_user_edit_mr_comment_weekly": 0, - "i_code_review_user_edit_mr_comment_monthly": 0, - "i_code_review_user_remove_mr_comment_weekly": 0, - "i_code_review_user_remove_mr_comment_monthly": 0, - "i_code_review_user_create_review_note_weekly": 0, - "i_code_review_user_create_review_note_monthly": 0, - "i_code_review_user_publish_review_weekly": 0, - "i_code_review_user_publish_review_monthly": 0, - "i_code_review_user_create_multiline_mr_comment_weekly": 0, - "i_code_review_user_create_multiline_mr_comment_monthly": 0, - "i_code_review_user_edit_multiline_mr_comment_weekly": 0, - "i_code_review_user_edit_multiline_mr_comment_monthly": 0, - "i_code_review_user_remove_multiline_mr_comment_weekly": 0, - "i_code_review_user_remove_multiline_mr_comment_monthly": 0, - "i_code_review_user_add_suggestion_weekly": 0, - "i_code_review_user_add_suggestion_monthly": 0, - "i_code_review_user_apply_suggestion_weekly": 0, - "i_code_review_user_apply_suggestion_monthly": 0, - "i_code_review_user_assigned_weekly": 0, - "i_code_review_user_assigned_monthly": 0, - "i_code_review_user_marked_as_draft_weekly": 0, - "i_code_review_user_marked_as_draft_monthly": 0, - "i_code_review_user_unmarked_as_draft_weekly": 0, - "i_code_review_user_unmarked_as_draft_monthly": 0, - "i_code_review_user_review_requested_weekly": 0, - "i_code_review_user_review_requested_monthly": 0, - "i_code_review_user_approval_rule_added_weekly": 0, - "i_code_review_user_approval_rule_added_monthly": 0, - "i_code_review_user_approval_rule_deleted_weekly": 0, - "i_code_review_user_approval_rule_deleted_monthly": 0, - "i_code_review_user_approval_rule_edited_weekly": 0, - "i_code_review_user_approval_rule_edited_monthly": 0, - "i_code_review_user_vs_code_api_request_weekly": 0, - "i_code_review_user_vs_code_api_request_monthly": 0, - "i_code_review_user_jetbrains_api_request_weekly": 0, - "i_code_review_user_jetbrains_api_request_monthly": 0, - "i_code_review_user_create_mr_from_issue_weekly": 0, - "i_code_review_user_create_mr_from_issue_monthly": 0, - "i_code_review_user_mr_discussion_locked_weekly": 0, - "i_code_review_user_mr_discussion_locked_monthly": 0, - "i_code_review_user_mr_discussion_unlocked_weekly": 0, - "i_code_review_user_mr_discussion_unlocked_monthly": 0, - "i_code_review_user_time_estimate_changed_weekly": 0, - "i_code_review_user_time_estimate_changed_monthly": 0, - "i_code_review_user_time_spent_changed_weekly": 0, - "i_code_review_user_time_spent_changed_monthly": 0, - "i_code_review_user_assignees_changed_weekly": 0, - "i_code_review_user_assignees_changed_monthly": 0, - "i_code_review_user_reviewers_changed_weekly": 0, - "i_code_review_user_reviewers_changed_monthly": 0, - "i_code_review_user_milestone_changed_weekly": 0, - "i_code_review_user_milestone_changed_monthly": 0, - "i_code_review_user_labels_changed_weekly": 0, - "i_code_review_user_labels_changed_monthly": 0, - "i_code_review_click_diff_view_setting_weekly": 0, - "i_code_review_click_diff_view_setting_monthly": 0, - "i_code_review_click_single_file_mode_setting_weekly": 0, - "i_code_review_click_single_file_mode_setting_monthly": 0, - "i_code_review_click_file_browser_setting_weekly": 0, - "i_code_review_click_file_browser_setting_monthly": 0, - "i_code_review_click_whitespace_setting_weekly": 0, - "i_code_review_click_whitespace_setting_monthly": 0, - "i_code_review_diff_view_inline_weekly": 0, - "i_code_review_diff_view_inline_monthly": 0, - "i_code_review_diff_view_parallel_weekly": 0, - "i_code_review_diff_view_parallel_monthly": 0, - "i_code_review_file_browser_tree_view_weekly": 0, - "i_code_review_file_browser_tree_view_monthly": 0, - "i_code_review_file_browser_list_view_weekly": 0, - "i_code_review_file_browser_list_view_monthly": 0, - "i_code_review_diff_show_whitespace_weekly": 0, - "i_code_review_diff_show_whitespace_monthly": 0, - "i_code_review_diff_hide_whitespace_weekly": 0, - "i_code_review_diff_hide_whitespace_monthly": 0, - "i_code_review_diff_single_file_weekly": 0, - "i_code_review_diff_single_file_monthly": 0, - "i_code_review_diff_multiple_files_weekly": 0, - "i_code_review_diff_multiple_files_monthly": 0, - "i_code_review_user_load_conflict_ui_weekly": 0, - "i_code_review_user_load_conflict_ui_monthly": 0, - "i_code_review_user_resolve_conflict_weekly": 0, - "i_code_review_user_resolve_conflict_monthly": 0, - "i_code_review_user_searches_diff_weekly": 0, - "i_code_review_user_searches_diff_monthly": 0, - "i_code_review_total_suggestions_applied_weekly": 0, - "i_code_review_total_suggestions_applied_monthly": 0, - "i_code_review_total_suggestions_added_weekly": 0, - "i_code_review_total_suggestions_added_monthly": 0, - "i_code_review_user_resolve_thread_in_issue_weekly": 0, - "i_code_review_user_resolve_thread_in_issue_monthly": 0, - "i_code_review_widget_nothing_merge_click_new_file_weekly": 0, - "i_code_review_widget_nothing_merge_click_new_file_monthly": 0, - "i_code_review_post_merge_delete_branch_weekly": 0, - "i_code_review_post_merge_delete_branch_monthly": 0, - "i_code_review_post_merge_click_revert_weekly": 0, - "i_code_review_post_merge_click_revert_monthly": 0, - "i_code_review_post_merge_click_cherry_pick_weekly": 0, - "i_code_review_post_merge_click_cherry_pick_monthly": 0, - "i_code_review_post_merge_submit_revert_modal_weekly": 0, - "i_code_review_post_merge_submit_revert_modal_monthly": 0, - "i_code_review_post_merge_submit_cherry_pick_modal_weekly": 0, - "i_code_review_post_merge_submit_cherry_pick_modal_monthly": 0, - "code_review_total_unique_counts_weekly": 0, - "code_review_total_unique_counts_monthly": 0 - }, - "ecosystem": { - "i_ecosystem_jira_service_close_issue_weekly": 0, - "i_ecosystem_jira_service_close_issue_monthly": 0, - "i_ecosystem_jira_service_cross_reference_weekly": 0, - "i_ecosystem_jira_service_cross_reference_monthly": 0, - "i_ecosystem_jira_service_list_issues_weekly": 0, - "i_ecosystem_jira_service_list_issues_monthly": 0, - "i_ecosystem_jira_service_create_issue_weekly": 0, - "i_ecosystem_jira_service_create_issue_monthly": 0, - "i_ecosystem_slack_service_issue_notification_weekly": 0, - "i_ecosystem_slack_service_issue_notification_monthly": 0, - "i_ecosystem_slack_service_push_notification_weekly": 0, - "i_ecosystem_slack_service_push_notification_monthly": 0, - "i_ecosystem_slack_service_deployment_notification_weekly": 0, - "i_ecosystem_slack_service_deployment_notification_monthly": 0, - "i_ecosystem_slack_service_wiki_page_notification_weekly": 0, - "i_ecosystem_slack_service_wiki_page_notification_monthly": 0, - "i_ecosystem_slack_service_merge_request_notification_weekly": 0, - "i_ecosystem_slack_service_merge_request_notification_monthly": 0, - "i_ecosystem_slack_service_note_notification_weekly": 0, - "i_ecosystem_slack_service_note_notification_monthly": 0, - "i_ecosystem_slack_service_tag_push_notification_weekly": 0, - "i_ecosystem_slack_service_tag_push_notification_monthly": 0, - "i_ecosystem_slack_service_confidential_note_notification_weekly": 0, - "i_ecosystem_slack_service_confidential_note_notification_monthly": 0, - "i_ecosystem_slack_service_confidential_issue_notification_weekly": 0, - "i_ecosystem_slack_service_confidential_issue_notification_monthly": 0, - "ecosystem_total_unique_counts_weekly": 0, - "ecosystem_total_unique_counts_monthly": 0 - }, - "work_items": { - "users_updating_work_item_title_weekly": 0, - "users_updating_work_item_title_monthly": 0, - "users_creating_work_items_weekly": 0, - "users_creating_work_items_monthly": 0 - } - }, - "recording_ce_finished_at": "2021-01-01 00:00:00 UTC", - "recording_ee_finished_at": "2021-01-01 00:00:00 UTC" -} \ No newline at end of file diff --git a/spec/lib/gitlab/usage_data_queries_spec.rb b/spec/lib/gitlab/usage_data_queries_spec.rb index 88322e1b971..c3ac9d7db90 100644 --- a/spec/lib/gitlab/usage_data_queries_spec.rb +++ b/spec/lib/gitlab/usage_data_queries_spec.rb @@ -34,14 +34,14 @@ RSpec.describe Gitlab::UsageDataQueries do describe '.redis_usage_data' do subject(:redis_usage_data) { described_class.redis_usage_data { 42 } } - it 'returns a stringified class for redis_usage_data with a counter call' do + it 'returns a class for redis_usage_data with a counter call' do expect(described_class.redis_usage_data(Gitlab::UsageDataCounters::WikiPageCounter)) - .to eq(redis_usage_data_counter: "Gitlab::UsageDataCounters::WikiPageCounter") + .to eq(redis_usage_data_counter: Gitlab::UsageDataCounters::WikiPageCounter) end - it 'returns a placeholder string for redis_usage_data with a block' do + it 'returns a stringified block for redis_usage_data with a block' do is_expected.to include(:redis_usage_data_block) - expect(redis_usage_data[:redis_usage_data_block]).to eq('non-SQL usage data block') + expect(redis_usage_data[:redis_usage_data_block]).to start_with('#