gitlab-qa 7.20.0 → 7.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f7b10d593ddaeee4b4e931904d7332f845b1fb8f816e5e42d3c79e22634ff680
4
- data.tar.gz: 93b081c8de2108f2b9f17462319b3ac5467671a3b775ab597fbe317b0f7646aa
3
+ metadata.gz: 7df136e02dc7640dd456d9e6f0f089cfdf105c7e8d4983ee41e487081eadb3eb
4
+ data.tar.gz: 9ab31d33024c1a2e6826213028e4a1f1c3ab69c8ece4d230be79a4f3b1f15108
5
5
  SHA512:
6
- metadata.gz: 1f590d463f6fea2e69dba2ad64ac15274011a63863db9c8d9544e24e07c91a683a92709b96f0628d114da4d825bc5a4e5104bdf9c6bbd57750ef2b3f20007ee8
7
- data.tar.gz: 681dd9b8d51cc491a75a4beba08391ffecbb7ecef6218c9db51854d452e4a7a2bf9e9fe36e7e9603608be4d5468d6ecf0462951004eb1f68155715d2a9497216
6
+ metadata.gz: 5420d4ffea08d120903f51fa9d590b20cfee1686ecdff384ac2ff931ba1ead170409a412e3c45cb96f6310359540d245624bf05fce654f106030550d68ff8928
7
+ data.tar.gz: 459ce3e23b1113bcb52b2413d6cae58dc9946976e7615833fd5fbe9d0b979d0894c964fc6565cb2a0e13e9953369c4073b6a5ec00510b24edec3cd4b2ad00a61
data/.gitlab-ci.yml CHANGED
@@ -21,9 +21,6 @@ default:
21
21
  - bundle version
22
22
  - bundle config path vendor
23
23
  - bundle install --jobs=$(nproc) --retry=3 --quiet && bundle check
24
- - if [ -n "$TRIGGERED_USER" ] && [ -n "$TRIGGER_SOURCE" ]; then
25
- echo "Pipeline triggered by $TRIGGERED_USER at $TRIGGER_SOURCE";
26
- fi
27
24
  - export LANG=C.UTF-8
28
25
 
29
26
  workflow:
@@ -0,0 +1,174 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tempfile'
4
+
5
+ module Gitlab
6
+ module QA
7
+ module Component
8
+ # Component to collect docker metrics
9
+ #
10
+ class Telegraf < Base
11
+ DOCKER_IMAGE = 'telegraf'
12
+ DOCKER_IMAGE_TAG = '1.21-alpine'
13
+ LOG_DIR = '/etc/telegraf/log'
14
+
15
+ def initialize
16
+ super
17
+
18
+ @name = DOCKER_IMAGE
19
+ @host_log_dir = "#{Runtime::Env.host_artifacts_dir}/#{@name}"
20
+ @environment = Runtime::Env.variables.slice(
21
+ 'QA_INFLUXDB_TOKEN',
22
+ 'QA_INFLUXDB_URL',
23
+ 'QA_RUN_TYPE',
24
+ 'CI_JOB_NAME',
25
+ 'CI_PIPELINE_ID'
26
+ )
27
+ end
28
+
29
+ attr_reader :name, :host_log_dir, :telegraf_config
30
+
31
+ # Start container
32
+ #
33
+ # @return [void]
34
+ def start
35
+ docker.run(image: image, tag: tag) do |command|
36
+ set_command_args(command)
37
+ set_volumes(command)
38
+ set_environment(command)
39
+ end
40
+ end
41
+
42
+ # Run prepare commands
43
+ #
44
+ # @return [void]
45
+ def prepare
46
+ @telegraf_config = File.open("#{Dir.mktmpdir(nil, ENV['CI_BUILDS_DIR'])}/telegraf.conf", 'w') do |file|
47
+ file.write(config)
48
+ file.path
49
+ end
50
+ FileUtils.mkdir_p(host_log_dir)
51
+
52
+ prepare_docker_image
53
+ prepare_docker_container
54
+ end
55
+
56
+ # Run teardown
57
+ #
58
+ # @return [void]
59
+ def teardown
60
+ return unless run_telegraf?
61
+
62
+ super
63
+ end
64
+
65
+ private
66
+
67
+ # Set custom run command arguments
68
+ #
69
+ # @param [Docker::Command] command
70
+ # @return [void]
71
+ def set_command_args(command)
72
+ command << '-d'
73
+ command << "--name #{name}"
74
+ command << "--user root"
75
+ command << "--entrypoint telegraf"
76
+ end
77
+
78
+ # Set volumes
79
+ #
80
+ # @param [Docker::Command] command
81
+ # @return [void]
82
+ def set_volumes(command)
83
+ command.volume(host_log_dir, LOG_DIR)
84
+ command.volume('/var/run/docker.sock', '/var/run/docker.sock')
85
+ command.volume(telegraf_config, '/etc/telegraf/telegraf.conf', :ro)
86
+ end
87
+
88
+ # Set environment variables
89
+ #
90
+ # @param [Docker::Command] command
91
+ # @return [void]
92
+ def set_environment(command)
93
+ environment.each { |k, v| command.env(k, v) }
94
+ end
95
+
96
+ # Run main entrypoint
97
+ #
98
+ # @return [void]
99
+ def instance_no_teardown
100
+ if run_telegraf?
101
+ super
102
+ else
103
+ Runtime::Logger.debug("Skipping starting telegraf container!")
104
+ yield self if block_given?
105
+ end
106
+ end
107
+
108
+ # Should telegraf be started
109
+ #
110
+ # Run only on CI and skip if metrics explicitly disabled, run_type not set or influx params missing
111
+ #
112
+ # @return [Boolean]
113
+ def run_telegraf?
114
+ Runtime::Env.ci && Runtime::Env.qa_export_test_metrics? && Runtime::Env.qa_run_type && !missing_influx_config?
115
+ end
116
+
117
+ # Influxdb config params missing
118
+ #
119
+ # @return [Boolean]
120
+ def missing_influx_config?
121
+ environment.slice('QA_INFLUXDB_TOKEN', 'QA_INFLUXDB_URL').any? { |_k, v| v.blank? }
122
+ end
123
+
124
+ # Telegraf configuration
125
+ #
126
+ # @return [String]
127
+ def config
128
+ <<~CONFIG
129
+ [global_tags]
130
+ run_type = "${QA_RUN_TYPE}"
131
+ pipeline_id = "${CI_PIPELINE_ID}"
132
+ job_name = "${CI_JOB_NAME}"
133
+
134
+ [agent]
135
+ interval = "1s"
136
+ round_interval = true
137
+ metric_batch_size = 1000
138
+ metric_buffer_limit = 10000
139
+ collection_jitter = "0s"
140
+ flush_interval = "10s"
141
+ flush_jitter = "0s"
142
+ precision = ""
143
+ debug = true
144
+ logtarget = "file"
145
+ logfile = "#{LOG_DIR}/telegraf.log"
146
+ hostname = ""
147
+ omit_hostname = false
148
+
149
+ [[outputs.influxdb_v2]]
150
+ urls = ["${QA_INFLUXDB_URL}"]
151
+ token = "${QA_INFLUXDB_TOKEN}"
152
+ organization = "gitlab-qa"
153
+ bucket = "test-env-stats"
154
+
155
+ [[inputs.docker]]
156
+ endpoint = "unix:///var/run/docker.sock"
157
+ gather_services = false
158
+ container_names = []
159
+ source_tag = false
160
+ container_name_include = ["gitlab-{ce,ee}-*", "gitlab-{ce,ee}-qa-*"]
161
+ container_name_exclude = []
162
+ timeout = "5s"
163
+ perdevice = false
164
+ perdevice_include = []
165
+ total = true
166
+ total_include = ["cpu", "blkio", "network"]
167
+ docker_label_include = []
168
+ docker_label_exclude = []
169
+ CONFIG
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'erb'
4
+ require 'date'
4
5
 
5
6
  module Gitlab
6
7
  module QA
@@ -24,7 +25,7 @@ module Gitlab
24
25
  end
25
26
 
26
27
  issue = gitlab.create_issue(
27
- title: "Test session report | #{pipeline}",
28
+ title: "#{Time.now.strftime('%Y-%m-%d')} Test session report | #{pipeline}",
28
29
  description: generate_description(tests),
29
30
  labels: ['Quality', 'QA', 'triage report', pipeline_name_label]
30
31
  )
@@ -122,7 +122,7 @@ module Gitlab
122
122
  "found:canary.staging.gitlab.com"
123
123
  when 'preprod'
124
124
  'found:pre.gitlab.com'
125
- when 'staging-orchestrated', 'nightly', QA::Runtime::Env.default_branch, 'staging-ref', 'release'
125
+ when 'nightly', QA::Runtime::Env.default_branch, 'staging-ref', 'release'
126
126
  "found:#{pipeline}"
127
127
  else
128
128
  raise "No `found:*` label for the `#{pipeline}` pipeline!"
@@ -62,16 +62,17 @@ module Gitlab
62
62
  args = remove_gitlab_qa_args(args)
63
63
 
64
64
  if args.size >= 1
65
+ scenario = Scenario.const_get(args.shift)
66
+
65
67
  load_omnibus_configurations
68
+ load_telegraf(scenario)
66
69
 
67
70
  begin
68
71
  @active_configurators.compact.each do |configurator|
69
72
  configurator.instance(skip_teardown: true)
70
73
  end
71
74
 
72
- Scenario
73
- .const_get(args.shift)
74
- .perform(*args)
75
+ scenario.perform(*args)
75
76
  ensure
76
77
  @active_configurators.compact.each(&:teardown)
77
78
  end
@@ -100,6 +101,18 @@ module Gitlab
100
101
  end.compact
101
102
  end
102
103
 
104
+ # Start telegraf agent for metrics collection
105
+ #
106
+ # Do not load when running against external instance
107
+ #
108
+ # @param [Class] scenario
109
+ # @return [void]
110
+ def self.load_telegraf(scenario)
111
+ return if scenario <= Scenario::Test::Instance::DeploymentBase || scenario == Scenario::Test::Instance::Any
112
+
113
+ @active_configurators << Component::Telegraf.new
114
+ end
115
+
103
116
  def self.load_omnibus_configurations
104
117
  # OmnibusConfiguration::Test => --test
105
118
  # OmnibusConfiguration::HelloThere => --hello_there
@@ -142,16 +142,12 @@ module Gitlab
142
142
  end
143
143
 
144
144
  def variables
145
- vars = {}
146
-
147
- ENV_VARIABLES.each do |name, attribute|
145
+ ENV_VARIABLES.each_with_object({}) do |(name, attribute), vars|
148
146
  # Variables that are overridden in the environment take precedence
149
147
  # over the defaults specified by the QA runtime.
150
148
  value = env_var_name_if_defined(name) || send(attribute) # rubocop:disable GitlabSecurity/PublicSend
151
149
  vars[name] = value if value
152
150
  end
153
-
154
- vars
155
151
  end
156
152
 
157
153
  def debug?
@@ -179,15 +175,7 @@ module Gitlab
179
175
  end
180
176
 
181
177
  def pipeline_from_project_name
182
- if ci_project_name.to_s.start_with?('gitlab-qa')
183
- if env_var_value_if_defined('TOP_UPSTREAM_SOURCE_JOB').to_s.start_with?('https://ops.gitlab.net')
184
- 'staging-orchestrated'
185
- else
186
- QA::Runtime::Env.default_branch
187
- end
188
- else
189
- ci_project_name
190
- end
178
+ ci_project_name.to_s.start_with?('gitlab-qa') ? QA::Runtime::Env.default_branch : ci_project_name
191
179
  end
192
180
 
193
181
  def run_id
@@ -314,6 +302,10 @@ module Gitlab
314
302
  enabled?(env_var_value_if_defined('TEST_LICENSE_MODE'), default: false)
315
303
  end
316
304
 
305
+ def qa_export_test_metrics?
306
+ enabled?(env_var_value_if_defined('QA_EXPORT_TEST_METRICS'), default: true)
307
+ end
308
+
317
309
  private
318
310
 
319
311
  def enabled?(value, default: true)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '7.20.0'
5
+ VERSION = '7.21.0'
6
6
  end
7
7
  end
data/lib/gitlab/qa.rb CHANGED
@@ -99,6 +99,7 @@ module Gitlab
99
99
  autoload :MailHog, 'gitlab/qa/component/mail_hog'
100
100
  autoload :Jira, 'gitlab/qa/component/jira'
101
101
  autoload :PostgreSQL, 'gitlab/qa/component/postgresql'
102
+ autoload :Telegraf, 'gitlab/qa/component/telegraf'
102
103
  end
103
104
 
104
105
  module Support
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-qa
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.20.0
4
+ version: 7.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-25 00:00:00.000000000 Z
11
+ date: 2022-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -256,6 +256,7 @@ files:
256
256
  - lib/gitlab/qa/component/specs.rb
257
257
  - lib/gitlab/qa/component/staging.rb
258
258
  - lib/gitlab/qa/component/staging_ref.rb
259
+ - lib/gitlab/qa/component/telegraf.rb
259
260
  - lib/gitlab/qa/docker/command.rb
260
261
  - lib/gitlab/qa/docker/engine.rb
261
262
  - lib/gitlab/qa/docker/shellout.rb