Class: Le::Host::HTTP
Constant Summary
collapse
- API_SERVER =
'api.logentries.com'
- API_PORT =
10000
- API_SSL_PORT =
20000
- API_CERT =
'-----BEGIN CERTIFICATE-----
MIIFSjCCBDKgAwIBAgIDCQpNMA0GCSqGSIb3DQEBBQUAMGExCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRh
dGVkIFNTTDEbMBkGA1UEAxMSR2VvVHJ1c3QgRFYgU1NMIENBMB4XDTE0MDQxNTEz
NTcxNVoXDTE2MDkxMzA0MTMzMFowgcExKTAnBgNVBAUTIEhpL1RHbXlmUEpJYTFy
b0NQdlJ1U1NNRVdLOFp0NUtmMRMwEQYDVQQLEwpHVDAzOTM4NjcwMTEwLwYDVQQL
EyhTZWUgd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3BzIChjKTEyMS8wLQYD
VQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBRdWlja1NTTChSKTEbMBkG
A1UEAxMSYXBpLmxvZ2VudHJpZXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAwGsgjVb/pn7Go1jqNQVFsN+VEMRFpu7bJ5i+Lv/gY9zXBDGULr3d
j9/hB/pa49nLUpy9GsaFru2AjNoveoVoe5ng2QhZRlUn77hxkoZsaiD+rrH/D/Yp
LP3b/pNQg+nNTC81uwbhlxjIoeMSaPGjr1SFjZ1StCprZKFRu3IV+2/wZ+STUz/L
aA3r6J86DRptasbzYMkDyWlUzN3nhYUcPUNrd4jSk+soSDEuDpHMahgRdQBo6Dht
EKCSY+vB5ZIgEydI7mra8ygRjXotvc0zeb8Jvo8ZhyLDwvxjgo9F6Li3h/tfAjRR
4ngV7yg9o8MgXN852GMHpUxzqhygLeyqSQIDAQABo4IBqDCCAaQwHwYDVR0jBBgw
FoAUjPTZkwpHvACgSs5LdW6gtrCyfvwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHREEFjAUghJhcGkubG9nZW50cmll
cy5jb20wQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2d0c3NsZHYtY3JsLmdlb3Ry
dXN0LmNvbS9jcmxzL2d0c3NsZHYuY3JsMB0GA1UdDgQWBBRowYR/aaGeiRRQxbaV
1PI8hS4m9jAMBgNVHRMBAf8EAjAAMHUGCCsGAQUFBwEBBGkwZzAsBggrBgEFBQcw
AYYgaHR0cDovL2d0c3NsZHYtb2NzcC5nZW90cnVzdC5jb20wNwYIKwYBBQUHMAKG
K2h0dHA6Ly9ndHNzbGR2LWFpYS5nZW90cnVzdC5jb20vZ3Rzc2xkdi5jcnQwTAYD
VR0gBEUwQzBBBgpghkgBhvhFAQc2MDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cu
Z2VvdHJ1c3QuY29tL3Jlc291cmNlcy9jcHMwDQYJKoZIhvcNAQEFBQADggEBAAzx
g9JKztRmpItki8XQoGHEbopDIDMmn4Q7s9k7L9nT5gn5XCXdIHnsSe8+/2N7tW4E
iHEEWC5G6Q16FdXBwKjW2LrBKaP7FCRcqXJSI+cfiuk0uywkGBTXpqBVClQRzypd
9vZONyFFlLGUwUC1DFVxe7T77Dv+pOPuJ7qSfcVUnVtzpLMMWJsDG6NHpy0JhsS9
wVYQgpYWRRZ7bJyfRCJxzIdYF3qy/P9NWyZSlDUuv11s1GSFO2pNd34p59GacVAL
BJE6y5eOPTSbtkmBW/ukaVYdI5NLXNer3IaK3fetV3LvYGOaX8hR45FI1pvyKYvf
S5ol3bQmY1mv78XKkOk=
-----END CERTIFICATE-----'
Instance Attribute Summary collapse
Instance Method Summary
collapse
#format_message, #formatter
Constructor Details
#initialize(token, local, debug, ssl) ⇒ HTTP
Returns a new instance of HTTP.
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/le/host/http.rb', line 48
def initialize(token, local, debug, ssl)
if local
if defined?(Rails)
@logger_console = Logger.new("log/#{Rails.env}.log")
else
@logger_console = Logger.new(STDOUT)
end
end
@token = token
@local = local
@debug = debug
@ssl = ssl
@queue = Queue.new
@started = false
@thread = nil
if @debug
self.init_debug
end
end
|
Instance Attribute Details
#conn ⇒ Object
Returns the value of attribute conn.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def conn
@conn
end
|
#debug ⇒ Object
Returns the value of attribute debug.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def debug
@debug
end
|
#local ⇒ Object
Returns the value of attribute local.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def local
@local
end
|
#queue ⇒ Object
Returns the value of attribute queue.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def queue
@queue
end
|
#ssl ⇒ Object
Returns the value of attribute ssl.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def ssl
@ssl
end
|
#started ⇒ Object
Returns the value of attribute started.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def started
@started
end
|
#thread ⇒ Object
Returns the value of attribute thread.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def thread
@thread
end
|
#token ⇒ Object
Returns the value of attribute token.
46
47
48
|
# File 'lib/le/host/http.rb', line 46
def token
@token
end
|
Instance Method Details
#check_async_thread ⇒ Object
103
104
105
106
107
|
# File 'lib/le/host/http.rb', line 103
def check_async_thread
if not(@thread && @thread.alive?)
@thread = Thread.new { run() }
end
end
|
#close ⇒ Object
109
110
111
112
|
# File 'lib/le/host/http.rb', line 109
def close
dbg "LE: Closing asynchronous socket writer"
@started = false
end
|
#closeConnection ⇒ Object
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/le/host/http.rb', line 154
def closeConnection
begin
if @conn.respond_to?(:sysclose)
@conn.sysclose
elsif @conn.respond_to?(:close)
@conn.close
end
rescue
dbg "LE: couldn't close connection, close with exception - #{ $! }"
ensure
@conn = nil
end
end
|
#dbg(message) ⇒ Object
77
78
79
80
81
|
# File 'lib/le/host/http.rb', line 77
def dbg(message)
if @debug
@debug_logger.add(Logger::Severity::DEBUG, message)
end
end
|
#init_debug ⇒ Object
69
70
71
72
73
74
75
|
# File 'lib/le/host/http.rb', line 69
def init_debug
filePath = "logentriesGem.log"
if File.exist?('log/')
filePath = "log/logentriesGem.log"
end
@debug_logger = Logger.new(filePath)
end
|
#openConnection ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/le/host/http.rb', line 114
def openConnection
dbg "LE: Reopening connection to Logentries API server"
port = @ssl ? API_SSL_PORT : API_PORT
socket = TCPSocket.new(API_SERVER, port)
if @ssl
ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.cert = OpenSSL::X509::Certificate.new(API_CERT)
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect
@conn = ssl_socket
else
@conn = socket
end
dbg "LE: Connection established"
end
|
#reopenConnection ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/le/host/http.rb', line 131
def reopenConnection
closeConnection
root_delay = 0.1
loop do
begin
openConnection
break
rescue TimeoutError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::ETIMEDOUT, EOFError
dbg "LE: Unable to connect to Logentries due to timeout(#{ $! })"
rescue
dbg "LE: Got exception in reopenConnection - #{ $! }"
raise
end
root_delay *= 2
if root_delay >= 10
root_delay = 10
end
wait_for = (root_delay + rand(root_delay)).to_i
dbg "LE: Waiting for #{ wait_for }ms"
sleep(wait_for)
end
end
|
#run ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
# File 'lib/le/host/http.rb', line 168
def run
reopenConnection
loop do
data = @queue.pop
loop do
begin
@conn.write(data)
rescue TimeoutError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::ETIMEOUT, EOFError
dbg "LE: Connection timeout(#{ $! }), try to reopen connection"
reopenConnection
next
rescue
dbg("LE: Got exception in run loop - #{ $! }")
raise
end
break
end
end
dbg "LE: Closing Asyncrhonous socket writer"
closeConnection
end
|
#start_async_thread ⇒ Object
97
98
99
100
101
|
# File 'lib/le/host/http.rb', line 97
def start_async_thread
@thread = Thread.new { run() }
dbg "LE: Asynchronous socket writer started"
@started = true
end
|
#write(message) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/le/host/http.rb', line 83
def write(message)
if @local
@logger_console.add(Logger::Severity::UNKNOWN, message)
end
@queue << "#{ @token }#{ message }\n"
if @started
check_async_thread
else
start_async_thread
end
end
|