qswarm 0.0.21 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +0,0 @@
1
- require 'logger'
2
- require 'gelf'
3
-
4
- module Qswarm
5
- module Loggable
6
- def logger
7
- Loggable.logger
8
- end
9
-
10
- def self.logger
11
- # @logger ||= Logger.new(STDOUT)
12
- @logger ||= GELF::Logger.new($graylog2_host, 12201, 'WAN', { :facility => $graylog2_facility })
13
- end
14
- end
15
- end
@@ -1,76 +0,0 @@
1
- require 'json'
2
- require 'ostruct'
3
-
4
- require 'qswarm/dsl'
5
-
6
- module Qswarm
7
- class Speaker
8
- include Qswarm::Loggable
9
- extend Qswarm::DSL
10
-
11
- dsl_accessor :broker
12
- attr_reader :agent, :metadata, :heard, :name
13
-
14
- def initialize(listener, name, args, &block)
15
- @listener = listener
16
- @agent = @listener.agent
17
- @name = name.to_s unless name.nil?
18
- @block = block
19
- @args = OpenStruct.new args
20
- @bind = nil
21
- end
22
-
23
- def parse(metadata, payload)
24
- @metadata = metadata
25
- case @listener.format
26
- when :json
27
- @heard = JSON.parse(payload)
28
- else
29
- @heard = payload
30
- end
31
-
32
- self.instance_eval(&@block)
33
- rescue JSON::ParserError
34
- error = "JSON::ParserError on #{payload.inspect}"
35
- logger.error error
36
- # publish :errors, :text, "errors.#{@agent.name}.#{$fqdn}", error
37
- end
38
-
39
- def log(msg)
40
- logger.info "[#{@agent.name}] #{msg}"
41
- end
42
-
43
- def inject(format = :text, msg)
44
- routing_key = @bind || @name
45
- logger.debug "[#{@agent.name}] Sending '#{msg}' to broker #{get_broker(@broker).name}/#{routing_key}"
46
- publish @broker, format, routing_key, msg
47
- log msg if format == :text
48
- end
49
-
50
- def get_broker(name)
51
- @listener.get_broker(name)
52
- end
53
-
54
- def run
55
- end
56
-
57
- def arg(name)
58
- @args[name]
59
- end
60
-
61
- def bind(routing_key)
62
- @bind = routing_key
63
- end
64
-
65
- private
66
-
67
- def publish(broker_name, format, routing_key, msg)
68
- case format
69
- when :json
70
- get_broker(broker_name).exchange.publish JSON.generate(msg), :routing_key => routing_key
71
- when :text
72
- get_broker(broker_name).exchange.publish msg, :routing_key => routing_key
73
- end
74
- end
75
- end
76
- end
@@ -1,67 +0,0 @@
1
- require 'uri'
2
- require 'em-http-request'
3
-
4
- module Qswarm
5
- module Speakers
6
- class Http < Qswarm::Speaker
7
- @@connections = {}
8
-
9
- def initialize(listener, name, args, &block)
10
- @uri = URI.parse(name)
11
- @uri.host = 'localhost' if @uri.host.nil?
12
- super
13
- end
14
-
15
- def inject(format = :text, msg)
16
- publish format, msg
17
- end
18
-
19
- def run
20
- end
21
-
22
- private
23
-
24
- def auth?
25
-
26
- end
27
-
28
- def publish(format, msg)
29
- logger.debug "Sending '#{msg}' to #{@name}"
30
- head = @args.user.nil? ? {} : { 'authorization' => [@args.user, @args.password] }
31
-
32
- case format
33
- when :get
34
- if msg.is_a? Hash
35
- connection = EventMachine::HttpRequest.new(@uri)
36
- http = connection.get :head => head, :query => msg
37
- else
38
- connection = EventMachine::HttpRequest.new(URI.join(@uri.to_s, msg))
39
- http = connection.get :head => head
40
- end
41
- http.errback do
42
- logger.error "Error sending #{msg} to #{@name}: #{http.error}/#{http.response_header.status} #{http.response}"
43
- end
44
- http.callback do
45
- if @args.expect != http.response_header.status
46
- logger.error "#{@uri.to_s} Unexpected response code: #{http.response_header.status} #{http.response}"
47
- end
48
- connection.close(nil)
49
- end
50
-
51
- when :post
52
- connection = EventMachine::HttpRequest.new(@uri)
53
- http = connection.post :head => head, :body => msg
54
- http.errback do
55
- logger.error "Error sending #{msg} to #{@name}: #{http.error}/#{http.response_header.status} #{http.response}"
56
- end
57
- http.callback do
58
- if @args.expect != http.response_header.status
59
- logger.error "#{@uri.to_s} Unexpected response code: #{http.response_header.status} #{http.response}"
60
- end
61
- connection.close(nil)
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,107 +0,0 @@
1
- require 'cinch'
2
- require 'ostruct'
3
-
4
- module Qswarm
5
- module Speakers
6
- class Irc < Qswarm::Speaker
7
- @@irc_servers = {}
8
-
9
- def initialize(listener, name, args, &block)
10
- @admin_host = args[:admin_host]
11
- @channels = []
12
- @connected = false
13
- super
14
- end
15
-
16
- def inject(format = :text, msg)
17
- if @connected
18
- routing_key = @bind || @name
19
- logger.debug "[#{@agent.name}] Sending '#{msg}' to channel #{routing_key}"
20
- publish format, routing_key, msg
21
- else
22
- EventMachine::Timer.new(5,self.inject(format, msg))
23
- end
24
- end
25
-
26
- def run
27
- @name.match(/([^#]*)(#.+)/) { irc_connect $1.empty? ? 'localhost' : $1, $2 }
28
- end
29
-
30
- def on_join(m)
31
- unless m.user.nick == m.bot.nick
32
- if @admin_host && Regexp.new(@admin_host).match(m.user.host)
33
- m.channel.op(m.user)
34
- end
35
- end
36
- end
37
-
38
- def on_connect(m)
39
- @connected = true
40
- end
41
-
42
- def on_disconnect(m)
43
- @connected = false
44
- end
45
-
46
- private
47
-
48
- def join(irc_server, channel)
49
- if !@channels.include? channel
50
- logger.debug "Joining channel #{channel}"
51
- @@irc_servers[irc_server].channel_list.find_ensured(channel).join()
52
- @channels << channel
53
- end
54
- end
55
-
56
- def irc_connect(irc_server, channel)
57
- if bot = @@irc_servers[irc_server]
58
- join irc_server, channel
59
- else
60
- logger.debug "Connecting to IRC server #{irc_server} channel #{channel}"
61
-
62
- @@irc_servers[irc_server] = Cinch::Bot.new do
63
- on :channel do |m|
64
- if m.message =~ /^#{m.bot.nick}/
65
- EM.defer do
66
- m.bot.config.shared['speaker'].parse( OpenStruct.new( :routing_key => '__', :message => m, :channel => m.channel ), m.message )
67
- end
68
- end
69
- end
70
-
71
- on :join do |m|
72
- m.bot.config.shared['speaker'].on_join(m)
73
- end
74
-
75
- on :connect do |m|
76
- m.bot.config.shared['speaker'].on_connect(m)
77
- end
78
-
79
- on :disconnect do |m|
80
- m.bot.config.shared['speaker'].on_disconnect(m)
81
- end
82
- end
83
-
84
- @@irc_servers[irc_server].config.server = irc_server
85
- @@irc_servers[irc_server].config.nick = @agent.name
86
- @@irc_servers[irc_server].config.channels << channel
87
- @@irc_servers[irc_server].config.shared['speaker'] = self
88
-
89
- @channels << channel
90
-
91
- EM.defer do
92
- @@irc_servers[irc_server].start
93
- end
94
- end
95
- end
96
-
97
- def publish(format, name, msg)
98
- name.match(/([^#]*)(#.+)/) do
99
- irc_server = $1.empty? ? 'localhost' : $1
100
- join(irc_server, $2)
101
- @@irc_servers[irc_server].channel_list.find($2).andand.send( format == :json ? JSON.generate(msg) : msg )
102
- end
103
- end
104
-
105
- end
106
- end
107
- end
@@ -1,39 +0,0 @@
1
- # require 'mysql2'
2
-
3
- module Qswarm
4
- module Speakers
5
- class Mysql < Qswarm::Speaker
6
- @@db_servers = {}
7
-
8
- def inject(format = :text, msg)
9
- logger.debug "[#{@agent.name}] Sending '#{msg}' to channel #{@name}"
10
- publish format, @name, msg
11
- end
12
-
13
- def run
14
- @name.match(/([^#]*)(#.+)/) { db_connect $1.empty? ? 'localhost' : $1, $2 }
15
- end
16
-
17
- private
18
-
19
- def db_connect(db_server, database)
20
- if connection = @@db_servers[db_server]
21
- logger.debug "Connecting to database #{database}"
22
- else
23
- logger.debug "Connecting to DB server #{db_server} database #{database}"
24
- @@db_servers[db_server] = 'foo'
25
- end
26
- end
27
-
28
- def publish(format, name, msg)
29
- @name.match(/([^#]*)(#.+)/) do
30
- logger.debug "#{$1} #{$2} #{msg}"
31
- # @@db_servers[$1.empty? ? 'localhost' : $1].channel_manager.find_ensured($2).andand.send(
32
- # format == :json ? JSON.generate(msg) : msg
33
- # )
34
- # end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,41 +0,0 @@
1
- module Qswarm
2
- module Speakers
3
- class Nc < Qswarm::Speaker
4
- @@connections = {}
5
-
6
- def inject(format = :text, msg)
7
- publish format, msg
8
- end
9
-
10
- def run
11
- @name.match(/([^#]*):(\d+)/) do
12
- @host = $1.empty? ? 'localhost' : $1
13
- @port = $2
14
- @server = @host + ':' + @port
15
- # @service = $3
16
- end
17
- connect
18
- end
19
-
20
- private
21
-
22
- def connect
23
- if connection = @@connections[@server]
24
- logger.debug "Connecting to service #{@service}"
25
- else
26
- logger.debug "Connecting to host #{@server} service #{@service}"
27
- @@connections[@server] = EventMachine::connect @host, @port do |connection|
28
- def connection.receive_data(data)
29
- puts "Received #{data} from #{@name}"
30
- end
31
- end
32
- end
33
- end
34
-
35
- def publish(format, msg)
36
- logger.debug "Sending '#{msg}' to #{@name}"
37
- @@connections[@server].send_data( (format == :json ? JSON.generate(msg) : msg) + "\n")
38
- end
39
- end
40
- end
41
- end