Class: Gitlab::Usage::Metrics::Instrumentations::DatabaseMetric

Inherits:
BaseMetric
  • Object
show all
Defined in:
lib/gitlab/usage/metrics/instrumentations/database_metric.rb

Direct Known Subclasses

ActiveUserCountMetric, BaseIntegrationsMetric, BatchedBackgroundMigrationFailedJobsMetric, BatchedBackgroundMigrationsMetric, BulkImportsUsersMetric, CountActiveUserWithPasskeysMetric, CountAdminsMetric, CountAllCiBuildsMetric, CountBoardsMetric, CountBulkImportsEntitiesMetric, CountCiInternalPipelinesMetric, CountCiRunnerManagerCustomExecutorsMetric, CountCiRunnersGroupTypeActiveMetric, CountCiRunnersGroupTypeActiveOnlineMetric, CountCiRunnersInstanceTypeActiveMetric, CountCiRunnersInstanceTypeActiveOnlineMetric, CountCiRunnersMetric, CountCiRunnersOnlineMetric, CountCiRunnersProjectTypeActiveMetric, CountCiRunnersProjectTypeActiveOnlineMetric, CountConnectedAgentsMetric, CountContainerRegistryProtectedTagRulesMetric, CountContainerRegistryProtectionRulesMetric, CountCreatingCiBuildMetric, CountCsvImportsMetric, CountDeploymentsMetric, CountDistinctNamespacesWithPackagesProtectionRulesMetric, CountDistinctTopLevelGroupsWithContainerRegistryProtectionRulesMetric, CountImportedProjectsMetric, CountImportedProjectsTotalMetric, CountIssuesCreatedManuallyFromAlertsMetric, CountIssuesMetric, CountJiraImportsMetric, CountMlCandidatesMetric, CountMlExperimentsMetric, CountNilExternalAttributesMetric, CountPackagesMetric, CountPackagesProtectionRulesMetric, CountPersonalSnippetsMetric, CountProjectSnippetsMetric, CountProjectsMetric, CountProjectsWithAlertsCreatedMetric, CountProjectsWithContainerRegistryProtectedTagRulesMetric, CountProjectsWithContainerRegistryProtectionRulesMetric, CountProjectsWithJiraDvcsIntegrationMetric, CountProjectsWithMlCandidatesMetric, CountProjectsWithMlExperimentsMetric, CountProjectsWithMonitorEnabledMetric, CountProjectsWithPackagesProtectionRulesMetric, CountServiceDeskCustomEmailEnabledMetric, CountSlackAppInstallationsGbpMetric, CountSlackAppInstallationsMetric, CountSnippetsMetric, CountTopLevelGroupsMetric, CountUserAuthMetric, CountUsersAssociatingMilestonesToReleasesMetric, CountUsersCreatingIssuesMetric, CountUsersWithMlCandidatesMetric, CsvImportsUsersMetric, DistinctCountProjectsWithExpirationPolicyMetric, GitlabForJiraAppDirectInstallationsCountMetric, GitlabForJiraAppProxyInstallationsCountMetric, GroupImportsUsersMetric, IssuesWithAlertManagementAlertsMetric, JiraActiveIntegrationsMetric, JiraImportsFinishedMetric, JiraImportsFinishedProjectsMetric, JiraImportsTotalImportedIssuesCountMetric, JiraImportsUsersMetric, ProjectImportsCreatorsMetric

Constant Summary collapse

UnimplementedOperationError =

Usage Example

class CountUsersCreatingIssuesMetric < DatabaseMetric

operation :distinct_count, column: :author_id

relation do |database_time_constraints|
  ::Issue.where(database_time_constraints)
end

end

Class.new(StandardError)

Constants included from TimeFrame

TimeFrame::ALL_TIME_TIME_FRAME_NAME, TimeFrame::DEFAULT_TIMESTAMP_COLUMN, TimeFrame::SEVEN_DAYS_TIME_FRAME_NAME, TimeFrame::TWENTY_EIGHT_DAYS_TIME_FRAME_NAME

Constants included from Gitlab::Utils::UsageData

Gitlab::Utils::UsageData::DISTRIBUTED_HLL_FALLBACK, Gitlab::Utils::UsageData::FALLBACK, Gitlab::Utils::UsageData::HISTOGRAM_FALLBACK, Gitlab::Utils::UsageData::MAX_BUCKET_SIZE

Class Attribute Summary collapse

Attributes inherited from BaseMetric

#events, #metric_definition, #options, #time_frame

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseMetric

available?, #available?, #initialize

Methods included from TimeFrame

#monthly_time_range, #monthly_time_range_db_params, #weekly_time_range, #weekly_time_range_db_params

Methods included from Gitlab::Utils::UsageData

#add, #add_metric, #alt_usage_data, #average, #count, #distinct_count, #estimate_batch_distinct_count, #histogram, #maximum_id, #measure_duration, #metrics_collection_metadata, #minimum_id, #redis_usage_data, #sum, #track_usage_event, #with_finished_at, #with_metadata, #with_prometheus_client

Constructor Details

This class inherits a constructor from Gitlab::Usage::Metrics::Instrumentations::BaseMetric

Class Attribute Details

.cache_keyObject (readonly)

Returns the value of attribute cache_key.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def cache_key
  @cache_key
end

.columnObject (readonly)

Returns the value of attribute column.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def column
  @column
end

.metric_finishObject (readonly)

Returns the value of attribute metric_finish.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def metric_finish
  @metric_finish
end

.metric_operationObject (readonly)

Returns the value of attribute metric_operation.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def metric_operation
  @metric_operation
end

.metric_operation_blockObject (readonly)

Returns the value of attribute metric_operation_block.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def metric_operation_block
  @metric_operation_block
end

.metric_relationObject (readonly)

Returns the value of attribute metric_relation.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def metric_relation
  @metric_relation
end

.metric_startObject (readonly)

Returns the value of attribute metric_start.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def metric_start
  @metric_start
end

.metric_timestamp_columnObject (readonly)

Returns the value of attribute metric_timestamp_column.



67
68
69
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 67

def metric_timestamp_column
  @metric_timestamp_column
end

Class Method Details

.cache_start_and_finish_as(cache_key) ⇒ Object



63
64
65
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 63

def cache_start_and_finish_as(cache_key)
  @cache_key = cache_key
end

.finish(&block) ⇒ Object



31
32
33
34
35
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 31

def finish(&block)
  return @metric_finish&.call unless block

  @metric_finish = block
end

.metric_options(&block) ⇒ Object



45
46
47
48
49
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 45

def metric_options(&block)
  return @metric_options&.call.to_h unless block

  @metric_options = block
end

.operation(symbol, column: nil, &block) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 55

def operation(symbol, column: nil, &block)
  raise UnimplementedOperationError unless symbol.in?(IMPLEMENTED_OPERATIONS)

  @metric_operation = symbol
  @column = column
  @metric_operation_block = block if block
end

.relation(relation_proc = nil, &block) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 37

def relation(relation_proc = nil, &block)
  metric_relation = relation_proc || block

  return unless metric_relation

  @metric_relation = metric_relation
end

.start(&block) ⇒ Object



25
26
27
28
29
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 25

def start(&block)
  return @metric_start&.call unless block

  @metric_start = block
end

.timestamp_column(symbol) ⇒ Object



51
52
53
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 51

def timestamp_column(symbol)
  @metric_timestamp_column = symbol
end

Instance Method Details

#instrumentationObject



88
89
90
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 88

def instrumentation
  to_sql
end

#to_sqlObject



84
85
86
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 84

def to_sql
  Gitlab::Usage::Metrics::Query.for(self.class.metric_operation, relation, self.class.column)
end

#valueObject



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 72

def value
  start, finish = get_or_cache_batch_ids

  method(self.class.metric_operation)
    .call(relation,
      self.class.column,
      start: start,
      finish: finish,
      **self.class.metric_options,
      &self.class.metric_operation_block)
end