From 43a25d93ebdabea52f99b05e15b06250cd8f07d7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 17 May 2023 16:05:49 +0000 Subject: Add latest changes from gitlab-org/gitlab@16-0-stable-ee --- lib/gitlab/usage/metrics/aggregates/aggregate.rb | 7 +--- .../count_bulk_imports_entities_metric.rb | 5 +++ .../count_ci_runners_group_type_active_metric.rb | 15 +++++++ ...t_ci_runners_group_type_active_online_metric.rb | 15 +++++++ ...count_ci_runners_instance_type_active_metric.rb | 17 ++++++++ ...i_runners_instance_type_active_online_metric.rb | 15 +++++++ .../instrumentations/count_ci_runners_metric.rb | 15 +++++++ .../count_ci_runners_project_type_active_metric.rb | 15 +++++++ ...ci_runners_project_type_active_online_metric.rb | 15 +++++++ .../metrics/instrumentations/database_mode.rb | 15 +++++++ .../metrics/instrumentations/edition_metric.rb | 19 +++++++++ .../instrumentations/gitlab_dedicated_metric.rb | 15 +++++++ ...oming_email_encrypted_secrets_enabled_metric.rb | 2 +- .../index_inconsistencies_metric.rb | 46 ++++++++++++++++++++++ ...tallation_creation_date_approximation_metric.rb | 15 +++++++ .../installation_creation_date_metric.rb | 15 +++++++ .../instrumentations/installation_type_metric.rb | 19 +++++++++ ..._desk_email_encrypted_secrets_enabled_metric.rb | 2 +- .../metrics/instrumentations/version_metric.rb | 15 +++++++ lib/gitlab/usage/service_ping_report.rb | 10 ++--- 20 files changed, 277 insertions(+), 15 deletions(-) create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_online_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_online_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_online_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/database_mode.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/edition_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/gitlab_dedicated_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/index_inconsistencies_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/installation_creation_date_approximation_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/installation_creation_date_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/installation_type_metric.rb create mode 100644 lib/gitlab/usage/metrics/instrumentations/version_metric.rb (limited to 'lib/gitlab/usage') diff --git a/lib/gitlab/usage/metrics/aggregates/aggregate.rb b/lib/gitlab/usage/metrics/aggregates/aggregate.rb index b68e1ace658..a0a58534661 100644 --- a/lib/gitlab/usage/metrics/aggregates/aggregate.rb +++ b/lib/gitlab/usage/metrics/aggregates/aggregate.rb @@ -7,11 +7,6 @@ module Gitlab class Aggregate include Gitlab::Usage::TimeFrame - # TODO: define this missing event https://gitlab.com/gitlab-org/gitlab/-/issues/385080 - EVENTS_NOT_DEFINED_YET = %w[ - i_code_review_merge_request_widget_license_compliance_warning - ].freeze - def initialize(recorded_at) @recorded_at = recorded_at end @@ -84,7 +79,7 @@ module Gitlab return events if source != ::Gitlab::Usage::Metrics::Aggregates::REDIS_SOURCE events.select do |event| - ::Gitlab::UsageDataCounters::HLLRedisCounter.known_event?(event) || EVENTS_NOT_DEFINED_YET.include?(event) + ::Gitlab::UsageDataCounters::HLLRedisCounter.known_event?(event) end end end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric.rb index 642b67a3b02..ca122ccf6f3 100644 --- a/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric.rb +++ b/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric.rb @@ -23,6 +23,7 @@ module Gitlab scope = super scope = scope.where(source_type: source_type) if source_type.present? scope = scope.where(status: status) if status.present? + scope = scope.where(has_failures: failures) if failures.present? scope end @@ -34,6 +35,10 @@ module Gitlab options[:status] end + def failures + options[:has_failures].to_s + end + def allowed_source_types BulkImports::Entity.source_types.keys.map(&:to_s) end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_metric.rb new file mode 100644 index 00000000000..fbf4e0f904b --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersGroupTypeActiveMetric < DatabaseMetric + operation :count + + relation { ::Ci::Runner.group_type.active } + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_online_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_online_metric.rb new file mode 100644 index 00000000000..acb6de53d14 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_group_type_active_online_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersGroupTypeActiveOnlineMetric < DatabaseMetric + operation :count + + relation { ::Ci::Runner.group_type.active.online } + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_metric.rb new file mode 100644 index 00000000000..d9a785679d7 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_metric.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersInstanceTypeActiveMetric < DatabaseMetric + operation :count + + relation do + ::Ci::Runner.instance_type.active + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_online_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_online_metric.rb new file mode 100644 index 00000000000..05a9c47c016 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_instance_type_active_online_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersInstanceTypeActiveOnlineMetric < DatabaseMetric + operation :count + + relation { ::Ci::Runner.instance_type.active.online } + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_metric.rb new file mode 100644 index 00000000000..8be4955e28d --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersMetric < DatabaseMetric + operation :count + + relation { ::Ci::Runner } + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_metric.rb new file mode 100644 index 00000000000..e713e85b270 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersProjectTypeActiveMetric < DatabaseMetric + operation :count + + relation { ::Ci::Runner.project_type.active } + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_online_metric.rb b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_online_metric.rb new file mode 100644 index 00000000000..91e7c6063b8 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/count_ci_runners_project_type_active_online_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountCiRunnersProjectTypeActiveOnlineMetric < DatabaseMetric + operation :count + + relation { ::Ci::Runner.project_type.active.online } + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/database_mode.rb b/lib/gitlab/usage/metrics/instrumentations/database_mode.rb new file mode 100644 index 00000000000..1b97ef4a1d2 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/database_mode.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class DatabaseMode < GenericMetric + value do + Gitlab::Database.database_mode + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/edition_metric.rb b/lib/gitlab/usage/metrics/instrumentations/edition_metric.rb new file mode 100644 index 00000000000..83153242703 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/edition_metric.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class EditionMetric < GenericMetric + value do + if Gitlab.ee? + ::License.current&.edition || 'EE Free' + else + 'CE' + end + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/gitlab_dedicated_metric.rb b/lib/gitlab/usage/metrics/instrumentations/gitlab_dedicated_metric.rb new file mode 100644 index 00000000000..b7ca5fadd5b --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/gitlab_dedicated_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class GitlabDedicatedMetric < GenericMetric + value do + Gitlab::CurrentSettings.gitlab_dedicated_instance + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/incoming_email_encrypted_secrets_enabled_metric.rb b/lib/gitlab/usage/metrics/instrumentations/incoming_email_encrypted_secrets_enabled_metric.rb index ab9c6f87023..be3b3b3d682 100644 --- a/lib/gitlab/usage/metrics/instrumentations/incoming_email_encrypted_secrets_enabled_metric.rb +++ b/lib/gitlab/usage/metrics/instrumentations/incoming_email_encrypted_secrets_enabled_metric.rb @@ -6,7 +6,7 @@ module Gitlab module Instrumentations class IncomingEmailEncryptedSecretsEnabledMetric < GenericMetric value do - Gitlab::IncomingEmail.encrypted_secrets.active? + Gitlab::Email::IncomingEmail.encrypted_secrets.active? end end end diff --git a/lib/gitlab/usage/metrics/instrumentations/index_inconsistencies_metric.rb b/lib/gitlab/usage/metrics/instrumentations/index_inconsistencies_metric.rb new file mode 100644 index 00000000000..409027925d1 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/index_inconsistencies_metric.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class IndexInconsistenciesMetric < GenericMetric + value do + runner = Gitlab::Database::SchemaValidation::Runner.new(structure_sql, database, validators: validators) + + inconsistencies = runner.execute + + inconsistencies.map do |inconsistency| + { + object_name: inconsistency.object_name, + inconsistency_type: inconsistency.type + } + end + end + + class << self + private + + def database + database_model = Gitlab::Database.database_base_models[Gitlab::Database::MAIN_DATABASE_NAME] + Gitlab::Database::SchemaValidation::Database.new(database_model.connection) + end + + def structure_sql + stucture_sql_path = Rails.root.join('db/structure.sql') + Gitlab::Database::SchemaValidation::StructureSql.new(stucture_sql_path) + end + + def validators + [ + Gitlab::Database::SchemaValidation::Validators::MissingIndexes, + Gitlab::Database::SchemaValidation::Validators::DifferentDefinitionIndexes, + Gitlab::Database::SchemaValidation::Validators::ExtraIndexes + ] + end + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/installation_creation_date_approximation_metric.rb b/lib/gitlab/usage/metrics/instrumentations/installation_creation_date_approximation_metric.rb new file mode 100644 index 00000000000..e8ae4b4f906 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/installation_creation_date_approximation_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class InstallationCreationDateApproximationMetric < GenericMetric + value do + [User.first, ApplicationSetting.first].compact.pluck(:created_at).compact.min + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/installation_creation_date_metric.rb b/lib/gitlab/usage/metrics/instrumentations/installation_creation_date_metric.rb new file mode 100644 index 00000000000..c2ca62f9eba --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/installation_creation_date_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class InstallationCreationDateMetric < GenericMetric + value do + User.where(id: 1).pick(:created_at) + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/installation_type_metric.rb b/lib/gitlab/usage/metrics/instrumentations/installation_type_metric.rb new file mode 100644 index 00000000000..7147fc2e624 --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/installation_type_metric.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class InstallationTypeMetric < GenericMetric + value do + if Rails.env.production? + Gitlab::INSTALLATION_TYPE + else + "gitlab-development-kit" + end + end + end + end + end + end +end diff --git a/lib/gitlab/usage/metrics/instrumentations/service_desk_email_encrypted_secrets_enabled_metric.rb b/lib/gitlab/usage/metrics/instrumentations/service_desk_email_encrypted_secrets_enabled_metric.rb index 4332043de8a..5e38339801b 100644 --- a/lib/gitlab/usage/metrics/instrumentations/service_desk_email_encrypted_secrets_enabled_metric.rb +++ b/lib/gitlab/usage/metrics/instrumentations/service_desk_email_encrypted_secrets_enabled_metric.rb @@ -6,7 +6,7 @@ module Gitlab module Instrumentations class ServiceDeskEmailEncryptedSecretsEnabledMetric < GenericMetric value do - Gitlab::ServiceDeskEmail.encrypted_secrets.active? + Gitlab::Email::ServiceDeskEmail.encrypted_secrets.active? end end end diff --git a/lib/gitlab/usage/metrics/instrumentations/version_metric.rb b/lib/gitlab/usage/metrics/instrumentations/version_metric.rb new file mode 100644 index 00000000000..cc26268067f --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/version_metric.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class VersionMetric < GenericMetric + value do + Gitlab::VERSION + end + end + end + end + end +end diff --git a/lib/gitlab/usage/service_ping_report.rb b/lib/gitlab/usage/service_ping_report.rb index 1eda72ba570..3bc941260d6 100644 --- a/lib/gitlab/usage/service_ping_report.rb +++ b/lib/gitlab/usage/service_ping_report.rb @@ -9,7 +9,9 @@ module Gitlab def for(output:, cached: false) case output.to_sym when :all_metrics_values - with_instrumentation_classes(all_metrics_values(cached), :with_value) + Rails.cache.fetch(CACHE_KEY, force: !cached, expires_in: 2.weeks) do + with_instrumentation_classes(Gitlab::UsageData.data, :with_value) + end when :metrics_queries with_instrumentation_classes(metrics_queries, :with_instrumentation) when :non_sql_metrics_values @@ -27,12 +29,6 @@ module Gitlab old_payload.with_indifferent_access.deep_merge(instrumented_payload) end - def all_metrics_values(cached) - Rails.cache.fetch(CACHE_KEY, force: !cached, expires_in: 2.weeks) do - Gitlab::UsageData.data - end - end - def metrics_queries Gitlab::UsageDataQueries.data end -- cgit v1.2.3