lpxc 0.0.7 → 0.0.8
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.
- data/lib/lpxc.rb +48 -8
- metadata +8 -6
- checksums.yaml +0 -7
data/lib/lpxc.rb
CHANGED
@@ -28,6 +28,27 @@ class LogMsgQueue
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
# Like SizedQueue, but drops instead of blocking. Pass one of these in
|
32
|
+
# as :request_queue if you would prefer loss to slowing down in cases
|
33
|
+
# of back-pressure.
|
34
|
+
class DroppingSizedQueue < SizedQueue
|
35
|
+
# Returns true/false depending on whether the queue is full or not
|
36
|
+
def push(obj)
|
37
|
+
@mutex.synchronize do
|
38
|
+
return false unless @que.length < @max
|
39
|
+
|
40
|
+
@que.push obj
|
41
|
+
begin
|
42
|
+
t = @waiting.shift
|
43
|
+
t.wakeup if t
|
44
|
+
rescue ThreadError
|
45
|
+
retry
|
46
|
+
end
|
47
|
+
return true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
31
52
|
class Lpxc
|
32
53
|
|
33
54
|
#After parsing opts and initializing defaults, the initializer
|
@@ -59,8 +80,9 @@ class Lpxc
|
|
59
80
|
@conn_timeout = opts[:conn_timeout] || 2
|
60
81
|
@batch_size = opts[:batch_size] || 300
|
61
82
|
@flush_interval = opts[:flush_interval] || 0.5
|
62
|
-
@
|
63
|
-
|
83
|
+
@user_agent = opts[:user_agent] || ENV["LPXC_USER_AGENT"] || "Lpxc (Ruby #{RUBY_VERSION})"
|
84
|
+
@logplex_url = URI((opts[:logplex_url] || ENV["LOGPLEX_URL"] ||
|
85
|
+
raise("Must set logplex url.")).to_s)
|
64
86
|
|
65
87
|
#Keep track of the number of requests that the outlet
|
66
88
|
#is processing. This value is used by the wait function.
|
@@ -71,7 +93,20 @@ class Lpxc
|
|
71
93
|
|
72
94
|
#Start the processing threads.
|
73
95
|
Thread.new {outlet}
|
74
|
-
Thread.new {delay_flush}
|
96
|
+
Thread.new {delay_flush} unless opts[:disable_delay_flush]
|
97
|
+
at_exit {wait} unless opts[:disable_at_exit_flush]
|
98
|
+
end
|
99
|
+
|
100
|
+
#Automatically create an Lpxc client object for a given URL if none exists,
|
101
|
+
#and use it to send msg using the token from the URL.
|
102
|
+
def self.puts(msg, url, opts={})
|
103
|
+
@lock = Mutex.new
|
104
|
+
url = url.is_a?(URI) ? url : URI(url)
|
105
|
+
server = [url.host, url.port, url.scheme]
|
106
|
+
@clients ||= {}
|
107
|
+
opts[:logplex_url] = url
|
108
|
+
c = @lock.synchronize { @clients[server] ||= Lpxc.new(opts) }
|
109
|
+
c.puts(msg, url.password)
|
75
110
|
end
|
76
111
|
|
77
112
|
#The interface to publish logs into the stream.
|
@@ -92,11 +127,15 @@ class Lpxc
|
|
92
127
|
#Wait until all of the data has been cleared from memory.
|
93
128
|
#This is useful if you don't want your program to exit before
|
94
129
|
#we are able to deliver log messages to logplex.
|
95
|
-
def wait
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
130
|
+
def wait(max=10)
|
131
|
+
Timeout.timeout(max) do
|
132
|
+
sleep(0.1) until
|
133
|
+
@hash.length.zero? &&
|
134
|
+
@request_queue.empty? &&
|
135
|
+
@req_in_flight.zero?
|
136
|
+
end
|
137
|
+
true
|
138
|
+
rescue Timeout::Error => _
|
100
139
|
end
|
101
140
|
|
102
141
|
# Empty all log messages into a request queue. Messages will be grouped
|
@@ -131,6 +170,7 @@ class Lpxc
|
|
131
170
|
req = Net::HTTP::Post.new(@logplex_url.path)
|
132
171
|
req.basic_auth("token", tok)
|
133
172
|
req.add_field('Content-Type', 'application/logplex-1')
|
173
|
+
req.add_field('User-Agent', @user_agent) if @user_agent
|
134
174
|
req.body = body
|
135
175
|
@request_queue.enq(req)
|
136
176
|
@last_flush = Time.now
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lpxc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Ryan Smith (♠ ace hacker)
|
@@ -20,25 +21,26 @@ files:
|
|
20
21
|
homepage: http://github.com/ryandotsmith/lpxc
|
21
22
|
licenses:
|
22
23
|
- MIT
|
23
|
-
metadata: {}
|
24
24
|
post_install_message:
|
25
25
|
rdoc_options: []
|
26
26
|
require_paths:
|
27
27
|
- lib
|
28
28
|
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
29
30
|
requirements:
|
30
|
-
- - '>='
|
31
|
+
- - ! '>='
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
34
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
34
36
|
requirements:
|
35
|
-
- - '>='
|
37
|
+
- - ! '>='
|
36
38
|
- !ruby/object:Gem::Version
|
37
39
|
version: '0'
|
38
40
|
requirements: []
|
39
41
|
rubyforge_project:
|
40
|
-
rubygems_version:
|
42
|
+
rubygems_version: 1.8.23
|
41
43
|
signing_key:
|
42
|
-
specification_version:
|
44
|
+
specification_version: 3
|
43
45
|
summary: Ruby client for logplex.
|
44
46
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: a9a59ea66505168840a485b178c9f805df781f4b
|
4
|
-
data.tar.gz: 1181f1e2976a3a6a0fccf4e88a006c66bca90815
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 2c7f0c812aa0f867262d7e178bafa9e804704d0493d5951b65334d479253c3566162cbde8a6ebd9c82f4534e0b650d5780d7bee6b721aee27d57b48d411d02ff
|
7
|
-
data.tar.gz: ef326d1790d550779e7c6e86851228d0dc16fc1da8e87b735ce7a05dab91154ba99291184212c2134b2a6a644f39f983fc757376a47c5f34ab4b2ce7f3362dde
|