instrumental_agent 2.1.0 → 3.0.0.alpha
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 +5 -5
- data/.ruby-version +1 -1
- data/.travis.yml +3 -5
- data/CHANGELOG.md +6 -0
- data/Gemfile +1 -6
- data/instrumental_agent.gemspec +2 -2
- data/lib/instrumental/agent.rb +74 -100
- data/lib/instrumental/version.rb +1 -1
- data/spec/agent_spec.rb +78 -11
- metadata +24 -31
- data/certs/equifax.ca.pem +0 -69
- data/certs/geotrust.ca.pem +0 -80
- data/certs/rapidssl.ca.pem +0 -94
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a45dc47aabd6ade8ea7198ea34f4bbc205a4979b1cae1ed18dbfabb4109df0b8
|
4
|
+
data.tar.gz: 67ebcbf6fca85da2087e6196dbcf57752ebe3470411c54241487ce834c2f5cf7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1bfe306e6511e588aa58a258510b18f79fe4b70180b7ee8bd4fea0b967d80cf8cab3765228b4cd385f99537704557f918d92972b9cf6da0b646225b4a5c6bd87
|
7
|
+
data.tar.gz: feaf73f66d1ed593936bcd3aecf4e0ebccbc67fcf104905e28ad67e9d4e14575a0a3259a5c1fc9b2ac21ef212c2be64910c757bfc931668b48799d3466eeacc8
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.3
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
### 3.0.0.alpha [August 22, 2019]
|
2
|
+
* Drop support for outdated versions of Ruby
|
3
|
+
* Explicitly add support for new versions of Ruby
|
4
|
+
* Better handling of SSL errors when connecting to Instrumental
|
5
|
+
* Note: the agent API has NOT changed. This is a major release because of the significant changes in Ruby versions officially supported.
|
6
|
+
|
1
7
|
### 2.1.0 [January 19, 2018]
|
2
8
|
* Add support for capistrano 3
|
3
9
|
|
data/Gemfile
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
3
|
gemspec
|
4
|
-
ruby_engine = defined?(RUBY_ENGINE) && RUBY_ENGINE
|
5
|
-
if RUBY_VERSION < "1.9" && !%w{jruby rbx}.include?(ruby_engine)
|
6
|
-
# Built and installed via ext/mkrf_conf.rb
|
7
|
-
gem 'system_timer', '~> 1.2'
|
8
|
-
end
|
9
4
|
|
10
5
|
# fixes 2.3.0 ffi bundle error
|
11
|
-
gem 'ffi', '~> 1.0.11'
|
6
|
+
gem 'ffi', '~> 1.0.11'
|
data/instrumental_agent.gemspec
CHANGED
@@ -4,13 +4,13 @@ require "instrumental/version"
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "instrumental_agent"
|
6
6
|
s.version = Instrumental::VERSION
|
7
|
-
s.authors = ["
|
7
|
+
s.authors = ["Expected Behavior"]
|
8
8
|
s.email = ["support@instrumentalapp.com"]
|
9
9
|
s.homepage = "http://github.com/instrumental/instrumental_agent-ruby"
|
10
10
|
s.summary = %q{Custom metric monitoring for Ruby applications via Instrumental}
|
11
11
|
s.description = %q{This agent supports Instrumental custom metric monitoring for Ruby applications. It provides high-data reliability at high scale, without ever blocking your process or causing an exception.}
|
12
12
|
s.license = "MIT"
|
13
|
-
s.required_ruby_version = '>= 2.
|
13
|
+
s.required_ruby_version = '>= 2.4.6'
|
14
14
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/instrumental/agent.rb
CHANGED
@@ -75,7 +75,6 @@ module Instrumental
|
|
75
75
|
@synchronous = !!options[:synchronous]
|
76
76
|
@pid = Process.pid
|
77
77
|
@allow_reconnect = true
|
78
|
-
@certs = certificates
|
79
78
|
@dns_resolutions = 0
|
80
79
|
@last_connect_at = 0
|
81
80
|
@metrician = options[:metrician].nil? ? true : !!options[:metrician]
|
@@ -271,7 +270,7 @@ module Instrumental
|
|
271
270
|
end
|
272
271
|
|
273
272
|
def report_exception(e)
|
274
|
-
logger.error "Exception
|
273
|
+
logger.error "Exception of type #{e.class} occurred:\n#{e.message}\n#{e.backtrace.join("\n")}"
|
275
274
|
end
|
276
275
|
|
277
276
|
def ipv4_address_for_host(host, port, moment_to_connect = Time.now.to_i)
|
@@ -350,23 +349,7 @@ module Instrumental
|
|
350
349
|
|
351
350
|
def test_connection
|
352
351
|
begin
|
353
|
-
|
354
|
-
# on Ruby 1.8.6, 1.8.7 or 1.9.1, read_nonblock does not exist,
|
355
|
-
# and so the case of testing socket liveliness via a nonblocking
|
356
|
-
# read that catches a wait condition won't work.
|
357
|
-
#
|
358
|
-
# We grab the SSL socket's underlying IO object and perform the
|
359
|
-
# non blocking read there in order to ensure the socket is still
|
360
|
-
# valid
|
361
|
-
if @socket.respond_to?(:read_nonblock)
|
362
|
-
@socket.read_nonblock(1)
|
363
|
-
elsif @socket.respond_to?(:io)
|
364
|
-
# The SSL Socket may send down additional data at close time,
|
365
|
-
# so we perform two nonblocking reads, one to pull any pending
|
366
|
-
# data on the socket, and the second to actually perform the connection
|
367
|
-
# liveliness test
|
368
|
-
@socket.io.read_nonblock(1024) && @socket.io.read_nonblock(1024)
|
369
|
-
end
|
352
|
+
@socket.read_nonblock(1)
|
370
353
|
rescue *wait_exceptions
|
371
354
|
# noop
|
372
355
|
end
|
@@ -427,81 +410,85 @@ module Instrumental
|
|
427
410
|
end
|
428
411
|
|
429
412
|
def run_worker_loop
|
413
|
+
@failures = 0
|
414
|
+
begin
|
415
|
+
logger.info "connecting to collector"
|
430
416
|
command_and_args = nil
|
431
417
|
command_options = nil
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
"
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
418
|
+
with_timeout(CONNECT_TIMEOUT) do
|
419
|
+
@socket = open_socket(@sockaddr_in, @secure, @verify_cert)
|
420
|
+
end
|
421
|
+
logger.info "connected to collector at #{host}:#{port}"
|
422
|
+
hello_options = {
|
423
|
+
"version" => "ruby/instrumental_agent/#{VERSION}",
|
424
|
+
"hostname" => HOSTNAME,
|
425
|
+
"pid" => Process.pid,
|
426
|
+
"runtime" => "#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"}/#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}",
|
427
|
+
"platform" => RUBY_PLATFORM
|
428
|
+
}.to_a.flatten.map { |v| v.to_s.gsub(/\s+/, "_") }.join(" ")
|
429
|
+
|
430
|
+
send_with_reply_timeout "hello #{hello_options}"
|
431
|
+
send_with_reply_timeout "authenticate #{@api_key}"
|
432
|
+
|
433
|
+
loop do
|
434
|
+
command_and_args, command_options = @queue.pop
|
435
|
+
if command_and_args
|
436
|
+
sync_resource = command_options && command_options[:sync_resource]
|
437
|
+
test_connection
|
438
|
+
case command_and_args
|
439
|
+
when 'exit'
|
440
|
+
logger.info "Exiting, #{@queue.size} commands remain"
|
441
|
+
return true
|
442
|
+
when 'flush'
|
443
|
+
release_resource = true
|
444
|
+
else
|
445
|
+
logger.debug "Sending: #{command_and_args.chomp}"
|
446
|
+
@socket.puts command_and_args
|
447
|
+
end
|
448
|
+
command_and_args = nil
|
449
|
+
command_options = nil
|
450
|
+
if sync_resource
|
451
|
+
@sync_mutex.synchronize do
|
452
|
+
sync_resource.signal
|
453
|
+
end
|
468
454
|
end
|
469
455
|
end
|
470
456
|
end
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
when EOFError
|
457
|
+
rescue Exception => err
|
458
|
+
allow_reconnect = @allow_reconnect
|
459
|
+
case err
|
460
|
+
when EOFError
|
476
461
|
# nop
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
462
|
+
when Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::EADDRINUSE, Timeout::Error, OpenSSL::SSL::SSLError
|
463
|
+
# If the connection has been refused by Instrumental
|
464
|
+
# or we cannot reach the server
|
465
|
+
# or the connection state of this socket is in a race
|
466
|
+
# or SSL is not functioning properly for some reason
|
467
|
+
logger.error "unable to connect to Instrumental, hanging up with #{@queue.size} messages remaining"
|
468
|
+
logger.debug "Exception: #{err.inspect}\n#{err.backtrace.join("\n")}"
|
469
|
+
allow_reconnect = false
|
470
|
+
else
|
471
|
+
report_exception(err)
|
472
|
+
end
|
473
|
+
if allow_reconnect == false ||
|
474
|
+
(command_options && command_options[:allow_reconnect] == false)
|
475
|
+
logger.info "Not trying to reconnect"
|
476
|
+
@failures = 0
|
477
|
+
return
|
478
|
+
end
|
479
|
+
if command_and_args
|
480
|
+
logger.debug "requeueing: #{command_and_args}"
|
481
|
+
@queue << command_and_args
|
482
|
+
end
|
483
|
+
disconnect
|
484
|
+
@failures += 1
|
485
|
+
delay = [(@failures - 1) ** BACKOFF, MAX_RECONNECT_DELAY].min
|
486
|
+
logger.error "disconnected, #{@failures} failures in a row, reconnect in #{delay}..."
|
487
|
+
sleep delay
|
488
|
+
retry
|
489
|
+
ensure
|
490
|
+
disconnect
|
496
491
|
end
|
497
|
-
disconnect
|
498
|
-
@failures += 1
|
499
|
-
delay = [(@failures - 1) ** BACKOFF, MAX_RECONNECT_DELAY].min
|
500
|
-
logger.error "disconnected, #{@failures} failures in a row, reconnect in #{delay}..."
|
501
|
-
sleep delay
|
502
|
-
retry
|
503
|
-
ensure
|
504
|
-
disconnect
|
505
492
|
end
|
506
493
|
|
507
494
|
def setup_cleanup_at_exit
|
@@ -541,18 +528,5 @@ module Instrumental
|
|
541
528
|
def allows_secure?
|
542
529
|
defined?(OpenSSL)
|
543
530
|
end
|
544
|
-
|
545
|
-
def certificates
|
546
|
-
if allows_secure?
|
547
|
-
base_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
|
548
|
-
%w{equifax geotrust rapidssl}.map do |name|
|
549
|
-
OpenSSL::X509::Certificate.new(File.open(File.join(base_dir, "certs", "#{name}.ca.pem")))
|
550
|
-
end
|
551
|
-
else
|
552
|
-
[]
|
553
|
-
end
|
554
|
-
end
|
555
|
-
|
556
531
|
end
|
557
|
-
|
558
532
|
end
|
data/lib/instrumental/version.rb
CHANGED
data/spec/agent_spec.rb
CHANGED
@@ -9,6 +9,8 @@ def wait(n=0.2, &block)
|
|
9
9
|
if (Time.now - start) < 5
|
10
10
|
sleep n
|
11
11
|
retry
|
12
|
+
else
|
13
|
+
raise ex
|
12
14
|
end
|
13
15
|
end
|
14
16
|
else
|
@@ -226,16 +228,16 @@ shared_examples "Instrumental Agent" do
|
|
226
228
|
allow(agent.logger).to receive(:debug)
|
227
229
|
expect(agent.logger).to receive(:debug).with("Dropping command, queue full(3): increment overflow_test 4 300 1")
|
228
230
|
expect(agent.logger).to receive(:debug).with("Dropping command, queue full(3): increment overflow_test 5 300 1")
|
229
|
-
5
|
230
|
-
agent.increment('overflow_test', i
|
231
|
-
end
|
232
|
-
wait do
|
233
|
-
expect(server.commands).to include("increment overflow_test 1 300 1")
|
234
|
-
expect(server.commands).to include("increment overflow_test 2 300 1")
|
235
|
-
expect(server.commands).to include("increment overflow_test 3 300 1")
|
236
|
-
expect(server.commands).to_not include("increment overflow_test 4 300 1")
|
237
|
-
expect(server.commands).to_not include("increment overflow_test 5 300 1")
|
231
|
+
1.upto(5) do |i|
|
232
|
+
agent.increment('overflow_test', i, 300)
|
238
233
|
end
|
234
|
+
|
235
|
+
wait
|
236
|
+
expect(agent.queue.size).to eq(3)
|
237
|
+
expect(agent.queue.pop.first).to start_with("increment overflow_test 1 300 1")
|
238
|
+
expect(agent.queue.pop.first).to start_with("increment overflow_test 2 300 1")
|
239
|
+
expect(agent.queue.pop.first).to start_with("increment overflow_test 3 300 1")
|
240
|
+
expect(agent.queue.size).to eq(0)
|
239
241
|
end
|
240
242
|
end
|
241
243
|
end
|
@@ -479,7 +481,7 @@ shared_examples "Instrumental Agent" do
|
|
479
481
|
context 'server hangup' do
|
480
482
|
it "should cancel the worker thread when the host has hung up" do
|
481
483
|
# Start the background agent thread and let it send one metric successfully
|
482
|
-
agent.gauge('
|
484
|
+
agent.gauge('connection_failure1', 1, 1234)
|
483
485
|
wait do
|
484
486
|
expect(server.commands.grep(/connection_failure/).size).to eq(1)
|
485
487
|
end
|
@@ -487,7 +489,7 @@ shared_examples "Instrumental Agent" do
|
|
487
489
|
server.stop
|
488
490
|
wait
|
489
491
|
# Send one metric to the stopped server
|
490
|
-
agent.gauge('
|
492
|
+
agent.gauge('connection_failure2', 1, 1234)
|
491
493
|
# The agent thread should have stopped running since the network write would
|
492
494
|
# have failed. The queue will still contain the metric that has yet to be sent
|
493
495
|
wait do
|
@@ -524,6 +526,71 @@ shared_examples "Instrumental Agent" do
|
|
524
526
|
end
|
525
527
|
end
|
526
528
|
|
529
|
+
it "should restart the worker thread after hanging it up during a bad ssl handshake event" do
|
530
|
+
# Start the background agent thread and let it send one metric successfully
|
531
|
+
agent.gauge('connection_failure', 1, 1234)
|
532
|
+
wait do
|
533
|
+
expect(server.commands.grep(/connection_failure/).size).to eq(1)
|
534
|
+
end
|
535
|
+
# Make the agent return the relevant exception on the next connection test
|
536
|
+
test_connection_fail = true
|
537
|
+
tc = agent.method(:test_connection)
|
538
|
+
allow(agent).to receive(:test_connection) do |*args, &block|
|
539
|
+
test_connection_fail ? raise(OpenSSL::SSL::SSLError.new) : tc.call(*args)
|
540
|
+
end
|
541
|
+
|
542
|
+
# Send one metric to the agent
|
543
|
+
agent.gauge('connection_failure', 1, 1234)
|
544
|
+
# The agent thread should have stopped running since the network write would
|
545
|
+
# have failed.
|
546
|
+
wait do
|
547
|
+
expect(agent.send(:running?)).to eq(false)
|
548
|
+
end
|
549
|
+
# The command is not in the queue
|
550
|
+
expect(agent.queue.size).to eq(0)
|
551
|
+
# allow the agent to behave normally
|
552
|
+
test_connection_fail = false
|
553
|
+
# Sending another metric should kickstart the background worker thread
|
554
|
+
agent.gauge('connection_failure', 1, 1234)
|
555
|
+
# The agent should now be running the background thread, and the queue should be empty
|
556
|
+
wait do
|
557
|
+
expect(agent.send(:running?)).to eq(true)
|
558
|
+
expect(agent.queue.size).to eq(0)
|
559
|
+
expect(server.commands.grep(/connection_failure/).size).to eq(2)
|
560
|
+
end
|
561
|
+
end
|
562
|
+
|
563
|
+
it "should accurately count failures so that backoff can work as intended" do
|
564
|
+
# Start the background agent thread and let it send one metric successfully
|
565
|
+
agent.gauge('connection_failure', 1, 1234)
|
566
|
+
wait do
|
567
|
+
expect(server.commands.grep(/connection_failure/).size).to eq(1)
|
568
|
+
end
|
569
|
+
|
570
|
+
# configure test_connection to fail in a way that won't kill the inner loop
|
571
|
+
test_connection_fail = true
|
572
|
+
tc = agent.method(:test_connection)
|
573
|
+
allow(agent).to receive(:test_connection) do |*args, &block|
|
574
|
+
test_connection_fail ? raise("test_connection_fail") : tc.call(*args)
|
575
|
+
end
|
576
|
+
|
577
|
+
# send some metrics
|
578
|
+
agent.gauge('connection_failure_1', 1, 1234)
|
579
|
+
agent.gauge('connection_failure_2', 1, 1234)
|
580
|
+
agent.gauge('connection_failure_3', 1, 1234)
|
581
|
+
wait do
|
582
|
+
expect(agent.instance_variable_get(:@failures)).to be > 0
|
583
|
+
expect(agent.queue.size).to be > 0
|
584
|
+
end
|
585
|
+
|
586
|
+
# let the loop proceed
|
587
|
+
test_connection_fail = false
|
588
|
+
|
589
|
+
wait do
|
590
|
+
expect(agent.send(:running?)).to eq(true)
|
591
|
+
expect(agent.queue.size).to eq(0)
|
592
|
+
end
|
593
|
+
end
|
527
594
|
end
|
528
595
|
|
529
596
|
|
metadata
CHANGED
@@ -1,100 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: instrumental_agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Christopher Zelenak
|
9
|
-
- Kristopher Chambers
|
10
|
-
- Matthew Hassfurder
|
7
|
+
- Expected Behavior
|
11
8
|
autorequire:
|
12
9
|
bindir: bin
|
13
10
|
cert_chain: []
|
14
|
-
date:
|
11
|
+
date: 2019-08-22 00:00:00.000000000 Z
|
15
12
|
dependencies:
|
16
13
|
- !ruby/object:Gem::Dependency
|
17
14
|
name: metrician
|
18
15
|
requirement: !ruby/object:Gem::Requirement
|
19
16
|
requirements:
|
20
|
-
- -
|
17
|
+
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '0'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: pry
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
30
|
requirements:
|
34
|
-
- -
|
31
|
+
- - ">="
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: '0'
|
37
34
|
type: :development
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- -
|
38
|
+
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
40
|
version: '0'
|
44
41
|
- !ruby/object:Gem::Dependency
|
45
42
|
name: rake
|
46
43
|
requirement: !ruby/object:Gem::Requirement
|
47
44
|
requirements:
|
48
|
-
- -
|
45
|
+
- - ">="
|
49
46
|
- !ruby/object:Gem::Version
|
50
47
|
version: '0'
|
51
48
|
type: :development
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
54
51
|
requirements:
|
55
|
-
- -
|
52
|
+
- - ">="
|
56
53
|
- !ruby/object:Gem::Version
|
57
54
|
version: '0'
|
58
55
|
- !ruby/object:Gem::Dependency
|
59
56
|
name: rspec
|
60
57
|
requirement: !ruby/object:Gem::Requirement
|
61
58
|
requirements:
|
62
|
-
- - ~>
|
59
|
+
- - "~>"
|
63
60
|
- !ruby/object:Gem::Version
|
64
61
|
version: '3.0'
|
65
62
|
type: :development
|
66
63
|
prerelease: false
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
68
65
|
requirements:
|
69
|
-
- - ~>
|
66
|
+
- - "~>"
|
70
67
|
- !ruby/object:Gem::Version
|
71
68
|
version: '3.0'
|
72
69
|
- !ruby/object:Gem::Dependency
|
73
70
|
name: fuubar
|
74
71
|
requirement: !ruby/object:Gem::Requirement
|
75
72
|
requirements:
|
76
|
-
- -
|
73
|
+
- - ">="
|
77
74
|
- !ruby/object:Gem::Version
|
78
75
|
version: '0'
|
79
76
|
type: :development
|
80
77
|
prerelease: false
|
81
78
|
version_requirements: !ruby/object:Gem::Requirement
|
82
79
|
requirements:
|
83
|
-
- -
|
80
|
+
- - ">="
|
84
81
|
- !ruby/object:Gem::Version
|
85
82
|
version: '0'
|
86
83
|
- !ruby/object:Gem::Dependency
|
87
84
|
name: timecop
|
88
85
|
requirement: !ruby/object:Gem::Requirement
|
89
86
|
requirements:
|
90
|
-
- -
|
87
|
+
- - ">="
|
91
88
|
- !ruby/object:Gem::Version
|
92
89
|
version: '0'
|
93
90
|
type: :development
|
94
91
|
prerelease: false
|
95
92
|
version_requirements: !ruby/object:Gem::Requirement
|
96
93
|
requirements:
|
97
|
-
- -
|
94
|
+
- - ">="
|
98
95
|
- !ruby/object:Gem::Version
|
99
96
|
version: '0'
|
100
97
|
description: This agent supports Instrumental custom metric monitoring for Ruby applications.
|
@@ -106,19 +103,16 @@ executables: []
|
|
106
103
|
extensions: []
|
107
104
|
extra_rdoc_files: []
|
108
105
|
files:
|
109
|
-
- .gitignore
|
110
|
-
- .rspec
|
111
|
-
- .ruby-version
|
112
|
-
- .travis.yml
|
106
|
+
- ".gitignore"
|
107
|
+
- ".rspec"
|
108
|
+
- ".ruby-version"
|
109
|
+
- ".travis.yml"
|
113
110
|
- CHANGELOG.md
|
114
111
|
- Gemfile
|
115
112
|
- Guardfile
|
116
113
|
- LICENSE
|
117
114
|
- README.md
|
118
115
|
- Rakefile
|
119
|
-
- certs/equifax.ca.pem
|
120
|
-
- certs/geotrust.ca.pem
|
121
|
-
- certs/rapidssl.ca.pem
|
122
116
|
- instrumental_agent.gemspec
|
123
117
|
- lib/instrumental/agent.rb
|
124
118
|
- lib/instrumental/capistrano.rb
|
@@ -145,17 +139,16 @@ require_paths:
|
|
145
139
|
- lib
|
146
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
141
|
requirements:
|
148
|
-
- -
|
142
|
+
- - ">="
|
149
143
|
- !ruby/object:Gem::Version
|
150
|
-
version: 2.
|
144
|
+
version: 2.4.6
|
151
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
146
|
requirements:
|
153
|
-
- -
|
147
|
+
- - ">"
|
154
148
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
149
|
+
version: 1.3.1
|
156
150
|
requirements: []
|
157
|
-
|
158
|
-
rubygems_version: 2.0.14.1
|
151
|
+
rubygems_version: 3.0.3
|
159
152
|
signing_key:
|
160
153
|
specification_version: 4
|
161
154
|
summary: Custom metric monitoring for Ruby applications via Instrumental
|
data/certs/equifax.ca.pem
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
Certificate:
|
2
|
-
Data:
|
3
|
-
Version: 3 (0x2)
|
4
|
-
Serial Number: 903804111 (0x35def4cf)
|
5
|
-
Signature Algorithm: sha1WithRSAEncryption
|
6
|
-
Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
|
7
|
-
Validity
|
8
|
-
Not Before: Aug 22 16:41:51 1998 GMT
|
9
|
-
Not After : Aug 22 16:41:51 2018 GMT
|
10
|
-
Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
|
11
|
-
Subject Public Key Info:
|
12
|
-
Public Key Algorithm: rsaEncryption
|
13
|
-
RSA Public Key: (1024 bit)
|
14
|
-
Modulus (1024 bit):
|
15
|
-
00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d:
|
16
|
-
91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3:
|
17
|
-
d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95:
|
18
|
-
04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02:
|
19
|
-
8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd:
|
20
|
-
43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f:
|
21
|
-
97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b:
|
22
|
-
af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f:
|
23
|
-
3a:88:e7:bf:14:fd:e0:c7:b9
|
24
|
-
Exponent: 65537 (0x10001)
|
25
|
-
X509v3 extensions:
|
26
|
-
X509v3 CRL Distribution Points:
|
27
|
-
DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1
|
28
|
-
|
29
|
-
X509v3 Private Key Usage Period:
|
30
|
-
Not After: Aug 22 16:41:51 2018 GMT
|
31
|
-
X509v3 Key Usage:
|
32
|
-
Certificate Sign, CRL Sign
|
33
|
-
X509v3 Authority Key Identifier:
|
34
|
-
keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
|
35
|
-
|
36
|
-
X509v3 Subject Key Identifier:
|
37
|
-
48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
|
38
|
-
X509v3 Basic Constraints:
|
39
|
-
CA:TRUE
|
40
|
-
1.2.840.113533.7.65.0:
|
41
|
-
0...V3.0c....
|
42
|
-
Signature Algorithm: sha1WithRSAEncryption
|
43
|
-
58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0:
|
44
|
-
95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a:
|
45
|
-
6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71:
|
46
|
-
57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f:
|
47
|
-
a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14:
|
48
|
-
77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21:
|
49
|
-
65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07:
|
50
|
-
77:38
|
51
|
-
-----BEGIN CERTIFICATE-----
|
52
|
-
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
53
|
-
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
54
|
-
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
55
|
-
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
56
|
-
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
57
|
-
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
58
|
-
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
59
|
-
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
60
|
-
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
61
|
-
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
62
|
-
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
63
|
-
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
64
|
-
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
65
|
-
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
66
|
-
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
67
|
-
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
68
|
-
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
69
|
-
-----END CERTIFICATE-----
|
data/certs/geotrust.ca.pem
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
Certificate:
|
2
|
-
Data:
|
3
|
-
Version: 3 (0x2)
|
4
|
-
Serial Number: 1227750 (0x12bbe6)
|
5
|
-
Signature Algorithm: sha1WithRSAEncryption
|
6
|
-
Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
|
7
|
-
Validity
|
8
|
-
Not Before: May 21 04:00:00 2002 GMT
|
9
|
-
Not After : Aug 21 04:00:00 2018 GMT
|
10
|
-
Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
|
11
|
-
Subject Public Key Info:
|
12
|
-
Public Key Algorithm: rsaEncryption
|
13
|
-
RSA Public Key: (2048 bit)
|
14
|
-
Modulus (2048 bit):
|
15
|
-
00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df:
|
16
|
-
3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8:
|
17
|
-
43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29:
|
18
|
-
bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4:
|
19
|
-
60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3:
|
20
|
-
ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92:
|
21
|
-
2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d:
|
22
|
-
80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14:
|
23
|
-
15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd:
|
24
|
-
d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6:
|
25
|
-
d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5:
|
26
|
-
5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39:
|
27
|
-
19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05:
|
28
|
-
9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2:
|
29
|
-
fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32:
|
30
|
-
eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07:
|
31
|
-
36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b:
|
32
|
-
e4:f9
|
33
|
-
Exponent: 65537 (0x10001)
|
34
|
-
X509v3 extensions:
|
35
|
-
X509v3 Authority Key Identifier:
|
36
|
-
keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
|
37
|
-
|
38
|
-
X509v3 Subject Key Identifier:
|
39
|
-
C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
40
|
-
X509v3 Basic Constraints: critical
|
41
|
-
CA:TRUE
|
42
|
-
X509v3 Key Usage: critical
|
43
|
-
Certificate Sign, CRL Sign
|
44
|
-
X509v3 CRL Distribution Points:
|
45
|
-
URI:http://crl.geotrust.com/crls/secureca.crl
|
46
|
-
|
47
|
-
X509v3 Certificate Policies:
|
48
|
-
Policy: X509v3 Any Policy
|
49
|
-
CPS: https://www.geotrust.com/resources/repository
|
50
|
-
|
51
|
-
Signature Algorithm: sha1WithRSAEncryption
|
52
|
-
76:e1:12:6e:4e:4b:16:12:86:30:06:b2:81:08:cf:f0:08:c7:
|
53
|
-
c7:71:7e:66:ee:c2:ed:d4:3b:1f:ff:f0:f0:c8:4e:d6:43:38:
|
54
|
-
b0:b9:30:7d:18:d0:55:83:a2:6a:cb:36:11:9c:e8:48:66:a3:
|
55
|
-
6d:7f:b8:13:d4:47:fe:8b:5a:5c:73:fc:ae:d9:1b:32:19:38:
|
56
|
-
ab:97:34:14:aa:96:d2:eb:a3:1c:14:08:49:b6:bb:e5:91:ef:
|
57
|
-
83:36:eb:1d:56:6f:ca:da:bc:73:63:90:e4:7f:7b:3e:22:cb:
|
58
|
-
3d:07:ed:5f:38:74:9c:e3:03:50:4e:a1:af:98:ee:61:f2:84:
|
59
|
-
3f:12
|
60
|
-
-----BEGIN CERTIFICATE-----
|
61
|
-
MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
|
62
|
-
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
|
63
|
-
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
|
64
|
-
WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
|
65
|
-
AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
66
|
-
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
|
67
|
-
OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
|
68
|
-
T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
|
69
|
-
JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
|
70
|
-
Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
|
71
|
-
PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
|
72
|
-
aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
|
73
|
-
TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
|
74
|
-
LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
|
75
|
-
BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
|
76
|
-
dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
|
77
|
-
AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
|
78
|
-
NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
|
79
|
-
b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
|
80
|
-
-----END CERTIFICATE-----
|
data/certs/rapidssl.ca.pem
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
Certificate:
|
2
|
-
Data:
|
3
|
-
Version: 3 (0x2)
|
4
|
-
Serial Number: 146039 (0x23a77)
|
5
|
-
Signature Algorithm: sha256WithRSAEncryption
|
6
|
-
Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
|
7
|
-
Validity
|
8
|
-
Not Before: Aug 29 21:39:32 2014 GMT
|
9
|
-
Not After : May 20 21:39:32 2022 GMT
|
10
|
-
Subject: C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA - G3
|
11
|
-
Subject Public Key Info:
|
12
|
-
Public Key Algorithm: rsaEncryption
|
13
|
-
RSA Public Key: (2048 bit)
|
14
|
-
Modulus (2048 bit):
|
15
|
-
00:af:54:9b:d9:58:5d:1e:2c:56:c6:d5:e8:7f:f4:
|
16
|
-
7d:16:03:ff:d0:8b:5a:e4:8e:a7:dd:54:2e:d4:04:
|
17
|
-
c0:5d:98:9c:8d:90:0f:bc:10:65:5f:da:9a:d6:44:
|
18
|
-
7c:c0:9f:b5:e9:4a:8c:0b:06:43:04:bb:f4:96:e2:
|
19
|
-
26:f6:61:01:91:66:31:22:c3:34:34:5f:3f:3f:91:
|
20
|
-
2f:44:5f:dc:c7:14:b6:03:9f:86:4b:0e:a3:ff:a0:
|
21
|
-
80:02:83:c3:d3:1f:69:52:d6:9d:64:0f:c9:83:e7:
|
22
|
-
1b:c4:70:ac:94:e7:c3:a4:6a:2c:bd:b8:9e:69:d8:
|
23
|
-
be:0a:8f:16:63:5a:68:71:80:7b:30:de:15:04:bf:
|
24
|
-
cc:d3:bf:3e:48:05:55:7a:b3:d7:10:0c:03:fc:9b:
|
25
|
-
fd:08:a7:8c:8c:db:a7:8e:f1:1e:63:dc:b3:01:2f:
|
26
|
-
7f:af:57:c3:3c:48:a7:83:68:21:a7:2f:e7:a7:3f:
|
27
|
-
f0:b5:0c:fc:f5:84:d1:53:bc:0e:72:4f:60:0c:42:
|
28
|
-
b8:98:ad:19:88:57:d7:04:ec:87:bf:7e:87:4e:a3:
|
29
|
-
21:f9:53:fd:36:98:48:8d:d6:f8:bb:48:f2:29:c8:
|
30
|
-
64:d1:cc:54:48:53:8b:af:b7:65:1e:bf:29:33:29:
|
31
|
-
d9:29:60:48:f8:ff:91:bc:57:58:e5:35:2e:bb:69:
|
32
|
-
b6:59
|
33
|
-
Exponent: 65537 (0x10001)
|
34
|
-
X509v3 extensions:
|
35
|
-
X509v3 Authority Key Identifier:
|
36
|
-
keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
37
|
-
|
38
|
-
X509v3 Subject Key Identifier:
|
39
|
-
C3:9C:F3:FC:D3:46:08:34:BB:CE:46:7F:A0:7C:5B:F3:E2:08:CB:59
|
40
|
-
X509v3 Basic Constraints: critical
|
41
|
-
CA:TRUE, pathlen:0
|
42
|
-
X509v3 Key Usage: critical
|
43
|
-
Certificate Sign, CRL Sign
|
44
|
-
X509v3 CRL Distribution Points:
|
45
|
-
URI:http://g.symcb.com/crls/gtglobal.crl
|
46
|
-
|
47
|
-
Authority Information Access:
|
48
|
-
OCSP - URI:http://g.symcd.com
|
49
|
-
|
50
|
-
X509v3 Certificate Policies:
|
51
|
-
Policy: 2.16.840.1.113733.1.7.54
|
52
|
-
CPS: http://www.geotrust.com/resources/cps
|
53
|
-
|
54
|
-
Signature Algorithm: sha256WithRSAEncryption
|
55
|
-
a3:58:1e:c6:43:32:ac:ac:2f:93:78:b7:ea:ae:54:40:47:2d:
|
56
|
-
7e:78:8d:50:f6:f8:66:ac:d6:4f:73:d6:44:ef:af:0b:cc:5b:
|
57
|
-
c1:f4:4f:9a:8f:49:7e:60:af:c2:27:c7:16:f1:fb:93:81:90:
|
58
|
-
a9:7c:ef:6f:7e:6e:45:94:16:84:bd:ec:49:f1:c4:0e:f4:af:
|
59
|
-
04:59:83:87:0f:2c:3b:97:c3:5a:12:9b:7b:04:35:7b:a3:95:
|
60
|
-
33:08:7b:93:71:22:42:b3:a9:d9:6f:4f:81:92:fc:07:b6:79:
|
61
|
-
bc:84:4a:9d:77:09:f1:c5:89:f2:f0:b4:9c:54:aa:12:7b:0d:
|
62
|
-
ba:4f:ef:93:19:ec:ef:7d:4e:61:a3:8e:76:9c:59:cf:8c:94:
|
63
|
-
b1:84:97:f7:1a:b9:07:b8:b2:c6:4f:13:79:db:bf:4f:51:1b:
|
64
|
-
7f:69:0d:51:2a:c1:d6:15:ff:37:51:34:65:51:f4:1e:be:38:
|
65
|
-
6a:ec:0e:ab:bf:3d:7b:39:05:7b:f4:f3:fb:1a:a1:d0:c8:7e:
|
66
|
-
4e:64:8d:cd:8c:61:55:90:fe:3a:ca:5d:25:0f:f8:1d:a3:4a:
|
67
|
-
74:56:4f:1a:55:40:70:75:25:a6:33:2e:ba:4b:a5:5d:53:9a:
|
68
|
-
0d:30:e1:8d:5f:61:2c:af:cc:ef:b0:99:a1:80:ff:0b:f2:62:
|
69
|
-
4c:70:26:98
|
70
|
-
-----BEGIN CERTIFICATE-----
|
71
|
-
MIIEJTCCAw2gAwIBAgIDAjp3MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
|
72
|
-
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
73
|
-
YWwgQ0EwHhcNMTQwODI5MjEzOTMyWhcNMjIwNTIwMjEzOTMyWjBHMQswCQYDVQQG
|
74
|
-
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXUmFwaWRTU0wg
|
75
|
-
U0hBMjU2IENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv
|
76
|
-
VJvZWF0eLFbG1eh/9H0WA//Qi1rkjqfdVC7UBMBdmJyNkA+8EGVf2prWRHzAn7Xp
|
77
|
-
SowLBkMEu/SW4ib2YQGRZjEiwzQ0Xz8/kS9EX9zHFLYDn4ZLDqP/oIACg8PTH2lS
|
78
|
-
1p1kD8mD5xvEcKyU58Okaiy9uJ5p2L4KjxZjWmhxgHsw3hUEv8zTvz5IBVV6s9cQ
|
79
|
-
DAP8m/0Ip4yM26eO8R5j3LMBL3+vV8M8SKeDaCGnL+enP/C1DPz1hNFTvA5yT2AM
|
80
|
-
QriYrRmIV9cE7Ie/fodOoyH5U/02mEiN1vi7SPIpyGTRzFRIU4uvt2UevykzKdkp
|
81
|
-
YEj4/5G8V1jlNS67abZZAgMBAAGjggEdMIIBGTAfBgNVHSMEGDAWgBTAephojYn7
|
82
|
-
qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUw5zz/NNGCDS7zkZ/oHxb8+IIy1kwEgYD
|
83
|
-
VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0fBC4wLDAqoCig
|
84
|
-
JoYkaHR0cDovL2cuc3ltY2IuY29tL2NybHMvZ3RnbG9iYWwuY3JsMC4GCCsGAQUF
|
85
|
-
BwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL2cuc3ltY2QuY29tMEwGA1UdIARF
|
86
|
-
MEMwQQYKYIZIAYb4RQEHNjAzMDEGCCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdlb3Ry
|
87
|
-
dXN0LmNvbS9yZXNvdXJjZXMvY3BzMA0GCSqGSIb3DQEBCwUAA4IBAQCjWB7GQzKs
|
88
|
-
rC+TeLfqrlRARy1+eI1Q9vhmrNZPc9ZE768LzFvB9E+aj0l+YK/CJ8cW8fuTgZCp
|
89
|
-
fO9vfm5FlBaEvexJ8cQO9K8EWYOHDyw7l8NaEpt7BDV7o5UzCHuTcSJCs6nZb0+B
|
90
|
-
kvwHtnm8hEqddwnxxYny8LScVKoSew26T++TGezvfU5ho452nFnPjJSxhJf3GrkH
|
91
|
-
uLLGTxN5279PURt/aQ1RKsHWFf83UTRlUfQevjhq7A6rvz17OQV79PP7GqHQyH5O
|
92
|
-
ZI3NjGFVkP46yl0lD/gdo0p0Vk8aVUBwdSWmMy66S6VdU5oNMOGNX2Esr8zvsJmh
|
93
|
-
gP8L8mJMcCaY
|
94
|
-
-----END CERTIFICATE-----
|