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, BatchedBackgroundMigrationFailedJobsMetric, BatchedBackgroundMigrationsMetric, CountAllCiBuildsMetric, CountBoardsMetric, CountBulkImportsEntitiesMetric, CountCiInternalPipelinesMetric, CountCiRunnersGroupTypeActiveMetric, CountCiRunnersGroupTypeActiveOnlineMetric, CountCiRunnersInstanceTypeActiveMetric, CountCiRunnersInstanceTypeActiveOnlineMetric, CountCiRunnersMetric, CountCiRunnersProjectTypeActiveMetric, CountCiRunnersProjectTypeActiveOnlineMetric, CountConnectedAgentsMetric, CountDeploymentsMetric, CountImportedProjectsMetric, CountImportedProjectsTotalMetric, CountIssuesCreatedManuallyFromAlertsMetric, CountIssuesMetric, CountMlCandidatesMetric, CountMlExperimentsMetric, CountPersonalSnippetsMetric, CountProjectSnippetsMetric, CountProjectsWithAlertsCreatedMetric, CountProjectsWithJiraDvcsIntegrationMetric, CountProjectsWithMlCandidatesMetric, CountProjectsWithMlExperimentsMetric, CountProjectsWithMonitorEnabledMetric, CountSlackAppInstallationsGbpMetric, CountSlackAppInstallationsMetric, CountSnippetsMetric, CountUserAuthMetric, CountUsersAssociatingMilestonesToReleasesMetric, CountUsersCreatingIssuesMetric, CountUsersWithMlCandidatesMetric, DistinctCountProjectsWithExpirationPolicyMetric, GitlabForJiraAppDirectInstallationsCountMetric, GitlabForJiraAppProxyInstallationsCountMetric, InProductMarketingEmailCtaClickedMetric, InProductMarketingEmailSentMetric, IssuesWithAlertManagementAlertsMetric, IssuesWithPrometheusAlertEvents, JiraActiveIntegrationsMetric, JiraImportsTotalImportedIssuesCountMetric

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, #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, #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.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def cache_key
  @cache_key
end

.columnObject (readonly)

Returns the value of attribute column.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def column
  @column
end

.metric_finishObject (readonly)

Returns the value of attribute metric_finish.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def metric_finish
  @metric_finish
end

.metric_operationObject (readonly)

Returns the value of attribute metric_operation.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def metric_operation
  @metric_operation
end

.metric_operation_blockObject (readonly)

Returns the value of attribute metric_operation_block.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def metric_operation_block
  @metric_operation_block
end

.metric_relationObject (readonly)

Returns the value of attribute metric_relation.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def metric_relation
  @metric_relation
end

.metric_startObject (readonly)

Returns the value of attribute metric_start.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def metric_start
  @metric_start
end

.metric_timestamp_columnObject (readonly)

Returns the value of attribute metric_timestamp_column.



65
66
67
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 65

def metric_timestamp_column
  @metric_timestamp_column
end

Class Method Details

.cache_start_and_finish_as(cache_key) ⇒ Object



61
62
63
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 61

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



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

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

  @metric_options = block
end

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



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

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
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 37

def relation(relation_proc = nil, &block)
  return unless relation_proc || block

  @metric_relation = (relation_proc || block)
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



49
50
51
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 49

def timestamp_column(symbol)
  @metric_timestamp_column = symbol
end

Instance Method Details

#instrumentationObject



86
87
88
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 86

def instrumentation
  to_sql
end

#to_sqlObject



82
83
84
# File 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb', line 82

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

#valueObject



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

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