freno-client 0.7.0 → 0.8.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: cdef62141f54dfa80e9f96576cbb35b907fe80373befc8b3afda3500c568bc75
4
- data.tar.gz: 8a0a8d5305e290776043c094dc1186004c73dda958495e807a51b689e5937b3a
3
+ metadata.gz: b67b5e48efee8e0a92ee1a1ef8c4b464b8bfe7001b31a2e53f6fc59aaee2fbc4
4
+ data.tar.gz: 00f039825fdcc34faabb9028e0e74db49e4ebba1490c6f50e135272564f97a7e
5
5
  SHA512:
6
- metadata.gz: ef4ff9cd19b42084aa7f672308b08943ef85a4b1556664dca22c1ac4b75e0a86af4279eafdb28c603edf58fd02386a194fc1221a17d32f15946ffcecc8cca931
7
- data.tar.gz: e4084af06baedf9294589fa0690887f1c514acaf76801974358b1c560a18f6d1bf71b8313c3894fa29958fbc6676b07617f957e5e928952bdf85aa2a1c44b719
6
+ metadata.gz: 37abf885c12930338060fa3b075bcbb832eacc7197a27dd7546bee2f4b49e1fb3f8476b69babee89538251b637bf077ae21138ec5fe20067593da71aec457dd2
7
+ data.tar.gz: a9e5de834594a57be0db6de4e229536c2a7ad1f99a20d11c4bce96e62efb183c0462bb19c615783a25019acd4d90920658b7a3419d578eacf91dd64f8ce403e8
data/.gitignore CHANGED
@@ -8,6 +8,5 @@
8
8
  /pkg/
9
9
  /spec/reports/
10
10
  /tmp/
11
- /bin/
12
11
  /vendor/gems
13
12
  .ruby-version
@@ -1,182 +1,132 @@
1
+ require: rubocop-performance
2
+
1
3
  AllCops:
2
4
  DisabledByDefault: true
5
+ TargetRubyVersion: 2.5
3
6
 
4
7
  Bundler/DuplicatedGem:
5
8
  Enabled: true
6
-
7
9
  Bundler/OrderedGems:
8
10
  Enabled: true
9
11
 
10
- Lint/CircularArgumentReference:
12
+ Layout/BlockAlignment:
13
+ Enabled: true
14
+ Layout/BlockEndNewline:
15
+ Enabled: true
16
+ Layout/ConditionPosition:
17
+ Enabled: true
18
+ Layout/DefEndAlignment:
19
+ Enabled: true
20
+ Layout/EndOfLine:
21
+ Enabled: true
22
+ Layout/IndentationStyle:
23
+ Enabled: true
24
+ Layout/InitialIndentation:
25
+ Enabled: true
26
+ Layout/SpaceAfterColon:
27
+ Enabled: true
28
+ Layout/SpaceAfterComma:
29
+ Enabled: true
30
+ Layout/SpaceAfterMethodName:
31
+ Enabled: true
32
+ Layout/SpaceAfterNot:
33
+ Enabled: true
34
+ Layout/SpaceAfterSemicolon:
35
+ Enabled: true
36
+ Layout/SpaceAroundBlockParameters:
37
+ Enabled: true
38
+ Layout/SpaceAroundEqualsInParameterDefault:
39
+ Enabled: true
40
+ Layout/SpaceInsideArrayPercentLiteral:
41
+ Enabled: true
42
+ Layout/SpaceInsideParens:
43
+ Enabled: true
44
+ Layout/SpaceInsideRangeLiteral:
45
+ Enabled: true
46
+ Layout/TrailingEmptyLines:
47
+ Enabled: true
48
+ Layout/TrailingWhitespace:
11
49
  Enabled: true
12
50
 
51
+ Lint/CircularArgumentReference:
52
+ Enabled: true
13
53
  Lint/Debugger:
14
54
  Enabled: true
15
-
16
55
  Lint/DeprecatedClassMethods:
17
56
  Enabled: true
18
-
19
- Lint/DuplicateMethods:
57
+ Lint/DuplicateHashKey:
20
58
  Enabled: true
21
-
22
- Lint/DuplicatedKey:
59
+ Lint/DuplicateMethods:
23
60
  Enabled: true
24
-
25
61
  Lint/EachWithObjectArgument:
26
62
  Enabled: true
27
-
28
63
  Lint/ElseLayout:
29
64
  Enabled: true
30
-
31
65
  Lint/EmptyEnsure:
32
66
  Enabled: true
33
-
34
- Lint/EndInMethod:
35
- Enabled: true
36
-
37
67
  Lint/EmptyInterpolation:
38
68
  Enabled: true
39
-
40
69
  Lint/EnsureReturn:
41
70
  Enabled: true
42
-
43
- Lint/FloatOutOfRange:
44
- Enabled: true
45
-
46
71
  Lint/FlipFlop:
47
72
  Enabled: true
48
-
49
- Lint/FormatParameterMismatch:
73
+ Lint/FloatOutOfRange:
50
74
  Enabled: true
51
-
52
- Style/HashSyntax:
75
+ Lint/FormatParameterMismatch:
53
76
  Enabled: true
54
- EnforcedStyle: ruby19
55
-
56
77
  Lint/LiteralInInterpolation:
57
78
  Enabled: true
58
-
59
79
  Lint/Loop:
60
80
  Enabled: true
61
-
62
81
  Lint/NextWithoutAccumulator:
63
82
  Enabled: true
64
-
65
83
  Lint/RandOne:
66
84
  Enabled: true
67
-
85
+ Lint/RedundantSplatExpansion:
86
+ Enabled: true
87
+ Lint/RedundantStringCoercion:
88
+ Enabled: true
68
89
  Lint/RequireParentheses:
69
90
  Enabled: true
70
-
71
91
  Lint/RescueException:
72
92
  Enabled: true
73
-
74
- Lint/StringConversionInInterpolation:
75
- Enabled: true
76
-
77
93
  Lint/UnderscorePrefixedVariableName:
78
94
  Enabled: true
79
-
80
- Lint/UnneededSplatExpansion:
81
- Enabled: true
82
-
83
95
  Lint/UnreachableCode:
84
96
  Enabled: true
85
-
86
97
  Lint/UselessComparison:
87
98
  Enabled: true
88
-
89
99
  Lint/UselessSetterCall:
90
100
  Enabled: true
91
-
92
101
  Lint/Void:
93
102
  Enabled: true
94
103
 
95
- Metrics/AbcSize:
96
- Enabled: false
97
-
98
- Metrics/BlockLength:
99
- Enabled: false
100
-
101
- Metrics/BlockNesting:
102
- Enabled: false
103
-
104
- Metrics/ClassLength:
105
- Enabled: false
106
-
107
- Metrics/CyclomaticComplexity:
108
- Enabled: false
109
-
110
- Metrics/LineLength:
111
- Enabled: false
112
-
113
- Metrics/MethodLength:
114
- Enabled: false
115
-
116
- Metrics/ModuleLength:
117
- Enabled: false
118
-
119
- Metrics/ParameterLists:
120
- Enabled: false
121
-
122
- Metrics/PerceivedComplexity:
123
- Enabled: false
124
-
125
104
  Naming/AsciiIdentifiers:
126
105
  Enabled: true
127
-
128
106
  Naming/ClassAndModuleCamelCase:
129
107
  Enabled: true
130
-
131
108
  Naming/FileName:
132
109
  Enabled: true
133
-
134
110
  Naming/MethodName:
135
111
  Enabled: true
136
112
 
137
- Performance/CaseWhenSplat:
138
- Enabled: false
139
-
140
113
  Performance/Count:
141
114
  Enabled: true
142
-
143
115
  Performance/Detect:
144
116
  Enabled: true
145
-
146
117
  Performance/DoubleStartEndWith:
147
118
  Enabled: true
148
-
149
119
  Performance/EndWith:
150
120
  Enabled: true
151
-
152
121
  Performance/FlatMap:
153
122
  Enabled: true
154
-
155
- Performance/LstripRstrip:
156
- Enabled: true
157
-
158
- Performance/RangeInclude:
159
- Enabled: false
160
-
161
- Performance/RedundantMatch:
162
- Enabled: false
163
-
164
123
  Performance/RedundantMerge:
165
124
  Enabled: true
166
125
  MaxKeyValuePairs: 1
167
-
168
- Performance/RedundantSortBy:
169
- Enabled: true
170
-
171
126
  Performance/ReverseEach:
172
127
  Enabled: true
173
-
174
- Performance/Sample:
175
- Enabled: true
176
-
177
128
  Performance/Size:
178
129
  Enabled: true
179
-
180
130
  Performance/StartWith:
181
131
  Enabled: true
182
132
 
@@ -185,118 +135,45 @@ Security/Eval:
185
135
 
186
136
  Style/ArrayJoin:
187
137
  Enabled: true
188
-
189
138
  Style/BeginBlock:
190
139
  Enabled: true
191
-
192
140
  Style/BlockComments:
193
141
  Enabled: true
194
-
195
142
  Style/CaseEquality:
196
143
  Enabled: true
197
-
198
144
  Style/CharacterLiteral:
199
145
  Enabled: true
200
-
201
146
  Style/ClassMethods:
202
147
  Enabled: true
203
-
204
- Style/Copyright:
205
- Enabled: false
206
-
207
148
  Style/DefWithParentheses:
208
149
  Enabled: true
209
-
210
150
  Style/EndBlock:
211
151
  Enabled: true
212
-
213
152
  Style/For:
214
153
  Enabled: true
215
-
216
- Layout/BlockEndNewline:
217
- Enabled: true
218
-
219
- Layout/ConditionPosition:
220
- Enabled: true
221
-
222
- Layout/EndAlignment:
223
- Enabled: false
224
-
225
- Layout/EndOfLine:
226
- Enabled: true
227
-
228
- Layout/InitialIndentation:
154
+ Style/HashSyntax:
229
155
  Enabled: true
230
-
156
+ EnforcedStyle: ruby19
231
157
  Style/LambdaCall:
232
158
  Enabled: true
233
-
234
159
  Style/MethodCallWithoutArgsParentheses:
235
160
  Enabled: true
236
-
237
161
  Style/MethodDefParentheses:
238
162
  Enabled: true
239
-
240
163
  Style/MultilineIfThen:
241
164
  Enabled: true
242
-
243
165
  Style/NilComparison:
244
166
  Enabled: true
245
-
246
167
  Style/Not:
247
168
  Enabled: true
248
-
249
169
  Style/OneLineConditional:
250
170
  Enabled: true
251
-
252
- Layout/BlockAlignment:
253
- Enabled: true
254
-
255
- Layout/DefEndAlignment:
256
- Enabled: true
257
-
258
- Layout/SpaceAfterMethodName:
171
+ Style/RedundantSortBy:
259
172
  Enabled: true
260
-
261
- Layout/SpaceAfterColon:
173
+ Style/Sample:
262
174
  Enabled: true
263
-
264
- Layout/SpaceAfterComma:
265
- Enabled: true
266
-
267
- Layout/SpaceAfterNot:
268
- Enabled: true
269
-
270
- Layout/SpaceAfterSemicolon:
271
- Enabled: true
272
-
273
- Layout/SpaceAroundBlockParameters:
274
- Enabled: true
275
-
276
- Layout/SpaceAroundEqualsInParameterDefault:
277
- Enabled: true
278
-
279
- Layout/SpaceInsideArrayPercentLiteral:
280
- Enabled: true
281
-
282
- Layout/SpaceInsideParens:
283
- Enabled: true
284
-
285
- Layout/SpaceInsideRangeLiteral:
286
- Enabled: true
287
-
288
175
  Style/StabbyLambdaParentheses:
289
176
  Enabled: true
290
-
291
177
  Style/StringLiterals:
292
178
  Enabled: true
293
179
  EnforcedStyle: double_quotes
294
-
295
- Layout/Tab:
296
- Enabled: true
297
-
298
- Layout/TrailingBlankLines:
299
- Enabled: true
300
-
301
- Layout/TrailingWhitespace:
302
- Enabled: true
@@ -1,13 +1,10 @@
1
- sudo: false
2
1
  language: ruby
3
2
  rvm:
4
- - 2.3
5
- - 2.4
6
3
  - 2.5
4
+ - 2.6
5
+ - 2.7
7
6
  - ruby-head
8
7
  matrix:
9
8
  allow_failures:
10
9
  - rvm: ruby-head
11
- script:
12
- - bundle exec rake
13
- - bundle exec rubocop
10
+ script: bin/test
@@ -12,8 +12,8 @@ Please note that this project is released with a [Contributor Code of Conduct][c
12
12
  ## Submitting a pull request
13
13
 
14
14
  0. [Fork][fork] and clone the freno-client repository
15
- 0. Configure and install the dependencies: `script/bootstrap`
16
- 0. Make sure the tests pass on your machine: `rake`
15
+ 0. Configure and install the dependencies: `bin/setup`
16
+ 0. Make sure the tests pass on your machine: `bin/test`
17
17
  0. Create a new branch: `git checkout -b my-branch-name`
18
18
  0. Make your change, add tests, and make sure the tests still pass
19
19
  0. Push to your fork and [submit a pull request][pr]
data/Gemfile CHANGED
@@ -2,7 +2,13 @@ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
+ group :development do
6
+ gem "rake"
7
+ end
8
+
5
9
  group :test do
10
+ gem "minitest", ">= 5"
6
11
  gem "mocha"
7
- gem "rubocop", require: false
12
+ gem "rubocop", "~> 0.85.1", require: false
13
+ gem "rubocop-performance", require: false
8
14
  end
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Freno Client [![Build Status](https://travis-ci.org/github/freno-client.svg)](https://travis-ci.org/github/freno-client)
1
+ # Freno Client [![Build Status](https://travis-ci.org/github/freno-client.svg?branch=master)](https://travis-ci.org/github/github/freno-client)
2
2
 
3
3
  A ruby client and throttling library for [Freno](https://github.com/github/freno): the cooperative, highly available throttler service.
4
4
 
@@ -355,7 +355,7 @@ end
355
355
 
356
356
  ## Development
357
357
 
358
- After checking out the repo, run `script/bootstrap` to install dependencies. Then, run `script/test` to run the tests. You can also run `script/console` for an interactive prompt that will allow you to experiment.
358
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
359
359
 
360
360
  ## Contributing
361
361
 
@@ -366,11 +366,11 @@ This repository is open to [contributions](CONTRIBUTING.md). Contributors are ex
366
366
  If you are the current maintainer of this gem:
367
367
 
368
368
  1. Create a branch for the release: `git checkout -b cut-release-vx.y.z`
369
- 1. Make sure your local dependencies are up to date: `script/bootstrap`
370
- 1. Ensure that tests are green: `bundle exec rake test`
369
+ 1. Make sure your local dependencies are up to date: `bin/setup`
370
+ 1. Ensure that tests are green: `bin/test`
371
371
  1. Bump gem version in `lib/freno/client/version.rb`
372
372
  1. Merge a PR to github/freno-client containing the changes in the version file
373
- 1. Run `script/release`
373
+ 1. Run `bin/release`
374
374
 
375
375
  ## License
376
376
 
data/Rakefile CHANGED
@@ -1,26 +1,6 @@
1
- $LOAD_PATH.push File.expand_path("../lib", __FILE__)
1
+ require "bundler/gem_tasks"
2
2
  require "rake/testtask"
3
- require "freno/client/version"
4
-
5
- # gem install pkg/*.gem
6
- # gem uninstall freno-client freno-throttler
7
- desc "Build gem into the pkg directory"
8
- task :build do
9
- FileUtils.rm_rf("pkg")
10
- Dir["*.gemspec"].each do |gemspec|
11
- system "gem build #{gemspec}"
12
- end
13
- FileUtils.mkdir_p("pkg")
14
- FileUtils.mv(Dir["*.gem"], "pkg")
15
- end
16
-
17
- desc "Tags version, pushes to remote, and pushes gem"
18
- task release: :build do
19
- sh "git", "tag", "v#{Freno::Client::VERSION}"
20
- sh "git push origin master"
21
- sh "git push origin v#{Freno::Client::VERSION}"
22
- sh "ls pkg/*.gem | xargs -n 1 gem push"
23
- end
3
+ require "rubocop/rake_task"
24
4
 
25
5
  Rake::TestTask.new(:test) do |t|
26
6
  t.libs << "test"
@@ -28,4 +8,6 @@ Rake::TestTask.new(:test) do |t|
28
8
  t.test_files = FileList["test/**/*_test.rb"]
29
9
  end
30
10
 
31
- task default: :test
11
+ RuboCop::RakeTask.new(:rubocop)
12
+
13
+ task default: [:test, :rubocop]
@@ -1,38 +1,24 @@
1
- # -- encoding: utf-8 --
2
- $:.unshift File.expand_path("../lib", __FILE__)
3
1
  require_relative "lib/freno/client/version"
4
2
 
5
3
  Gem::Specification.new do |spec|
6
- spec.name = "freno-client"
7
- spec.version = Freno::Client::VERSION
8
- spec.authors = ["Miguel Fernández"]
9
- spec.email = ["opensource+freno-client@github.com"]
4
+ spec.name = "freno-client"
5
+ spec.version = Freno::Client::VERSION
6
+ spec.author = "GitHub"
7
+ spec.email = "opensource+freno-client@github.com"
10
8
 
11
- spec.summary = %q{A library for interacting with freno, the throttler service}
12
- spec.description = %q{freno-client is a ruby library that interacts with
13
- Freno using HTTP. Freno is a throttling service and its
14
- source code is available at https://github.com/github/freno}
15
- spec.homepage = "https://github.com/github/freno-client"
16
- spec.license = "MIT"
17
- spec.required_ruby_version = ">= 2.0.0"
9
+ spec.summary = "A library for interacting with Freno, the throttler service"
10
+ spec.description = <<~DESC.gsub(/\s+/, " ")
11
+ freno-client is a Ruby library that interacts with Freno using HTTP.
12
+ Freno is a throttling service and its source code is available at
13
+ https://github.com/github/freno
14
+ DESC
18
15
 
19
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the "allowed_push_host"
20
- # to allow pushing to a single host or delete this section to allow pushing to any host.
21
- if spec.respond_to?(:metadata)
22
- spec.metadata["allowed_push_host"] = "https://rubygems.org"
23
- else
24
- raise "RubyGems 2.0 or newer is required to protect against " \
25
- "public gem pushes."
26
- end
16
+ spec.homepage = "https://github.com/github/freno-client"
17
+ spec.license = "MIT"
27
18
 
28
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
29
- f.match(%r{^(test|spec|features)/})
30
- end
31
- spec.executables = []
32
- spec.require_paths = ["lib"]
19
+ spec.required_ruby_version = ">= 2.5.0"
33
20
 
34
- spec.add_development_dependency "bundler"
35
- spec.add_development_dependency "rake"
36
- spec.add_development_dependency "minitest", "~> 5"
37
- spec.add_development_dependency "faraday", "~> 0"
21
+ spec.files = `git ls-files -z`.split("\x0").grep_v(/^(bin|test)/)
22
+
23
+ spec.add_dependency "faraday", "~> 0"
38
24
  end
@@ -31,6 +31,27 @@ module Freno
31
31
  # end
32
32
  # ```
33
33
  #
34
+ # Any options set on the Client are passed through to the initialization of
35
+ # each request:
36
+ #
37
+ # ```ruby
38
+ # freno = Freno::Client.new(faraday) do |client|
39
+ # client.options = { raise_on_timeout: false }
40
+ # end
41
+ # ```
42
+ #
43
+ # These default options can be overridden per request. The given options
44
+ # are merged into the defaults. The request below would be performed with
45
+ # the options: `{ raise_on_timeout: false, low_priority: true }`
46
+ #
47
+ # ```ruby
48
+ # freno = Freno::Client.new(faraday) do |client|
49
+ # client.options = { raise_on_timeout: false }
50
+ # end
51
+ #
52
+ # freno.check?(options: { low_priority: true })
53
+ # ```
54
+ #
34
55
  def initialize(faraday)
35
56
  @faraday = faraday
36
57
  @default_store_type = :mysql
@@ -47,8 +68,8 @@ module Freno
47
68
  #
48
69
  # Returns Result
49
70
  #
50
- def check(app: default_app, store_type: default_store_type, store_name: default_store_name, options: self.options)
51
- perform :check, app: app, store_type: store_type, store_name: store_name, options: options
71
+ def check(app: default_app, store_type: default_store_type, store_name: default_store_name, options: {})
72
+ perform :check, app: app, store_type: store_type, store_name: store_name, options: self.options.merge(options)
52
73
  end
53
74
 
54
75
  # Provides an interface to Freno"s check-read request
@@ -57,8 +78,8 @@ module Freno
57
78
  #
58
79
  # Returns Result
59
80
  #
60
- def check_read(threshold:, app: default_app, store_type: default_store_type, store_name: default_store_name, options: self.options)
61
- perform :check_read, app: app, store_type: store_type, store_name: store_name, threshold: threshold, options: options
81
+ def check_read(threshold:, app: default_app, store_type: default_store_type, store_name: default_store_name, options: {})
82
+ perform :check_read, app: app, store_type: store_type, store_name: store_name, threshold: threshold, options: self.options.merge(options)
62
83
  end
63
84
 
64
85
  # Implements a specific check request to retrieve the consolidated replication
@@ -68,8 +89,8 @@ module Freno
68
89
  #
69
90
  # Returns Float indicating the replication delay in seconds as reported by Freno.
70
91
  #
71
- def replication_delay(app: default_app, store_type: default_store_type, store_name: default_store_name, options: self.options)
72
- perform :replication_delay, app: app, store_type: store_type, store_name: store_name, options: options
92
+ def replication_delay(app: default_app, store_type: default_store_type, store_name: default_store_name, options: {})
93
+ perform :replication_delay, app: app, store_type: store_type, store_name: store_name, options: self.options.merge(options)
73
94
  end
74
95
 
75
96
 
@@ -77,8 +98,8 @@ module Freno
77
98
  #
78
99
  # Returns true or false.
79
100
  #
80
- def check?(app: default_app, store_type: default_store_type, store_name: default_store_name, options: self.options)
81
- check(app: app, store_type: store_type, store_name: store_name, options: options).ok?
101
+ def check?(app: default_app, store_type: default_store_type, store_name: default_store_name, options: {})
102
+ check(app: app, store_type: store_type, store_name: store_name, options: self.options.merge(options)).ok?
82
103
  end
83
104
 
84
105
  # Determines whether it"s OK to read from replicas as replication delay is below
@@ -86,8 +107,8 @@ module Freno
86
107
  #
87
108
  # Returns true or false.
88
109
  #
89
- def check_read?(threshold:, app: default_app, store_type: default_store_type, store_name: default_store_name, options: self.options)
90
- check_read(threshold: threshold, app: app, store_type: store_type, store_name: store_name, options: options).ok?
110
+ def check_read?(threshold:, app: default_app, store_type: default_store_type, store_name: default_store_name, options: {})
111
+ check_read(threshold: threshold, app: app, store_type: store_type, store_name: store_name, options: self.options.merge(options)).ok?
91
112
  end
92
113
 
93
114
  # Configures the client to extend the functionality of part or all the API
@@ -163,7 +184,7 @@ module Freno
163
184
  private
164
185
 
165
186
  def perform(request, **kwargs)
166
- decorated(request).perform(kwargs.merge(faraday: faraday))
187
+ decorated(request).perform(faraday: faraday, **kwargs)
167
188
  end
168
189
 
169
190
  def decorated(request)
@@ -12,7 +12,7 @@ module Freno
12
12
  attr_reader :raise_on_timeout
13
13
 
14
14
  def self.perform(**kwargs)
15
- new(kwargs).perform
15
+ new(**kwargs).perform
16
16
  end
17
17
 
18
18
  def initialize(**kwargs)
@@ -25,7 +25,7 @@ module Freno
25
25
  end
26
26
 
27
27
  def perform
28
- response = request(verb, path)
28
+ response = request(verb, path, params)
29
29
  process_response(response)
30
30
  rescue Faraday::TimeoutError => ex
31
31
  raise Freno::Error.new(ex) if raise_on_timeout
@@ -36,8 +36,8 @@ module Freno
36
36
 
37
37
  protected
38
38
 
39
- def request(verb, path)
40
- faraday.send(verb, path)
39
+ def request(verb, path, params)
40
+ faraday.send(verb, path, params)
41
41
  end
42
42
 
43
43
  def path
@@ -52,6 +52,10 @@ module Freno
52
52
  end
53
53
  end
54
54
 
55
+ def params
56
+ @params ||= {}
57
+ end
58
+
55
59
  def process_response(response)
56
60
  Result.from_faraday_response(response)
57
61
  end
@@ -16,6 +16,12 @@ module Freno
16
16
  present app: app, store_type: store_type, store_name: store_name
17
17
  end
18
18
 
19
+ # A low priority check is handled slightly differently by Freno. If
20
+ # the p=low GET parameter is passed, the check will fail for any app
21
+ # with failed checks within the last second. This failure is returned
22
+ # quickly, without checking the underlying metric.
23
+ params[:p] = "low" if options[:low_priority]
24
+
19
25
  @path = "check/#{app}/#{store_type}/#{store_name}"
20
26
  end
21
27
  end
@@ -17,6 +17,12 @@ module Freno
17
17
  present app: app, store_type: store_type, store_name: store_name, threshold: threshold
18
18
  end
19
19
 
20
+ # A low priority check is handled slightly differently by Freno. If
21
+ # the p=low GET parameter is passed, the check will fail for any app
22
+ # with failed checks within the last second. This failure is returned
23
+ # quickly, without checking the underlying metric.
24
+ params[:p] = "low" if options[:low_priority]
25
+
20
26
  @path = "check-read/#{app}/#{store_type}/#{store_name}/#{threshold.to_f.round(3)}"
21
27
  end
22
28
  end
@@ -1,5 +1,5 @@
1
1
  module Freno
2
2
  class Client
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
@@ -112,7 +112,17 @@ module Freno
112
112
  end
113
113
 
114
114
  # This method receives a context to infer the set of stores that it needs to
115
- # throttle writes to.
115
+ # throttle writes to. It can also receive additional options which are
116
+ # passed to the underlying Check request object:
117
+ #
118
+ # ```
119
+ # throttler = Throttler.new(client: freno_client, app: :my_app)
120
+ # data.find_in_batches do |batch|
121
+ # throttler.throttle(:mysqla, low_priority: true) do
122
+ # update(batch)
123
+ # end
124
+ # end
125
+ # ```
116
126
  #
117
127
  # With that information it asks freno whether all the stores are ok.
118
128
  # In case they are, it executes the given block.
@@ -141,7 +151,7 @@ module Freno
141
151
  # - "throttler.circuit_open" when the circuit breaker does not allow the
142
152
  # next request, before raising `CircuitOpen`
143
153
  #
144
- def throttle(context = nil)
154
+ def throttle(context = nil, **options)
145
155
  store_names = mapper.call(context)
146
156
  instrument(:called, store_names: store_names)
147
157
  waited = 0
@@ -152,7 +162,7 @@ module Freno
152
162
  raise CircuitOpen
153
163
  end
154
164
 
155
- if all_stores_ok?(store_names)
165
+ if all_stores_ok?(store_names, **options)
156
166
  instrument(:succeeded, store_names: store_names, waited: waited)
157
167
  circuit_breaker.success
158
168
  return yield
@@ -187,9 +197,9 @@ module Freno
187
197
  raise ArgumentError.new(errors.join("\n")) if errors.any?
188
198
  end
189
199
 
190
- def all_stores_ok?(store_names)
200
+ def all_stores_ok?(store_names, **options)
191
201
  store_names.all? do |store_name|
192
- client.check?(app: app, store_name: store_name)
202
+ client.check?(app: app, store_name: store_name, options: options)
193
203
  end
194
204
  rescue Freno::Error => e
195
205
  instrument(:freno_errored, store_names: store_names, error: e)
metadata CHANGED
@@ -1,57 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freno-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
- - Miguel Fernández
7
+ - GitHub
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-23 00:00:00.000000000 Z
11
+ date: 2020-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '5'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5'
55
13
  - !ruby/object:Gem::Dependency
56
14
  name: faraday
57
15
  requirement: !ruby/object:Gem::Requirement
@@ -59,19 +17,16 @@ dependencies:
59
17
  - - "~>"
60
18
  - !ruby/object:Gem::Version
61
19
  version: '0'
62
- type: :development
20
+ type: :runtime
63
21
  prerelease: false
64
22
  version_requirements: !ruby/object:Gem::Requirement
65
23
  requirements:
66
24
  - - "~>"
67
25
  - !ruby/object:Gem::Version
68
26
  version: '0'
69
- description: |-
70
- freno-client is a ruby library that interacts with
71
- Freno using HTTP. Freno is a throttling service and its
72
- source code is available at https://github.com/github/freno
73
- email:
74
- - opensource+freno-client@github.com
27
+ description: 'freno-client is a Ruby library that interacts with Freno using HTTP.
28
+ Freno is a throttling service and its source code is available at https://github.com/github/freno '
29
+ email: opensource+freno-client@github.com
75
30
  executables: []
76
31
  extensions: []
77
32
  extra_rdoc_files: []
@@ -85,8 +40,6 @@ files:
85
40
  - LICENSE.txt
86
41
  - README.md
87
42
  - Rakefile
88
- - bin/console
89
- - bin/setup
90
43
  - freno-client.gemspec
91
44
  - lib/freno/client.rb
92
45
  - lib/freno/client/errors.rb
@@ -102,16 +55,10 @@ files:
102
55
  - lib/freno/throttler/errors.rb
103
56
  - lib/freno/throttler/instrumenter.rb
104
57
  - lib/freno/throttler/mapper.rb
105
- - script/bootstrap
106
- - script/cibuild
107
- - script/cibuild-lint
108
- - script/console
109
- - script/release
110
58
  homepage: https://github.com/github/freno-client
111
59
  licenses:
112
60
  - MIT
113
- metadata:
114
- allowed_push_host: https://rubygems.org
61
+ metadata: {}
115
62
  post_install_message:
116
63
  rdoc_options: []
117
64
  require_paths:
@@ -120,16 +67,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
67
  requirements:
121
68
  - - ">="
122
69
  - !ruby/object:Gem::Version
123
- version: 2.0.0
70
+ version: 2.5.0
124
71
  required_rubygems_version: !ruby/object:Gem::Requirement
125
72
  requirements:
126
73
  - - ">="
127
74
  - !ruby/object:Gem::Version
128
75
  version: '0'
129
76
  requirements: []
130
- rubyforge_project:
131
- rubygems_version: 2.7.6
77
+ rubygems_version: 3.1.2
132
78
  signing_key:
133
79
  specification_version: 4
134
- summary: A library for interacting with freno, the throttler service
80
+ summary: A library for interacting with Freno, the throttler service
135
81
  test_files: []
@@ -1,9 +0,0 @@
1
- #!/bin/sh
2
-
3
- set -e
4
-
5
- cd "$(dirname "$0")/.."
6
-
7
- bundle config --local path vendor/gems
8
-
9
- bundle check > /dev/null 2>&1 || bundle install
@@ -1,19 +0,0 @@
1
- #!/bin/sh
2
-
3
- set -eu
4
-
5
- test -d "/usr/share/rbenv/shims" && {
6
- export PATH="/usr/share/rbenv/shims:$PATH"
7
- export RBENV_VERSION="2.4.1"
8
- }
9
-
10
- set -x
11
- git log -n 1 HEAD | cat
12
- ruby -v
13
- bundle -v
14
- set +x
15
-
16
- git clean -fd
17
-
18
- script/bootstrap
19
- bundle exec rake
@@ -1,19 +0,0 @@
1
- #!/bin/sh
2
-
3
- set -eu
4
-
5
- test -d "/usr/share/rbenv/shims" && {
6
- export PATH="/usr/share/rbenv/shims:$PATH"
7
- export RBENV_VERSION="2.4.1"
8
- }
9
-
10
- set -x
11
- git log -n 1 HEAD | cat
12
- ruby -v
13
- bundle -v
14
- set +x
15
-
16
- git clean -fd
17
-
18
- script/bootstrap
19
- bundle exec rubocop
@@ -1,2 +0,0 @@
1
- #!/bin/sh
2
- exec bundle exec irb -r "freno/client" "$@"
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle exec rake release