logporter 0.0.2 → 0.1.1
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/logporter/protocol/syslog3164.rb +1 -4
- data/lib/logporter/server.rb +21 -34
- data/lib/logporter/server/connection.rb +20 -9
- metadata +25 -12
@@ -1,5 +1,4 @@
|
|
1
1
|
require "logporter/namespace"
|
2
|
-
require "time" # for Time.strptime
|
3
2
|
|
4
3
|
module LogPorter::Protocol::Syslog3164
|
5
4
|
def syslog3164_init
|
@@ -33,9 +32,7 @@ module LogPorter::Protocol::Syslog3164
|
|
33
32
|
if m
|
34
33
|
# RFC3164 section 4.3.3 No PRI or Unidentifiable PRI
|
35
34
|
event.pri = m[1] || "13"
|
36
|
-
|
37
|
-
# TODO(sissel): DateTime is a very slow library, consider alternatives?
|
38
|
-
event.timestamp = Time.strptime(m[2], "%b %d %H:%M:%S")
|
35
|
+
event.timestamp = m[2]
|
39
36
|
event.hostname = m[3]
|
40
37
|
event.message = m[4]
|
41
38
|
return true
|
data/lib/logporter/server.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require "logporter/namespace"
|
2
2
|
require "logporter/server/connection"
|
3
3
|
require "logporter/server/defaulthandler"
|
4
|
-
require "logger"
|
5
4
|
|
6
5
|
class LogPorter::Server
|
7
6
|
|
@@ -24,9 +23,6 @@ class LogPorter::Server
|
|
24
23
|
# This is a hash
|
25
24
|
attr_reader :attributes
|
26
25
|
|
27
|
-
# The logger object
|
28
|
-
attr_accessor :logger
|
29
|
-
|
30
26
|
# Create a new server to listen with
|
31
27
|
# 'options' is a hash of:
|
32
28
|
#
|
@@ -35,12 +31,11 @@ class LogPorter::Server
|
|
35
31
|
# :wire => the wire format (:raw, :syslog)
|
36
32
|
# :handler => the handler instance. Must respond to 'receive_event'
|
37
33
|
def initialize(options)
|
38
|
-
@logger = Logger.new(STDOUT)
|
39
34
|
@network = options[:net]
|
40
|
-
@port = options
|
41
|
-
@wire = options
|
42
|
-
@handler = options
|
43
|
-
@attributes = options
|
35
|
+
@port = options[:port] || 514
|
36
|
+
@wire = options[:wire] || :raw
|
37
|
+
@handler = options[:handler] || LogPorter::Server::DefaultHandler.new
|
38
|
+
@attributes = options[:attributes] || Hash.new
|
44
39
|
|
45
40
|
if @network == :tls
|
46
41
|
@tls = TLSConfig.new
|
@@ -62,32 +57,25 @@ class LogPorter::Server
|
|
62
57
|
# s.start
|
63
58
|
#
|
64
59
|
# EventMachine.run()
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
when :tcp; start_tcp_server
|
79
|
-
when :tls; start_tcp_server # tls is handled by tcp.
|
60
|
+
EventMachine.next_tick do
|
61
|
+
puts "Starting #{@network}/#{@port}"
|
62
|
+
begin
|
63
|
+
case @network
|
64
|
+
when :udp; start_udp_server
|
65
|
+
when :tcp; start_tcp_server
|
66
|
+
when :tls; start_tcp_server # tls is handled by tcp.
|
67
|
+
else
|
68
|
+
raise "Unknown network '#{@network}' expected :udp, :tcp, or :tls"
|
69
|
+
end
|
70
|
+
rescue => e
|
71
|
+
if @handler.respond_to?(:receive_exception)
|
72
|
+
@handler.receive_exception(e)
|
80
73
|
else
|
81
|
-
raise
|
82
|
-
|
83
|
-
rescue => e
|
84
|
-
if @handler.respond_to?(:receive_exception)
|
85
|
-
@handler.receive_exception(e, self)
|
86
|
-
else
|
87
|
-
raise e
|
74
|
+
raise e
|
75
|
+
end
|
88
76
|
end
|
89
77
|
end
|
90
|
-
end # def
|
78
|
+
end # def start
|
91
79
|
|
92
80
|
private
|
93
81
|
def start_udp_server
|
@@ -105,11 +93,10 @@ class LogPorter::Server
|
|
105
93
|
public
|
106
94
|
def receive_event(event, client_addr, client_port)
|
107
95
|
@handler.receive_event(event, self, client_addr, client_port)
|
108
|
-
end
|
96
|
+
end
|
109
97
|
|
110
98
|
public
|
111
99
|
def stop
|
112
|
-
@logger.info "Stopping #{@network}/#{@port}"
|
113
100
|
case @network
|
114
101
|
when :tcp
|
115
102
|
EventMachine::stop_server(@socket)
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require "eventmachine"
|
1
|
+
require "eventmachine" if !(EventMachine::Connection rescue nil)
|
2
|
+
require "em/buftok" # for BufferedTokenizer
|
2
3
|
require "logporter/event"
|
3
4
|
require "logporter/namespace"
|
4
5
|
require "logporter/protocol/syslog3164"
|
@@ -10,6 +11,7 @@ class LogPorter::Server::Connection < EventMachine::Connection
|
|
10
11
|
|
11
12
|
def initialize(server)
|
12
13
|
@server = server
|
14
|
+
super()
|
13
15
|
end
|
14
16
|
|
15
17
|
def post_init
|
@@ -30,6 +32,7 @@ class LogPorter::Server::Connection < EventMachine::Connection
|
|
30
32
|
|
31
33
|
@count = 0
|
32
34
|
|
35
|
+
# TODO(sissel): Document why this.
|
33
36
|
case @server.wire
|
34
37
|
when :raw
|
35
38
|
class << self
|
@@ -43,11 +46,14 @@ class LogPorter::Server::Connection < EventMachine::Connection
|
|
43
46
|
raise "Unsupported protocol #{@server.protocol}"
|
44
47
|
end
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
if @server.network != :udp
|
50
|
+
peer = get_peername
|
51
|
+
if peer.is_a?(Array) # new em-netty::Connection.get_peername
|
52
|
+
@client_address, @client_port = peer
|
53
|
+
else
|
54
|
+
@client_port, @client_address = Socket.unpack_sockaddr_in(peer)
|
55
|
+
end
|
56
|
+
puts "New client: #{@client_address}:#{@client_port}"
|
51
57
|
end
|
52
58
|
end # def post_init
|
53
59
|
|
@@ -58,7 +64,12 @@ class LogPorter::Server::Connection < EventMachine::Connection
|
|
58
64
|
|
59
65
|
def receive_data(data)
|
60
66
|
if @server.network == :udp
|
61
|
-
|
67
|
+
peer = get_peername
|
68
|
+
if peer.is_a?(Array) # new em-netty::Connection.get_peername
|
69
|
+
client_address, client_port = peer
|
70
|
+
else
|
71
|
+
client_port, client_address = Socket.unpack_sockaddr_in(peer)
|
72
|
+
end
|
62
73
|
else
|
63
74
|
client_port = @client_port
|
64
75
|
client_address = @client_address
|
@@ -104,8 +115,8 @@ class LogPorter::Server::Connection < EventMachine::Connection
|
|
104
115
|
def stats
|
105
116
|
@start ||= Time.now
|
106
117
|
@count += 1
|
107
|
-
if
|
108
|
-
|
118
|
+
if @count % 50000 == 0
|
119
|
+
puts "Rate: #{@count / (Time.now - @start)}"
|
109
120
|
@start = Time.now
|
110
121
|
@count = 0
|
111
122
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 25
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jordan Sissel
|
@@ -15,11 +15,24 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-18 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
|
-
dependencies:
|
21
|
-
|
22
|
-
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: eventmachine
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: syslog servlet for ruby
|
23
36
|
email: jordan@loggly.com
|
24
37
|
executables: []
|
25
38
|
|
@@ -28,12 +41,12 @@ extensions: []
|
|
28
41
|
extra_rdoc_files: []
|
29
42
|
|
30
43
|
files:
|
44
|
+
- lib/logporter/server.rb
|
31
45
|
- lib/logporter/protocol/syslog3164.rb
|
32
46
|
- lib/logporter/namespace.rb
|
33
|
-
- lib/logporter/
|
47
|
+
- lib/logporter/event.rb
|
34
48
|
- lib/logporter/server/defaulthandler.rb
|
35
49
|
- lib/logporter/server/connection.rb
|
36
|
-
- lib/logporter/event.rb
|
37
50
|
- test/syslog.rb
|
38
51
|
has_rdoc: true
|
39
52
|
homepage: https://github.com/loggly/logporter
|
@@ -66,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
79
|
requirements: []
|
67
80
|
|
68
81
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
82
|
+
rubygems_version: 1.3.7
|
70
83
|
signing_key:
|
71
84
|
specification_version: 3
|
72
85
|
summary: logporter - a log server
|