instrumental_agent 0.12.7 → 0.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f95066225c732dd9d44e2a3c831a5bd3e895a92
4
- data.tar.gz: 43d8a7167313465ad364d8a1f879b1b52f91481d
3
+ metadata.gz: 68d5c4451d15ba2eeb83f189d14f4a34c6ec77fd
4
+ data.tar.gz: 6e7e2fd6ec37a5eb210563deec7c04ee91794a84
5
5
  SHA512:
6
- metadata.gz: 828af17ccec4c084dfe47b7e9a4a8726ab9e73b85abd2fb1a04f3f643ed387e8e076dc6f0aacd51fe8ce04a95711a3a5e9ed0835ae2b1e24f9819c93c5be4de9
7
- data.tar.gz: f4c043d252d72009ef926db4ca97f91575b8153fd7303a353611c932de75c99eb63a0ac3193d2e74c5fe28e024dc426507a58a08b41be738787a4f357de86990
6
+ metadata.gz: 7973eec6253fe0e536480351318746c2ab6561a272485d39297b13e4cc50fdda98dd32fd538baf22c7eac9128ba61cb64982b0c221002155bf14a77862d04ede
7
+ data.tar.gz: c1979ec7dcc1f04c3c5d4aaad1debf8d6ffecaa87ee2e527332e3fda2d96904db701f2f5c922897f09ed841775c3c84233682edb18c101b963553aeaba5c42e7
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
3
4
  - 1.8.7
@@ -6,5 +7,3 @@ rvm:
6
7
  - 2.0.0
7
8
  - jruby-18mode
8
9
  - jruby-19mode
9
- - rbx-18mode
10
- - rbx-19mode
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ### 0.13.0 [August 3, 2015]
2
+ * Add support for encrypted transport, tests for same
3
+
1
4
  ### 0.12.7 [August 11th, 2014]
2
5
  * Fix MRI 1.8.7 incompatibility due to RUBY_ENGINE constant
3
6
 
@@ -53,7 +56,7 @@
53
56
  * Fix for dead lock issuew
54
57
 
55
58
  ### 0.9.5 [March 23rd, 2012]
56
- * Defer startup of agent thread until metrics are submitted - this update is strongly recommended for anyone using Ruby Enterprise Edition in concert w/ a preforking application server (like Phusion Passenger). See the [REE wiki page](https://github.com/fastestforward/instrumental_agent/wiki/Using-with-Ruby-Enterprise-Edition) for more information.
59
+ * Defer startup of agent thread until metrics are submitted - this update is strongly recommended for anyone using Ruby Enterprise Edition in concert w/ a preforking application server (like Phusion Passenger). See the [REE wiki page](https://github.com/expectedbehavior/instrumental_agent/wiki/Using-with-Ruby-Enterprise-Edition) for more information.
57
60
  * Add .stop method for cancelling agent processing
58
61
  * Changes to how defaults are processed at initialization
59
62
  * Documentation for usage w/ Resque and Resque like scenarios
@@ -100,7 +103,7 @@
100
103
  * Code cleanup
101
104
 
102
105
  ### 0.5.1 [December 12, 2011]
103
- * instrument_server moved to instrumental_tools gem (https://github.com/fastestforward/instrumental_tools)
106
+ * instrument_server moved to instrumental_tools gem (https://github.com/expectedbehavior/instrumental_tools)
104
107
 
105
108
  ### 0.5 [December 9, 2011]
106
109
  * Allow negative numbers to be submitted
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
-
5
- if RUBY_VERSION < "1.9"
4
+ ruby_engine = defined?(RUBY_ENGINE) && RUBY_ENGINE
5
+ if RUBY_VERSION < "1.9" && !%w{jruby rbx}.include?(ruby_engine)
6
6
  # Built and installed via ext/mkrf_conf.rb
7
7
  gem 'system_timer', '~> 1.2'
8
8
  end
data/README.md CHANGED
@@ -59,7 +59,7 @@ end
59
59
 
60
60
  ## Server Stats
61
61
 
62
- Want some general server stats (load, memory, etc.)? Check out the [instrumental_tools](https://github.com/fastestforward/instrumental_tools) gem.
62
+ Want some general server stats (load, memory, etc.)? Check out the [instrumental_tools](https://github.com/expectedbehavior/instrumental_tools) gem.
63
63
 
64
64
  ```sh
65
65
  gem install instrumental_tools
@@ -104,4 +104,4 @@ Users of Ruby Enterprise Edition should plan on using version 0.9.5 of the Instr
104
104
 
105
105
  ## Troubleshooting & Help
106
106
 
107
- We are here to help. Email us at [support@instrumentalapp.com](mailto:support@instrumentalapp.com), or visit the [Instrumental Support](https://fastestforward.campfirenow.com/6b934) Campfire room.
107
+ We are here to help. Email us at [support@instrumentalapp.com](mailto:support@instrumentalapp.com).
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ require 'bundler/setup'
1
2
  require 'bundler/gem_tasks'
2
3
  require 'rspec/core/rake_task'
3
4
 
@@ -0,0 +1,69 @@
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-----
@@ -0,0 +1,80 @@
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-----
@@ -0,0 +1,94 @@
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-----
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.version = Instrumental::VERSION
7
7
  s.authors = ["Elijah Miller", "Christopher Zelenak", "Kristopher Chambers", "Matthew Hassfurder"]
8
8
  s.email = ["support@instrumentalapp.com"]
9
- s.homepage = "http://github.com/fastestforward/instrumental_agent"
9
+ s.homepage = "http://github.com/expectedbehavior/instrumental_agent"
10
10
  s.summary = %q{Agent for reporting data to instrumentalapp.com}
11
11
  s.description = %q{Track anything.}
12
12
  s.license = "MIT"
@@ -19,10 +19,4 @@ Gem::Specification.new do |s|
19
19
  s.add_development_dependency(%q<rake>, [">= 0"])
20
20
  s.add_development_dependency(%q<rspec>, ["~> 2.0"])
21
21
  s.add_development_dependency(%q<fuubar>, [">= 0"])
22
- if RUBY_VERSION >= "1.9.2"
23
- s.add_development_dependency(%q<guard>, [">= 0"])
24
- s.add_development_dependency(%q<guard-rspec>, [">= 0"])
25
- s.add_development_dependency(%q<growl>, [">= 0"])
26
- s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
27
- end
28
22
  end
@@ -1,22 +1,24 @@
1
1
  require 'instrumental/version'
2
2
  require 'instrumental/system_timer'
3
3
  require 'logger'
4
+ require 'openssl' rescue nil
4
5
  require 'thread'
5
6
  require 'socket'
6
7
 
7
8
 
8
9
  module Instrumental
9
10
  class Agent
10
- BACKOFF = 2.0
11
+ BACKOFF = 2.0
12
+ CONNECT_TIMEOUT = 20
13
+ EXIT_FLUSH_TIMEOUT = 5
14
+ HOSTNAME = Socket.gethostbyname(Socket.gethostname).first rescue Socket.gethostname
15
+ MAX_BUFFER = 5000
11
16
  MAX_RECONNECT_DELAY = 15
12
- MAX_BUFFER = 5000
13
- REPLY_TIMEOUT = 10
14
- CONNECT_TIMEOUT = 20
15
- EXIT_FLUSH_TIMEOUT = 5
16
- HOSTNAME = Socket.gethostbyname(Socket.gethostname).first rescue Socket.gethostname
17
+ REPLY_TIMEOUT = 10
18
+
17
19
 
18
20
  attr_accessor :host, :port, :synchronous, :queue
19
- attr_reader :connection, :enabled
21
+ attr_reader :connection, :enabled, :secure
20
22
 
21
23
  def self.logger=(l)
22
24
  @logger = l
@@ -42,18 +44,33 @@ module Instrumental
42
44
 
43
45
  # defaults
44
46
  # host: collector.instrumentalapp.com
45
- # port: 8000
47
+ # port: 8001
46
48
  # enabled: true
47
49
  # synchronous: false
50
+ # secure: true
51
+ # verify: true
48
52
  @api_key = api_key
49
53
  @host, @port = options[:collector].to_s.split(':')
50
54
  @host ||= 'collector.instrumentalapp.com'
51
- @port = (@port || 8000).to_i
55
+ requested_secure = options[:secure] == true
56
+ desired_secure = options[:secure].nil? ? allows_secure? : !!options[:secure]
57
+ if !allows_secure? && desired_secure
58
+ logger.warn "Cannot connect to Instrumental via encrypted transport, SSL not available"
59
+ if requested_secure
60
+ options[:enabled] = false
61
+ logger.error "You requested secure protocol to connect to Instrumental, but it is not available on this system (OpenSSL is not defined). Connecting to Instrumental has been disabled."
62
+ end
63
+ desired_secure = false
64
+ end
65
+ @secure = desired_secure
66
+ @verify_cert = options[:verify_cert].nil? ? true : !!options[:verify_cert]
67
+ default_port = @secure ? 8001 : 8000
68
+ @port = (@port || default_port).to_i
52
69
  @enabled = options.has_key?(:enabled) ? !!options[:enabled] : true
53
70
  @synchronous = !!options[:synchronous]
54
71
  @pid = Process.pid
55
72
  @allow_reconnect = true
56
-
73
+ @certs = certificates
57
74
  setup_cleanup_at_exit if @enabled
58
75
  end
59
76
 
@@ -291,10 +308,41 @@ module Instrumental
291
308
  message
292
309
  end
293
310
 
311
+ def wait_exceptions
312
+ classes = [Errno::EAGAIN]
313
+ if defined?(IO::EAGAINWaitReadable)
314
+ classes << IO::EAGAINWaitReadable
315
+ end
316
+ if defined?(IO::EWOULDBLOCKWaitReadable)
317
+ classes << IO::EWOULDBLOCKWaitReadable
318
+ end
319
+ if defined?(IO::WaitReadable)
320
+ classes << IO::WaitReadable
321
+ end
322
+ classes
323
+ end
324
+
325
+
294
326
  def test_connection
295
327
  begin
296
- @socket.read_nonblock(1)
297
- rescue Errno::EAGAIN
328
+ # In the case where the socket is an OpenSSL::SSL::SSLSocket,
329
+ # on Ruby 1.8.6, 1.8.7 or 1.9.1, read_nonblock does not exist,
330
+ # and so the case of testing socket liveliness via a nonblocking
331
+ # read that catches a wait condition won't work.
332
+ #
333
+ # We grab the SSL socket's underlying IO object and perform the
334
+ # non blocking read there in order to ensure the socket is still
335
+ # valid
336
+ if @socket.respond_to?(:read_nonblock)
337
+ @socket.read_nonblock(1)
338
+ elsif @socket.respond_to?(:io)
339
+ # The SSL Socket may send down additional data at close time,
340
+ # so we perform two nonblocking reads, one to pull any pending
341
+ # data on the socket, and the second to actually perform the connection
342
+ # liveliness test
343
+ @socket.io.read_nonblock(1024) && @socket.io.read_nonblock(1024)
344
+ end
345
+ rescue *wait_exceptions
298
346
  # noop
299
347
  end
300
348
  end
@@ -323,15 +371,29 @@ module Instrumental
323
371
  end
324
372
  end
325
373
 
326
-
374
+ def open_socket(remote_host, remote_port, secure, verify_cert)
375
+ sock = TCPSocket.open(remote_host, remote_port)
376
+ if secure
377
+ context = OpenSSL::SSL::SSLContext.new()
378
+ if verify_cert
379
+ context.set_params(:verify_mode => OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT)
380
+ else
381
+ context.set_params(:verify_mode => OpenSSL::SSL::VERIFY_NONE)
382
+ end
383
+ ssl_socket = OpenSSL::SSL::SSLSocket.new(sock, context)
384
+ ssl_socket.sync_close = true
385
+ ssl_socket.connect
386
+ sock = ssl_socket
387
+ end
388
+ sock
389
+ end
327
390
 
328
391
  def run_worker_loop
329
392
  command_and_args = nil
330
393
  command_options = nil
331
394
  logger.info "connecting to collector"
332
- @socket = Socket.new(Socket::PF_INET, Socket::SOCK_STREAM, 0)
333
395
  with_timeout(CONNECT_TIMEOUT) do
334
- @socket.connect Socket.pack_sockaddr_in(port, ipv4_address_for_host(host, port))
396
+ @socket = open_socket(host, port, @secure, @verify_cert)
335
397
  end
336
398
  logger.info "connected to collector at #{host}:#{port}"
337
399
  hello_options = {
@@ -404,11 +466,17 @@ module Instrumental
404
466
  !@thread.nil? && @pid == Process.pid
405
467
  end
406
468
 
469
+ def flush_socket(socket)
470
+ socket.flush
471
+ end
472
+
407
473
  def disconnect
408
474
  if connected?
409
475
  logger.info "Disconnecting..."
410
476
  begin
411
- with_timeout(EXIT_FLUSH_TIMEOUT) { @socket.flush }
477
+ with_timeout(EXIT_FLUSH_TIMEOUT) do
478
+ flush_socket(@socket)
479
+ end
412
480
  rescue Timeout::Error
413
481
  logger.info "Timed out flushing socket..."
414
482
  end
@@ -417,6 +485,21 @@ module Instrumental
417
485
  @socket = nil
418
486
  end
419
487
 
488
+ def allows_secure?
489
+ defined?(OpenSSL)
490
+ end
491
+
492
+ def certificates
493
+ if allows_secure?
494
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
495
+ %w{equifax geotrust rapidssl}.map do |name|
496
+ OpenSSL::X509::Certificate.new(File.open(File.join(base_dir, "certs", "#{name}.ca.pem")))
497
+ end
498
+ else
499
+ []
500
+ end
501
+ end
502
+
420
503
  end
421
504
 
422
505
  end