reacter 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,12 +18,13 @@ class Reacter
18
18
  end
19
19
 
20
20
  @_connection = AMQP.connect({
21
- :host => @config.get(:hostname, 'localhost'),
22
- :port => @config.get(:port, 5672),
23
- :username => @config.get(:username, 'guest'),
24
- :password => @config.get(:password, 'guest'),
25
- :vhost => @config.get(:vhost, '/'),
26
- :timeout => @config.get(:timeout, DEFAULT_TIMEOUT),
21
+ :host => @config.get(:hostname, 'localhost'),
22
+ :port => @config.get(:port, 5672),
23
+ :username => @config.get(:username, 'guest'),
24
+ :password => @config.get(:password, 'guest'),
25
+ :vhost => @config.get(:vhost, '/'),
26
+ :timeout => @config.get(:timeout, DEFAULT_TIMEOUT),
27
+ :routing_key => @config.get(:timeout),
27
28
  :on_tcp_connection_failure => @_errback
28
29
  })
29
30
 
@@ -0,0 +1,95 @@
1
+ #------------------------------------------------------------------------------#
2
+ # Socket Adapter
3
+ #
4
+ require 'reacter/adapter'
5
+ require 'reacter/config'
6
+ require 'reacter/util'
7
+
8
+ class Reacter
9
+ class HttpAdapter < Adapter
10
+ require 'em-http-server'
11
+
12
+ class HttpHandler < EM::HttpServer::Server
13
+ def initialize(*args)
14
+ super
15
+ @callback = args.first
16
+ end
17
+
18
+ def process_http_request()
19
+ begin
20
+ @callback.call({
21
+ :method => @http_request_method.to_sym,
22
+ :host => @http[:host],
23
+ :path => @http_request_uri,
24
+ :headers => @http,
25
+ :body => @http_content,
26
+ :query => Hash[(@http_query_string || '').split('&').collect{|i|
27
+ i = i.split('=')
28
+ [i[0], i[1]]
29
+ }],
30
+ })
31
+ rescue Exception => e
32
+ puts e
33
+ end
34
+
35
+ response = EM::DelegatedHttpResponse.new(self)
36
+ response.status = 200
37
+ response.send_response()
38
+ end
39
+ end
40
+
41
+
42
+ def connect(args={})
43
+ @addr = @config.get(:address, '0.0.0.0')
44
+ @port = @config.get(:port, 8080).to_i
45
+ end
46
+
47
+ def send(message, format=nil)
48
+ # TODO: implement this for relay support
49
+ # support: method
50
+ # output format
51
+ # destination URI (host port path querystring)
52
+ # HTTPS
53
+ # authentication (basic, SSL client cert)
54
+ # timeout
55
+ #
56
+ end
57
+
58
+ def poll(&block)
59
+ @server = EM.start_server(@addr, @port, HttpHandler, proc{|data|
60
+ if data
61
+ case data[:method]
62
+ when :GET
63
+ x, op, source, metric, value = data[:path].split('/')
64
+
65
+ if op == 'observe' or op.empty?
66
+ messages = Message.parse([{
67
+ :source => (source || data[:query]['source']),
68
+ :metric => (metric || data[:query]['metric']),
69
+ :value => (value || data[:query]['value'].to_f),
70
+ :time => (data[:query]['time'] || (Time.now.to_i * 1000)),
71
+ :attributes => data[:query].reject{|k,v|
72
+ %w{source metric value time}.include?(k)
73
+ }
74
+ }.compact])
75
+ end
76
+
77
+ when :POST, :PUT
78
+ messages = Message.parse(data[:body].gsub("\n",''))
79
+ end
80
+ end
81
+
82
+ block.call(messages) if messages and not messages.empty?
83
+ })
84
+ end
85
+
86
+ def disconnect()
87
+ raise AdapterConnectionClosed
88
+ end
89
+
90
+ private
91
+ def stdin?()
92
+ @_stdin
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,53 @@
1
+ #------------------------------------------------------------------------------#
2
+ # Socket Adapter
3
+ #
4
+ require 'reacter/adapter'
5
+ require 'reacter/config'
6
+ require 'reacter/util'
7
+
8
+ class Reacter
9
+ class SocketAdapter < Adapter
10
+ require 'socket'
11
+
12
+ class SocketHandler < EM::Connection
13
+ def initialize(*args)
14
+ super
15
+ @callback = args.first
16
+ end
17
+
18
+ def receive_data(data)
19
+ @callback.call(data) if @callback
20
+ end
21
+ end
22
+
23
+ def connect(args={})
24
+ @addr = @config.get(:address, '0.0.0.0')
25
+ @port = @config.get(:port, 54546)
26
+ end
27
+
28
+ def send(message, format=nil)
29
+ # TODO: implement this for relay support
30
+ # support: host
31
+ # port
32
+ # format
33
+ # timeout
34
+ #
35
+ end
36
+
37
+ def poll(&block)
38
+ @server = EM.start_server(@addr, @port, SocketHandler, proc{|data|
39
+ messages = Message.parse(data.chomp)
40
+ block.call(messages) unless messages.empty?
41
+ })
42
+ end
43
+
44
+ def disconnect()
45
+ raise AdapterConnectionClosed
46
+ end
47
+
48
+ private
49
+ def stdin?()
50
+ @_stdin
51
+ end
52
+ end
53
+ end
@@ -53,6 +53,7 @@ class Reacter
53
53
  i = File.basename(i,'.rb')
54
54
  require "reacter/parsers/#{i}"
55
55
  @@_parsers[i.to_sym] = Message.const_get("#{i.capitalize}Parser")
56
+ @@_parsers[i.to_sym].configure(Reacter.get("parsers.#{i.downcase}", {}))
56
57
  end
57
58
  end
58
59
  end
@@ -2,6 +2,10 @@ class Reacter
2
2
  class Message
3
3
  class Parser
4
4
  class<<self
5
+ def configure(config={})
6
+ @config = config
7
+ end
8
+
5
9
  # implement: determine whether the raw message is in a format this parser
6
10
  # can normalize
7
11
  def detected?(message)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reacter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2013-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &15680680 !ruby/object:Gem::Requirement
16
+ requirement: &11561840 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *15680680
24
+ version_requirements: *11561840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: deep_merge
27
- requirement: &16230460 !ruby/object:Gem::Requirement
27
+ requirement: &11560640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *16230460
35
+ version_requirements: *11560640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hashlib
38
- requirement: &15070420 !ruby/object:Gem::Requirement
38
+ requirement: &11560080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *15070420
46
+ version_requirements: *11560080
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: hiredis
49
- requirement: &13732680 !ruby/object:Gem::Requirement
49
+ requirement: &11589280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *13732680
57
+ version_requirements: *11589280
58
58
  description: A utility for consuming, transforming, and routing monitoring data from
59
59
  various sources
60
60
  email: ghetzel@outbrain.com
@@ -67,6 +67,8 @@ files:
67
67
  - lib/reacter/adapter.rb
68
68
  - lib/reacter/adapters/amqp.rb
69
69
  - lib/reacter/adapters/file.rb
70
+ - lib/reacter/adapters/http.rb
71
+ - lib/reacter/adapters/socket.rb
70
72
  - lib/reacter/agent.rb
71
73
  - lib/reacter/agents/decider.rb
72
74
  - lib/reacter/agents/filter.rb