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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 95eafa56c7f6a610405a68634bd590c76d81a332
4
- data.tar.gz: 5a1d84b622e6eb7cc931c2b29c170113fb3fdb6f
2
+ SHA256:
3
+ metadata.gz: a45dc47aabd6ade8ea7198ea34f4bbc205a4979b1cae1ed18dbfabb4109df0b8
4
+ data.tar.gz: 67ebcbf6fca85da2087e6196dbcf57752ebe3470411c54241487ce834c2f5cf7
5
5
  SHA512:
6
- metadata.gz: 77e15be11d00e7b900461a5321304ea8c39db039e2cdea298b2f1e6095986476d10d5f45ddfa457c26caa6fc26a41a0b515c62fa62802c3d323d529d4b917635
7
- data.tar.gz: e9347c78c125ebc12a86970425d16e8c682a4355f8fe58e360edf23a7938e004ea6765d103970f2f57205cb6d163f59016574934c1548f10d35e4f5782108cde
6
+ metadata.gz: 1bfe306e6511e588aa58a258510b18f79fe4b70180b7ee8bd4fea0b967d80cf8cab3765228b4cd385f99537704557f918d92972b9cf6da0b646225b4a5c6bd87
7
+ data.tar.gz: feaf73f66d1ed593936bcd3aecf4e0ebccbc67fcf104905e28ad67e9d4e14575a0a3259a5c1fc9b2ac21ef212c2be64910c757bfc931668b48799d3466eeacc8
@@ -1 +1 @@
1
- 2.0.0-p648
1
+ 2.6.3
@@ -1,8 +1,6 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.0.0-p648
5
- - 2.1.5
6
- - 2.2.3
7
- - 2.3.0
8
- - 2.4.0
4
+ - 2.4.6
5
+ - 2.5.5
6
+ - 2.6.3
@@ -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'
@@ -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 = ["Elijah Miller", "Christopher Zelenak", "Kristopher Chambers", "Matthew Hassfurder"]
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.0.0'
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")
@@ -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 occurred: #{e.message}\n#{e.backtrace.join("\n")}"
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
- # In the case where the socket is an OpenSSL::SSL::SSLSocket,
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
- logger.info "connecting to collector"
433
- with_timeout(CONNECT_TIMEOUT) do
434
- @socket = open_socket(@sockaddr_in, @secure, @verify_cert)
435
- end
436
- logger.info "connected to collector at #{host}:#{port}"
437
- hello_options = {
438
- "version" => "ruby/instrumental_agent/#{VERSION}",
439
- "hostname" => HOSTNAME,
440
- "pid" => Process.pid,
441
- "runtime" => "#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"}/#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}",
442
- "platform" => RUBY_PLATFORM
443
- }.to_a.flatten.map { |v| v.to_s.gsub(/\s+/, "_") }.join(" ")
444
-
445
- send_with_reply_timeout "hello #{hello_options}"
446
- send_with_reply_timeout "authenticate #{@api_key}"
447
- @failures = 0
448
- loop do
449
- command_and_args, command_options = @queue.pop
450
- if command_and_args
451
- sync_resource = command_options && command_options[:sync_resource]
452
- test_connection
453
- case command_and_args
454
- when 'exit'
455
- logger.info "Exiting, #{@queue.size} commands remain"
456
- return true
457
- when 'flush'
458
- release_resource = true
459
- else
460
- logger.debug "Sending: #{command_and_args.chomp}"
461
- @socket.puts command_and_args
462
- end
463
- command_and_args = nil
464
- command_options = nil
465
- if sync_resource
466
- @sync_mutex.synchronize do
467
- sync_resource.signal
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
- end
472
- rescue Exception => err
473
- allow_reconnect = @allow_reconnect
474
- case err
475
- when EOFError
457
+ rescue Exception => err
458
+ allow_reconnect = @allow_reconnect
459
+ case err
460
+ when EOFError
476
461
  # nop
477
- when Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::EADDRINUSE, Timeout::Error
478
- # If the connection has been refused by Instrumental
479
- # or we cannot reach the server
480
- # or the connection state of this socket is in a race
481
- logger.error "unable to connect to Instrumental, hanging up with #{@queue.size} messages remaining"
482
- logger.debug "Exception: #{err.inspect}\n#{err.backtrace.join("\n")}"
483
- allow_reconnect = false
484
- else
485
- report_exception(err)
486
- end
487
- if allow_reconnect == false ||
488
- (command_options && command_options[:allow_reconnect] == false)
489
- logger.info "Not trying to reconnect"
490
- @failures = 0
491
- return
492
- end
493
- if command_and_args
494
- logger.debug "requeueing: #{command_and_args}"
495
- @queue << command_and_args
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
@@ -1,3 +1,3 @@
1
1
  module Instrumental
2
- VERSION = "2.1.0"
2
+ VERSION = "3.0.0.alpha"
3
3
  end
@@ -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.times do |i|
230
- agent.increment('overflow_test', i + 1, 300)
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('connection_failure', 1, 1234)
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('connection_failure', 1, 1234)
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: 2.1.0
4
+ version: 3.0.0.alpha
5
5
  platform: ruby
6
6
  authors:
7
- - Elijah Miller
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: 2018-01-19 00:00:00.000000000 Z
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.0.0
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: '0'
149
+ version: 1.3.1
156
150
  requirements: []
157
- rubyforge_project:
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
@@ -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-----
@@ -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-----
@@ -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-----