Module: GitlabQuality::TestTooling::TestMetricsExporter::Utils

Included in:
Formatter
Defined in:
lib/gitlab_quality/test_tooling/test_metrics_exporter/utils.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clickhouse_clientClickHouse::Client

Configured clickhouse client

Returns:



24
25
26
27
28
29
30
31
32
# File 'lib/gitlab_quality/test_tooling/test_metrics_exporter/utils.rb', line 24

def clickhouse_client
  ClickHouse::Client.new(
    url: config.clickhouse_config.url,
    database: config.clickhouse_config.database,
    username: config.clickhouse_config.username,
    password: config.clickhouse_config.password,
    logger: logger
  )
end

.configConfig

Instance of metrics exporter configuration

Returns:



10
11
12
# File 'lib/gitlab_quality/test_tooling/test_metrics_exporter/utils.rb', line 10

def config
  Config.configuration
end

.loggerLogger

Configured logger instance

Returns:

  • (Logger)


17
18
19
# File 'lib/gitlab_quality/test_tooling/test_metrics_exporter/utils.rb', line 17

def logger
  config.logger
end

Instance Method Details

#create_clickhouse_metrics_tablevoid

This method returns an undefined value.

Create table for metrics export using current ClickHouse configuration

This method is mostly for schema documentation but it can be used together with initial_run! method in



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/gitlab_quality/test_tooling/test_metrics_exporter/utils.rb', line 50

def create_clickhouse_metrics_table
  table_name = config.clickhouse_config.table_name

  clickhouse_client.query(<<~SQL)
    CREATE TABLE IF NOT EXISTS #{table_name}
    (
        timestamp DateTime64(6, 'UTC'),
        id String,
        name String,
        hash String,
        file_path String,
        status LowCardinality(String),
        run_time UInt32,
        location String,
        quarantined Bool,
        test_retried Bool,
        feature_category LowCardinality(String) DEFAULT 'unknown',
        run_type LowCardinality(String) DEFAULT 'unknown',
        spec_file_path_prefix LowCardinality(String) DEFAULT '',
        ci_project_id UInt32,
        ci_job_name LowCardinality(String),
        ci_job_id UInt64,
        ci_pipeline_id UInt64,
        ci_merge_request_iid UInt32 DEFAULT 0,
        ci_project_path LowCardinality(String),
        ci_branch String,
        ci_target_branch LowCardinality(String),
        ci_server_url LowCardinality(String) DEFAULT 'https://gitlab.com',
        exception_class String DEFAULT '',
        exception_classes Array(String) DEFAULT [],
        failure_exception String DEFAULT ''
    )
    ENGINE = MergeTree()
    PARTITION BY toYYYYMM(timestamp)
    ORDER BY (ci_project_path, status, run_type, feature_category, file_path, timestamp, ci_pipeline_id)
    SETTINGS index_granularity = 8192;
  SQL
  return if config..empty?

  clickhouse_client.query(
    "ALTER TABLE #{table_name} #{config..map { |column| "ADD COLUMN IF NOT EXISTS #{column}" }.join(', ')};"
  )
end

#gcs_clientFog::Storage::Google, GcsTools::GCSMockClient

GCS client instance

Returns:



37
38
39
40
41
42
43
# File 'lib/gitlab_quality/test_tooling/test_metrics_exporter/utils.rb', line 37

def gcs_client
  GcsTools.gcs_client(
    project_id: config.gcs_config.project_id,
    credentials: config.gcs_config.credentials,
    dry_run: config.gcs_config.dry_run
  )
end