fbe 0.23.1 → 0.23.3
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 +4 -4
- data/Gemfile.lock +3 -0
- data/fbe.gemspec +2 -0
- data/lib/fbe/middleware/trace.rb +5 -9
- data/lib/fbe/octo.rb +29 -12
- data/lib/fbe.rb +1 -1
- data/test/fbe/test_octo.rb +2 -4
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c12118d96ea30271b8b724c90d498eb3cc34a679bbef6be04153a53eec96e8e
|
4
|
+
data.tar.gz: 45363b59481ccff7b37d367acbabba81e7bddf0a649c204ac4e87559d9622729
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04f4c500161bbb87de44b25e1c160c2c03276c4f4737589dea8691c76f0a4a24824b74d4b278db5ac777e306d8c01b7879434ced44ee28b9efcd0cf96c4b0ea9
|
7
|
+
data.tar.gz: 1f75a0011d1be3518a72b99d8ffd5e6e4746b4a0a130d3e6507c145b389197419e788a2b0eb7e09fce0ba913ef0621be2754fcfa2000babb03bf58d0250b9748
|
data/Gemfile.lock
CHANGED
@@ -5,6 +5,7 @@ PATH
|
|
5
5
|
backtrace (~> 0.4)
|
6
6
|
baza.rb (~> 0.5)
|
7
7
|
decoor (~> 0.0)
|
8
|
+
ellipsized (~> 0.3)
|
8
9
|
factbase (~> 0.11)
|
9
10
|
faraday (~> 2.0)
|
10
11
|
faraday-http-cache (~> 2.5)
|
@@ -12,6 +13,7 @@ PATH
|
|
12
13
|
faraday-retry (~> 2.3)
|
13
14
|
filesize (~> 0.2)
|
14
15
|
graphql-client (~> 0.26)
|
16
|
+
intercepted (~> 0.2)
|
15
17
|
judges (~> 0.46)
|
16
18
|
liquid (~> 5.5)
|
17
19
|
loog (~> 0.6)
|
@@ -114,6 +116,7 @@ GEM
|
|
114
116
|
hashdiff (1.2.0)
|
115
117
|
i18n (1.14.7)
|
116
118
|
concurrent-ruby (~> 1.0)
|
119
|
+
intercepted (0.2.0)
|
117
120
|
iri (0.11.2)
|
118
121
|
json (2.12.2)
|
119
122
|
judges (0.50.5)
|
data/fbe.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_dependency 'backtrace', '~>0.4'
|
26
26
|
s.add_dependency 'baza.rb', '~>0.5'
|
27
27
|
s.add_dependency 'decoor', '~>0.0'
|
28
|
+
s.add_dependency 'ellipsized', '~>0.3'
|
28
29
|
s.add_dependency 'factbase', '~>0.11'
|
29
30
|
s.add_dependency 'faraday', '~>2.0'
|
30
31
|
s.add_dependency 'faraday-http-cache', '~>2.5'
|
@@ -32,6 +33,7 @@ Gem::Specification.new do |s|
|
|
32
33
|
s.add_dependency 'faraday-retry', '~>2.3'
|
33
34
|
s.add_dependency 'filesize', '~>0.2'
|
34
35
|
s.add_dependency 'graphql-client', '~>0.26'
|
36
|
+
s.add_dependency 'intercepted', '~>0.2'
|
35
37
|
s.add_dependency 'judges', '~>0.46'
|
36
38
|
s.add_dependency 'liquid', '~>5.5'
|
37
39
|
s.add_dependency 'loog', '~>0.6'
|
data/lib/fbe/middleware/trace.rb
CHANGED
@@ -31,11 +31,9 @@ class Fbe::Middleware::Trace < Faraday::Middleware
|
|
31
31
|
#
|
32
32
|
# @param [Object] app The next middleware in the stack
|
33
33
|
# @param [Array] trace The array to store trace entries
|
34
|
-
|
35
|
-
def initialize(app, trace, all: true)
|
34
|
+
def initialize(app, trace)
|
36
35
|
super(app)
|
37
36
|
@trace = trace
|
38
|
-
@all = all
|
39
37
|
end
|
40
38
|
|
41
39
|
# Processes the HTTP request and records trace information.
|
@@ -51,12 +49,10 @@ class Fbe::Middleware::Trace < Faraday::Middleware
|
|
51
49
|
@app.call(env).on_complete do |response_env|
|
52
50
|
finished = Time.now
|
53
51
|
duration = finished - entry[:started_at]
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
@trace << entry
|
59
|
-
end
|
52
|
+
entry[:status] = response_env.status
|
53
|
+
entry[:finished_at] = finished
|
54
|
+
entry[:duration] = duration
|
55
|
+
@trace << entry
|
60
56
|
end
|
61
57
|
end
|
62
58
|
end
|
data/lib/fbe/octo.rb
CHANGED
@@ -3,22 +3,25 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
require 'json'
|
7
6
|
require 'decoor'
|
7
|
+
require 'ellipsized'
|
8
8
|
require 'faraday/http_cache'
|
9
9
|
require 'faraday/retry'
|
10
10
|
require 'filesize'
|
11
|
+
require 'intercepted'
|
12
|
+
require 'json'
|
11
13
|
require 'loog'
|
12
14
|
require 'obk'
|
13
15
|
require 'octokit'
|
14
16
|
require 'others'
|
17
|
+
require 'tago'
|
15
18
|
require 'uri'
|
16
19
|
require 'verbose'
|
17
20
|
require_relative '../fbe'
|
18
21
|
require_relative 'middleware'
|
19
22
|
require_relative 'middleware/formatter'
|
20
|
-
require_relative 'middleware/trace'
|
21
23
|
require_relative 'middleware/sqlite_store'
|
24
|
+
require_relative 'middleware/trace'
|
22
25
|
|
23
26
|
# Makes a call to the GitHub API.
|
24
27
|
#
|
@@ -104,7 +107,7 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
|
|
104
107
|
end
|
105
108
|
builder.use(Octokit::Response::RaiseError)
|
106
109
|
builder.use(Faraday::Response::Logger, loog, formatter: Fbe::Middleware::Formatter)
|
107
|
-
builder.use(Fbe::Middleware::Trace, trace
|
110
|
+
builder.use(Fbe::Middleware::Trace, trace)
|
108
111
|
builder.adapter(Faraday.default_adapter)
|
109
112
|
end
|
110
113
|
o.middleware = stack
|
@@ -121,18 +124,29 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
|
|
121
124
|
end
|
122
125
|
o =
|
123
126
|
decoor(o, loog:, trace:) do
|
124
|
-
def print_trace!
|
127
|
+
def print_trace!(all: false, max: 5)
|
125
128
|
if @trace.empty?
|
126
129
|
@loog.debug('GitHub API trace is empty')
|
127
130
|
else
|
128
131
|
grouped =
|
129
|
-
@trace.group_by do |entry|
|
132
|
+
@trace.select { |e| e[:duration] > 0.05 || all }.group_by do |entry|
|
130
133
|
uri = URI.parse(entry[:url])
|
131
|
-
|
134
|
+
query = uri.query
|
135
|
+
query = "?#{query.ellipsized(40)}" if query
|
136
|
+
"#{uri.scheme}://#{uri.host}#{uri.path}#{query}"
|
132
137
|
end
|
133
138
|
message = grouped
|
134
139
|
.sort_by { |_path, entries| -entries.count }
|
135
|
-
.map
|
140
|
+
.map do |path, entries|
|
141
|
+
[
|
142
|
+
' ',
|
143
|
+
path.gsub(%r{^https://api.github.com/}, '/'),
|
144
|
+
': ',
|
145
|
+
entries.count,
|
146
|
+
" (#{entries.sum { |e| e[:duration] }.seconds})"
|
147
|
+
].join
|
148
|
+
end
|
149
|
+
.take(max)
|
136
150
|
.join("\n")
|
137
151
|
@loog.info(
|
138
152
|
"GitHub API trace (#{grouped.count} URLs vs #{@trace.count} requests, " \
|
@@ -180,11 +194,10 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
|
|
180
194
|
end
|
181
195
|
end
|
182
196
|
o =
|
183
|
-
|
184
|
-
if
|
185
|
-
raise "We are off-quota (remaining: #{
|
197
|
+
intercepted(o) do |e, m, _args, _r|
|
198
|
+
if e == :before && m != :off_quota? && m != :print_trace! && m != :rate_limit && o.off_quota?
|
199
|
+
raise "We are off-quota (remaining: #{o.rate_limit.remaining}), can't do #{name}()"
|
186
200
|
end
|
187
|
-
@o.__send__(*args)
|
188
201
|
end
|
189
202
|
o
|
190
203
|
end
|
@@ -692,10 +705,14 @@ class Fbe::FakeOctokit
|
|
692
705
|
repo: {
|
693
706
|
full_name: repo
|
694
707
|
},
|
708
|
+
user: { login: 'yegor256', id: 526_301, type: 'User' },
|
709
|
+
head: { ref: 'master', sha: '6dcb09b5b57875f334f61aebed695e2e4193db5e' },
|
695
710
|
additions: 12,
|
696
711
|
deletions: 5,
|
697
712
|
changed_files: 3,
|
698
|
-
|
713
|
+
comments: 2,
|
714
|
+
review_comments: 2,
|
715
|
+
created_at: Time.parse('2024-09-20 19:00:00 UTC')
|
699
716
|
}
|
700
717
|
end
|
701
718
|
|
data/lib/fbe.rb
CHANGED
data/test/fbe/test_octo.rb
CHANGED
@@ -367,7 +367,6 @@ class TestOcto < Fbe::Test
|
|
367
367
|
{ body: '{}', headers: { 'X-RateLimit-Remaining' => '222' } }
|
368
368
|
)
|
369
369
|
stub_request(:get, 'https://api.github.com/user/123').to_return do
|
370
|
-
sleep(0.02)
|
371
370
|
{
|
372
371
|
status: 200,
|
373
372
|
body: '{"id":123,"login":"test"}',
|
@@ -375,7 +374,6 @@ class TestOcto < Fbe::Test
|
|
375
374
|
}
|
376
375
|
end
|
377
376
|
stub_request(:get, 'https://api.github.com/repos/foo/bar').to_return do
|
378
|
-
sleep(0.02)
|
379
377
|
{
|
380
378
|
status: 200,
|
381
379
|
body: '{"id":456,"full_name":"foo/bar"}',
|
@@ -386,9 +384,9 @@ class TestOcto < Fbe::Test
|
|
386
384
|
octo.user(123)
|
387
385
|
octo.repository('foo/bar')
|
388
386
|
octo.repository('foo/bar')
|
389
|
-
octo.print_trace!
|
387
|
+
octo.print_trace!(all: true, max: 9_999)
|
390
388
|
output = loog.to_s
|
391
|
-
assert_includes output, '
|
389
|
+
assert_includes output, '3 URLs vs 4 requests'
|
392
390
|
assert_includes output, '222 quota left'
|
393
391
|
assert_includes output, '/user/123: 1'
|
394
392
|
assert_includes output, '/repos/foo/bar: 2'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fbe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.23.
|
4
|
+
version: 0.23.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
@@ -51,6 +51,20 @@ dependencies:
|
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0.0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: ellipsized
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0.3'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.3'
|
54
68
|
- !ruby/object:Gem::Dependency
|
55
69
|
name: factbase
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,6 +163,20 @@ dependencies:
|
|
149
163
|
- - "~>"
|
150
164
|
- !ruby/object:Gem::Version
|
151
165
|
version: '0.26'
|
166
|
+
- !ruby/object:Gem::Dependency
|
167
|
+
name: intercepted
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0.2'
|
173
|
+
type: :runtime
|
174
|
+
prerelease: false
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0.2'
|
152
180
|
- !ruby/object:Gem::Dependency
|
153
181
|
name: judges
|
154
182
|
requirement: !ruby/object:Gem::Requirement
|