gitlab-triage 1.1.1 → 1.2.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: 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