gitlab-triage 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da8631c8e4a01092f91bba3be37db11cbadee2e321c62922f1a2a27ea3a98e41
4
- data.tar.gz: cc565d9cc79cbdfdbabaa5f86880172cd5ef711b3d8ac2286476a045ae1510fe
3
+ metadata.gz: cd48e4232bda87bda7044a5453a42c0a39b29ebe69cd5953048df8dd577c872f
4
+ data.tar.gz: d14d0e432023d50f6a11fcf3ff8ec223c3235ac5c53191cf2dd5babfbaeaa10b
5
5
  SHA512:
6
- metadata.gz: e2b39262189075194795e05df1adf15eaa86a987731834f821f3daa24e06642cbcc9b97a918cdae7827d4a89d29c204c4f6c939a1cdb597d8a665c0971116a4f
7
- data.tar.gz: 13aeac661214408c2584a6b41b9bbf9a69f1fb68e620f5f5fea08a9f74635315a0e8e03c84f86ab5ce84b71a32b206f368b433dfff90e2903d0e2eba625da4a2
6
+ metadata.gz: 9aa0e6f1062e6c39785b020c23c0c382a2387446fe77e29dd154cbe6530ee4cd6f873da842ab1abae04e2516cd4a7a2c070019ef8ebdce63b16eeb9becb5b5cb
7
+ data.tar.gz: 67fbbe46988133f88de13d8e066eb61da9cfbf025d1c4cd622a97e4c41420838a4d27ce1300fc88cacbb70a2447c46b3af84d342405206cd578c40b59d250dd0
@@ -39,7 +39,7 @@ module Gitlab
39
39
 
40
40
  assert_project_id!
41
41
  assert_token!
42
- require_ruby_file
42
+ require_ruby_files
43
43
  end
44
44
 
45
45
  def perform
@@ -75,10 +75,8 @@ module Gitlab
75
75
  raise ArgumentError, 'A token is needed (pass it with the `--token` option)!'
76
76
  end
77
77
 
78
- def require_ruby_file
79
- return unless options.require
80
-
81
- require options.require
78
+ def require_ruby_files
79
+ options.require_files.each(&method(:require))
82
80
  end
83
81
 
84
82
  def resource_rules
@@ -17,7 +17,7 @@ module Gitlab
17
17
  end
18
18
 
19
19
  def calculate
20
- context = Resource::Context.build(@resource, network: @network)
20
+ context = Resource::Context.build(@resource, network: @network, redact_confidentials: false)
21
21
 
22
22
  !!context.eval(@expression)
23
23
  end
@@ -10,6 +10,7 @@ module Gitlab
10
10
  include Retryable
11
11
 
12
12
  TokenNotFound = Class.new(StandardError)
13
+ MINIMUM_RATE_LIMIT = 25
13
14
 
14
15
  attr_reader :options, :adapter
15
16
 
@@ -44,6 +45,9 @@ module Gitlab
44
45
  else
45
46
  resources << results
46
47
  end
48
+
49
+ rate_limit_debug(response) if options.debug
50
+ rate_limit_wait(response)
47
51
  end while response.delete(:more_pages)
48
52
 
49
53
  resources.map!(&:with_indifferent_access)
@@ -52,14 +56,18 @@ module Gitlab
52
56
  end
53
57
 
54
58
  def post_api(url, body)
55
- execute_with_retry(Net::ReadTimeout) do
59
+ response = execute_with_retry(Net::ReadTimeout) do
56
60
  puts Gitlab::Triage::UI.debug "post_api: #{url}" if options.debug
57
61
 
58
62
  @adapter.post(token, url, body)
59
63
  end
60
64
 
65
+ rate_limit_debug(response) if options.debug
66
+ rate_limit_wait(response)
67
+
68
+ response.delete(:results).with_indifferent_access
61
69
  rescue Net::ReadTimeout
62
- false
70
+ {}
63
71
  end
64
72
 
65
73
  private
@@ -67,6 +75,18 @@ module Gitlab
67
75
  def token
68
76
  options.token || raise(TokenNotFound)
69
77
  end
78
+
79
+ def rate_limit_debug(response)
80
+ rate_limit_infos = "Rate limit remaining: #{response[:ratelimit_remaining]} (reset at #{response[:ratelimit_reset_at]})"
81
+ puts Gitlab::Triage::UI.debug "rate_limit_infos: #{rate_limit_infos}"
82
+ end
83
+
84
+ def rate_limit_wait(response)
85
+ return unless response.delete(:ratelimit_remaining) < MINIMUM_RATE_LIMIT
86
+
87
+ puts Gitlab::Triage::UI.debug "Rate limit almost exceeded, sleeping for #{response[:ratelimit_reset_at] - Time.now} seconds" if options.debug
88
+ sleep(1) until Time.now >= response[:ratelimit_reset_at]
89
+ end
70
90
  end
71
91
  end
72
92
  end
@@ -16,20 +16,19 @@ module Gitlab
16
16
  }
17
17
  )
18
18
 
19
- if response.response.is_a?(Net::HTTPUnauthorized)
20
- puts Gitlab::Triage::UI.debug response.inspect if options.debug
21
- raise 'The provided token is unauthorized!'
22
- end
19
+ raise_on_unauthorized_error!(response)
23
20
 
24
21
  {
25
22
  more_pages: (response.headers["x-next-page"].to_s != ""),
26
23
  next_page_url: url + "&page=#{response.headers['x-next-page']}",
27
- results: response.parsed_response
24
+ results: response.parsed_response,
25
+ ratelimit_remaining: response.headers["ratelimit-remaining"].to_i,
26
+ ratelimit_reset_at: Time.at(response.headers["ratelimit-reset"].to_i)
28
27
  }
29
28
  end
30
29
 
31
30
  def post(token, url, body)
32
- HTTParty.post(
31
+ response = HTTParty.post(
33
32
  url,
34
33
  body: body.to_json,
35
34
  headers: {
@@ -37,6 +36,23 @@ module Gitlab
37
36
  'PRIVATE-TOKEN' => token
38
37
  }
39
38
  )
39
+
40
+ raise_on_unauthorized_error!(response)
41
+
42
+ {
43
+ results: response.parsed_response,
44
+ ratelimit_remaining: response.headers["ratelimit-remaining"].to_i,
45
+ ratelimit_reset_at: Time.at(response.headers["ratelimit-reset"].to_i)
46
+ }
47
+ end
48
+
49
+ private
50
+
51
+ def raise_on_unauthorized_error!(response)
52
+ return unless response.response.is_a?(Net::HTTPUnauthorized)
53
+
54
+ puts Gitlab::Triage::UI.debug response.inspect if options.debug
55
+ raise 'The provided token is unauthorized!'
40
56
  end
41
57
  end
42
58
  end
@@ -20,12 +20,18 @@ module Gitlab
20
20
  {
21
21
  more_pages: false,
22
22
  next_page_url: nil,
23
- results: results
23
+ results: results,
24
+ ratelimit_remaining: 600,
25
+ ratelimit_reset_at: Time.now
24
26
  }
25
27
  end
26
28
 
27
29
  def post(token, url, body)
28
- # no-op in tests
30
+ {
31
+ results: {},
32
+ ratelimit_remaining: 600,
33
+ ratelimit_reset_at: Time.now
34
+ }
29
35
  end
30
36
  end
31
37
  end
@@ -48,7 +48,7 @@ module Gitlab
48
48
  end
49
49
 
50
50
  opts.on('-r', '--require [string]', String, 'Require a file before performing') do |value|
51
- options.require = value
51
+ options.require_files << value
52
52
  end
53
53
 
54
54
  opts.on('-d', '--debug', 'Print debug information') do |value|
@@ -8,7 +8,7 @@ module Gitlab
8
8
  :token,
9
9
  :debug,
10
10
  :host_url,
11
- :require,
11
+ :require_files,
12
12
  :api_version
13
13
  ) do
14
14
  def initialize(*args)
@@ -18,6 +18,7 @@ module Gitlab
18
18
  self.host_url ||= 'https://gitlab.com'
19
19
  self.api_version ||= 'v4'
20
20
  self.source ||= 'projects'
21
+ self.require_files ||= []
21
22
  end
22
23
  end
23
24
  end
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module Triage
3
- VERSION = '1.1.1'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-triage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-04 00:00:00.000000000 Z
11
+ date: 2019-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport