instrumental_agent 0.12.7 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +5 -2
- data/Gemfile +2 -2
- data/README.md +2 -2
- data/Rakefile +1 -0
- data/certs/equifax.ca.pem +69 -0
- data/certs/geotrust.ca.pem +80 -0
- data/certs/rapidssl.ca.pem +94 -0
- data/instrumental_agent.gemspec +1 -7
- data/lib/instrumental/agent.rb +99 -16
- data/lib/instrumental/version.rb +1 -1
- data/spec/agent_spec.rb +417 -392
- data/spec/test.crt +16 -0
- data/spec/test.csr +12 -0
- data/spec/test.key +15 -0
- data/spec/test_server.rb +50 -14
- metadata +13 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68d5c4451d15ba2eeb83f189d14f4a34c6ec77fd
|
4
|
+
data.tar.gz: 6e7e2fd6ec37a5eb210563deec7c04ee91794a84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7973eec6253fe0e536480351318746c2ab6561a272485d39297b13e4cc50fdda98dd32fd538baf22c7eac9128ba61cb64982b0c221002155bf14a77862d04ede
|
7
|
+
data.tar.gz: c1979ec7dcc1f04c3c5d4aaad1debf8d6ffecaa87ee2e527332e3fda2d96904db701f2f5c922897f09ed841775c3c84233682edb18c101b963553aeaba5c42e7
|
data/.travis.yml
CHANGED
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/
|
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/
|
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/
|
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)
|
107
|
+
We are here to help. Email us at [support@instrumentalapp.com](mailto:support@instrumentalapp.com).
|
data/Rakefile
CHANGED
@@ -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-----
|
data/instrumental_agent.gemspec
CHANGED
@@ -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/
|
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
|
data/lib/instrumental/agent.rb
CHANGED
@@ -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
|
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
|
-
|
13
|
-
|
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:
|
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
|
-
|
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
|
-
|
297
|
-
|
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
|
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)
|
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
|