qswarm 0.0.21 → 1.0.0

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.
@@ -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