vault-tools 1.0.1 → 2.1.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 +4 -4
- data/.circleci/config.yml +15 -0
- data/Gemfile +3 -3
- data/Gemfile.lock +60 -66
- data/README.md +5 -14
- data/lib/vault-tools/app.rb +3 -3
- data/lib/vault-tools/config.rb +6 -24
- data/lib/vault-tools/log.rb +4 -4
- data/lib/vault-tools/pipeline.rb +2 -2
- data/lib/vault-tools/s3.rb +9 -9
- data/lib/vault-tools/statement_store.rb +15 -9
- data/lib/vault-tools/time.rb +1 -1
- data/lib/vault-tools/user.rb +3 -3
- data/lib/vault-tools/version.rb +1 -1
- data/lib/vault-tools/web.rb +10 -2
- data/lib/vault-tools.rb +1 -5
- data/test/config_test.rb +5 -34
- data/test/defaults_test.rb +4 -4
- data/test/helper.rb +12 -46
- data/test/log_test.rb +6 -5
- data/test/s3_test.rb +16 -16
- data/test/statement_store_test.rb +9 -12
- data/test/web_test.rb +1 -0
- data/vault-tools.gemspec +8 -7
- metadata +17 -47
- data/.travis.yml +0 -6
- data/lib/vault-tools/tracing/sidekiq_client.rb +0 -37
- data/lib/vault-tools/tracing/sidekiq_server.rb +0 -54
- data/lib/vault-tools/tracing.rb +0 -92
- data/test/tracing_test.rb +0 -86
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vault-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Continanza
|
8
8
|
- Jamu Kakar
|
9
|
-
|
9
|
+
- Kenny Parnell
|
10
|
+
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2021-08-26 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: scrolls
|
@@ -67,50 +68,36 @@ dependencies:
|
|
67
68
|
- - ">="
|
68
69
|
- !ruby/object:Gem::Version
|
69
70
|
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: heroku-api
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
|
-
type: :runtime
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '0'
|
84
71
|
- !ruby/object:Gem::Dependency
|
85
72
|
name: fernet
|
86
73
|
requirement: !ruby/object:Gem::Requirement
|
87
74
|
requirements:
|
88
75
|
- - '='
|
89
76
|
- !ruby/object:Gem::Version
|
90
|
-
version: 2.0
|
77
|
+
version: '2.0'
|
91
78
|
type: :runtime
|
92
79
|
prerelease: false
|
93
80
|
version_requirements: !ruby/object:Gem::Requirement
|
94
81
|
requirements:
|
95
82
|
- - '='
|
96
83
|
- !ruby/object:Gem::Version
|
97
|
-
version: 2.0
|
84
|
+
version: '2.0'
|
98
85
|
- !ruby/object:Gem::Dependency
|
99
86
|
name: rollbar
|
100
87
|
requirement: !ruby/object:Gem::Requirement
|
101
88
|
requirements:
|
102
89
|
- - "~>"
|
103
90
|
- !ruby/object:Gem::Version
|
104
|
-
version: 2.
|
91
|
+
version: 2.18.2
|
105
92
|
type: :runtime
|
106
93
|
prerelease: false
|
107
94
|
version_requirements: !ruby/object:Gem::Requirement
|
108
95
|
requirements:
|
109
96
|
- - "~>"
|
110
97
|
- !ruby/object:Gem::Version
|
111
|
-
version: 2.
|
98
|
+
version: 2.18.2
|
112
99
|
- !ruby/object:Gem::Dependency
|
113
|
-
name: aws-sdk
|
100
|
+
name: aws-sdk-s3
|
114
101
|
requirement: !ruby/object:Gem::Requirement
|
115
102
|
requirements:
|
116
103
|
- - "~>"
|
@@ -165,20 +152,6 @@ dependencies:
|
|
165
152
|
- - ">="
|
166
153
|
- !ruby/object:Gem::Version
|
167
154
|
version: '0'
|
168
|
-
- !ruby/object:Gem::Dependency
|
169
|
-
name: zipkin-tracer
|
170
|
-
requirement: !ruby/object:Gem::Requirement
|
171
|
-
requirements:
|
172
|
-
- - "~>"
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: '0.27'
|
175
|
-
type: :runtime
|
176
|
-
prerelease: false
|
177
|
-
version_requirements: !ruby/object:Gem::Requirement
|
178
|
-
requirements:
|
179
|
-
- - "~>"
|
180
|
-
- !ruby/object:Gem::Version
|
181
|
-
version: '0.27'
|
182
155
|
- !ruby/object:Gem::Dependency
|
183
156
|
name: dotenv
|
184
157
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,16 +210,18 @@ dependencies:
|
|
237
210
|
version: '0'
|
238
211
|
description: Basic tools for Heroku Vault's Ruby projects
|
239
212
|
email:
|
240
|
-
- christopher.continanza@gmail.com
|
241
213
|
- csquared@heroku.com
|
214
|
+
- christopher.continanza@gmail.com
|
242
215
|
- jkakar@heroku.com
|
243
216
|
- jkakar@kakar.ca
|
217
|
+
- kennyp@heroku.com
|
218
|
+
- k.parnell@gmail.com
|
244
219
|
executables: []
|
245
220
|
extensions: []
|
246
221
|
extra_rdoc_files: []
|
247
222
|
files:
|
223
|
+
- ".circleci/config.yml"
|
248
224
|
- ".gitignore"
|
249
|
-
- ".travis.yml"
|
250
225
|
- ".yardopts"
|
251
226
|
- Gemfile
|
252
227
|
- Gemfile.lock
|
@@ -272,9 +247,6 @@ files:
|
|
272
247
|
- lib/vault-tools/tasks.rb
|
273
248
|
- lib/vault-tools/text_processor.rb
|
274
249
|
- lib/vault-tools/time.rb
|
275
|
-
- lib/vault-tools/tracing.rb
|
276
|
-
- lib/vault-tools/tracing/sidekiq_client.rb
|
277
|
-
- lib/vault-tools/tracing/sidekiq_server.rb
|
278
250
|
- lib/vault-tools/usage_db_tasks.rb
|
279
251
|
- lib/vault-tools/user.rb
|
280
252
|
- lib/vault-tools/vault_db_tasks.rb
|
@@ -292,14 +264,13 @@ files:
|
|
292
264
|
- test/statement_store_test.rb
|
293
265
|
- test/text_processor_test.rb
|
294
266
|
- test/time_test.rb
|
295
|
-
- test/tracing_test.rb
|
296
267
|
- test/user_test.rb
|
297
268
|
- test/web_test.rb
|
298
269
|
- vault-tools.gemspec
|
299
270
|
homepage: ''
|
300
271
|
licenses: []
|
301
272
|
metadata: {}
|
302
|
-
post_install_message:
|
273
|
+
post_install_message:
|
303
274
|
rdoc_options: []
|
304
275
|
require_paths:
|
305
276
|
- lib
|
@@ -307,16 +278,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
307
278
|
requirements:
|
308
279
|
- - ">="
|
309
280
|
- !ruby/object:Gem::Version
|
310
|
-
version:
|
281
|
+
version: 2.7.1
|
311
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
312
283
|
requirements:
|
313
284
|
- - ">="
|
314
285
|
- !ruby/object:Gem::Version
|
315
286
|
version: '0'
|
316
287
|
requirements: []
|
317
|
-
|
318
|
-
|
319
|
-
signing_key:
|
288
|
+
rubygems_version: 3.1.2
|
289
|
+
signing_key:
|
320
290
|
specification_version: 4
|
321
291
|
summary: Test classes, base web classes, and helpers - oh my!
|
322
292
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module Vault
|
2
|
-
module Tracing
|
3
|
-
# Tracing info for sidekiq, adding them as params
|
4
|
-
# This was lifted straight out of heroku/coal_car
|
5
|
-
class SidekiqClient
|
6
|
-
def trace_information(trace_id)
|
7
|
-
{
|
8
|
-
"trace_id" => trace_id.trace_id,
|
9
|
-
"parent_id" => trace_id.parent_id,
|
10
|
-
"span_id" => trace_id.span_id,
|
11
|
-
"sampled" => trace_id.sampled,
|
12
|
-
"flags" => trace_id.flags
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
def call(worker_class, job, _queue, _redis_pool)
|
17
|
-
trace_id = ::ZipkinTracer::TraceGenerator.new.next_trace_id
|
18
|
-
::ZipkinTracer::TraceContainer.with_trace_id(trace_id) do
|
19
|
-
job["zipkin_trace_information"] = trace_information(trace_id)
|
20
|
-
if trace_id.sampled?
|
21
|
-
::Trace.tracer.with_new_span(trace_id, "sidekiq") do |span|
|
22
|
-
local_endpoint = Trace.default_endpoint
|
23
|
-
klass = job["wrapped".freeze] || worker_class
|
24
|
-
span.record_tag("job_class",
|
25
|
-
klass,
|
26
|
-
::Trace::BinaryAnnotation::Type::STRING,
|
27
|
-
local_endpoint)
|
28
|
-
yield
|
29
|
-
end
|
30
|
-
else
|
31
|
-
yield
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module Vault
|
2
|
-
module Tracing
|
3
|
-
# Tracing info for sidekiq
|
4
|
-
# This was lifted straight out of heroku/coal_car
|
5
|
-
class SidekiqServer
|
6
|
-
def initialize(config = nil)
|
7
|
-
@config = ZipkinTracer::Config.new(nil, config).freeze
|
8
|
-
@tracer = ZipkinTracer::TracerFactory.new.tracer(@config)
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(worker, job, _queue)
|
12
|
-
result = nil
|
13
|
-
id = trace_id(job)
|
14
|
-
klass = job["wrapped".freeze] || worker.class.to_s
|
15
|
-
::ZipkinTracer::TraceContainer.with_trace_id(id) do
|
16
|
-
if id.sampled?
|
17
|
-
@tracer.with_new_span(id, klass) do |span|
|
18
|
-
span.record("sidekiq.start")
|
19
|
-
result = yield
|
20
|
-
span.record("sidekiq.end")
|
21
|
-
end
|
22
|
-
else
|
23
|
-
yield
|
24
|
-
end
|
25
|
-
end
|
26
|
-
::Trace.tracer.flush! if ::Trace.tracer.respond_to?(:flush!)
|
27
|
-
result
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def trace_id(job)
|
33
|
-
info = job["zipkin_trace_information"]
|
34
|
-
if info
|
35
|
-
trace_id = info["trace_id"]
|
36
|
-
span_id = info["span_id"]
|
37
|
-
parent_span_id = info["parent_id"]
|
38
|
-
sampled = info["sampled"]
|
39
|
-
flags = info["flags"].to_i
|
40
|
-
else
|
41
|
-
trace_id = span_id = ::Trace.generate_id
|
42
|
-
parent_span_id = nil
|
43
|
-
sampled = sample?
|
44
|
-
flags = ::Trace::Flags::EMPTY
|
45
|
-
end
|
46
|
-
::Trace::TraceId.new(trace_id, parent_span_id, span_id, sampled, flags)
|
47
|
-
end
|
48
|
-
|
49
|
-
def sample?
|
50
|
-
rand < @config.sample_rate
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/lib/vault-tools/tracing.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
require 'zipkin-tracer'
|
2
|
-
|
3
|
-
module Vault
|
4
|
-
module Tracing
|
5
|
-
ZIPKIN_API_HOST_STAGING = 'https://zipkin-staging.heroku.tools'.freeze
|
6
|
-
|
7
|
-
# Injects the zipkin middleware into the Web class, add Zipkin middleware to
|
8
|
-
# Excon.
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# Vault::Tracing.configure
|
12
|
-
#
|
13
|
-
# @return nil
|
14
|
-
def self.configure
|
15
|
-
return unless Vault::Tracing.enabled?
|
16
|
-
|
17
|
-
Vault::Web.instance_eval { require 'zipkin-tracer' }
|
18
|
-
Vault::Web.use ZipkinTracer::RackHandler, config
|
19
|
-
setup_excon
|
20
|
-
end
|
21
|
-
|
22
|
-
# Traces a local component. Useful to track down long running implementation
|
23
|
-
# methods within an app, instead of only tracing external calls.
|
24
|
-
#
|
25
|
-
# @param name [String] the name of the span to record in Zipkin.
|
26
|
-
# @param tracer [Constant] the const that should respond to :local_component_span
|
27
|
-
# @param options [Hash] the options to create a message with.
|
28
|
-
#
|
29
|
-
# @example
|
30
|
-
# Vault::Tracing.trace_local 'cashier_middleware_x', internal: true do
|
31
|
-
# # some expensive task
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# @yield [the_block_passed_in]
|
35
|
-
def self.trace_local(name, tracer = ZipkinTracer::TraceClient, **options)
|
36
|
-
return yield unless Vault::Tracing.enabled?
|
37
|
-
|
38
|
-
tracer.local_component_span(name) do |span|
|
39
|
-
span.name = name
|
40
|
-
span.record_tag('options', options.to_s) unless options.empty?
|
41
|
-
yield
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# Configuration options for the Zipkin RackHandler.
|
46
|
-
#
|
47
|
-
# @return [Hash] config options for Zipkin tracer
|
48
|
-
def self.config
|
49
|
-
{
|
50
|
-
service_name: "#{Config.app_name}.herokuapp.com",
|
51
|
-
service_port: 443,
|
52
|
-
json_api_host: Config[:zipkin_api_host],
|
53
|
-
sample_rate: (Config[:zipkin_sample_rate] || 0.1).to_f,
|
54
|
-
sampled_as_boolean: false
|
55
|
-
}
|
56
|
-
end
|
57
|
-
|
58
|
-
# A helper to guard against injecting Zipkin when not desired.
|
59
|
-
#
|
60
|
-
# @return [true] if so
|
61
|
-
def self.enabled?
|
62
|
-
Config.app_name &&
|
63
|
-
Config[:zipkin_enabled] == 'true' &&
|
64
|
-
Config[:zipkin_api_host]
|
65
|
-
end
|
66
|
-
|
67
|
-
# Adds ZipkinTracer::ExconHandler to Excon's default middlewares if Excon is
|
68
|
-
# defined
|
69
|
-
#
|
70
|
-
# @private
|
71
|
-
#
|
72
|
-
# @return nil
|
73
|
-
def self.setup_excon
|
74
|
-
if add_to_excon_middlewares?
|
75
|
-
Excon.defaults[:middlewares].push(ZipkinTracer::ExconHandler)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
private_class_method :setup_excon
|
79
|
-
|
80
|
-
# Checks to see if Excon is defined and if the Zipkin middleware has already
|
81
|
-
# been inserted.
|
82
|
-
#
|
83
|
-
# @private
|
84
|
-
#
|
85
|
-
# @return [true] if Excon is defined and the middleware is not already
|
86
|
-
# inserted
|
87
|
-
def self.add_to_excon_middlewares?
|
88
|
-
defined?(Excon) && !Excon.defaults[:middlewares].include?(ZipkinTracer::ExconHandler)
|
89
|
-
end
|
90
|
-
private_class_method :add_to_excon_middlewares?
|
91
|
-
end
|
92
|
-
end
|
data/test/tracing_test.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TracingTest < Vault::TestCase
|
4
|
-
# Anonymous Web Frontend
|
5
|
-
def app
|
6
|
-
@app ||= Class.new(Vault::Web)
|
7
|
-
end
|
8
|
-
|
9
|
-
# Middleware is attached at load time, so we have to delete the Vault::Web
|
10
|
-
# class and reload it to simulate being loaded with different environment
|
11
|
-
# variables.
|
12
|
-
def reload_web!
|
13
|
-
# remove the constant to force a clean reload
|
14
|
-
Vault.send(:remove_const, 'Web')
|
15
|
-
load 'lib/vault-tools/web.rb'
|
16
|
-
end
|
17
|
-
|
18
|
-
# Always reload the web class to eliminate test leakage
|
19
|
-
def setup
|
20
|
-
super
|
21
|
-
reload_web!
|
22
|
-
enable
|
23
|
-
end
|
24
|
-
|
25
|
-
def teardown
|
26
|
-
super
|
27
|
-
@app = nil
|
28
|
-
end
|
29
|
-
|
30
|
-
def enable
|
31
|
-
set_env('APP_NAME', 'test_app')
|
32
|
-
set_env('ZIPKIN_ENABLED', 'true')
|
33
|
-
set_env('ZIPKIN_API_HOST', 'http://localhost')
|
34
|
-
end
|
35
|
-
|
36
|
-
def disable
|
37
|
-
set_env('ZIPKIN_ENABLED', nil)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_service_name_gets_herokuapp
|
41
|
-
assert_equal 'test_app.herokuapp.com', Vault::Tracing.config[:service_name]
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_configure_enabled
|
45
|
-
Vault::Tracing.configure
|
46
|
-
middleware_constants = app.middleware.map(&:first)
|
47
|
-
assert middleware_constants.include?(ZipkinTracer::RackHandler),
|
48
|
-
"expected ZipkinTracer::RackHandler to be in the middleware stack, got #{middleware_constants}"
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_configure_not_enabled
|
52
|
-
disable
|
53
|
-
refute Vault::Tracing.configure,
|
54
|
-
'Vault::Tracing.configure should return nil when not enabled'
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_excon
|
58
|
-
Vault::Tracing.configure
|
59
|
-
assert Excon.defaults[:middlewares].include?(ZipkinTracer::ExconHandler),
|
60
|
-
"Vault::Tracing.setup_excon should add ZipkinTracer::ExconHandler to excon's middleware"
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_enabled_true
|
64
|
-
assert Vault::Tracing.enabled?,
|
65
|
-
'Vault::Tracing.enabled? should return true when enabled'
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_enabled_false
|
69
|
-
disable
|
70
|
-
refute Vault::Tracing.enabled?,
|
71
|
-
'Vault::Tracing.enabled? should return false when not enabled'
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_trace_local_yield
|
75
|
-
result = Vault::Tracing.trace_local('testing', opt: 'foo') { 1 + 1 }
|
76
|
-
assert_equal 2, result, 'trace_local should yield the result of the block given'
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_trace_local_calls_tracer
|
80
|
-
tracer_mock = Minitest::Mock.new
|
81
|
-
tracer_mock.expect :local_component_span, true, ['testing']
|
82
|
-
Vault::Tracing.trace_local('testing', tracer_mock, opt: 'foo') { 1 + 1 }
|
83
|
-
assert tracer_mock.verify,
|
84
|
-
'trace_local should call :local_component_span on the tracer'
|
85
|
-
end
|
86
|
-
end
|