qswarm 0.0.14 → 0.0.15
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/qswarm/speaker.rb +9 -3
- data/lib/qswarm/speakers/irc.rb +44 -12
- data/lib/qswarm/version.rb +1 -1
- metadata +12 -12
data/lib/qswarm/speaker.rb
CHANGED
@@ -17,6 +17,7 @@ module Qswarm
|
|
17
17
|
@name = name.to_s unless name.nil?
|
18
18
|
@block = block
|
19
19
|
@args = OpenStruct.new args
|
20
|
+
@bind = nil
|
20
21
|
end
|
21
22
|
|
22
23
|
def parse(metadata, payload)
|
@@ -32,7 +33,7 @@ module Qswarm
|
|
32
33
|
rescue JSON::ParserError
|
33
34
|
error = "JSON::ParserError on #{payload.inspect}"
|
34
35
|
logger.error error
|
35
|
-
publish :errors, :text, "errors.#{@agent.name}.#{$fqdn}", error
|
36
|
+
# publish :errors, :text, "errors.#{@agent.name}.#{$fqdn}", error
|
36
37
|
end
|
37
38
|
|
38
39
|
def log(msg)
|
@@ -40,8 +41,9 @@ module Qswarm
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def inject(format = :text, msg)
|
43
|
-
|
44
|
-
|
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
|
45
47
|
log msg if format == :text
|
46
48
|
end
|
47
49
|
|
@@ -56,6 +58,10 @@ module Qswarm
|
|
56
58
|
@args[name]
|
57
59
|
end
|
58
60
|
|
61
|
+
def bind(routing_key)
|
62
|
+
@bind = routing_key
|
63
|
+
end
|
64
|
+
|
59
65
|
private
|
60
66
|
|
61
67
|
def publish(broker_name, format, routing_key, msg)
|
data/lib/qswarm/speakers/irc.rb
CHANGED
@@ -8,36 +8,58 @@ module Qswarm
|
|
8
8
|
|
9
9
|
def initialize(listener, name, args, &block)
|
10
10
|
@admin_host = args[:admin_host]
|
11
|
+
@channels = []
|
12
|
+
@connected = false
|
11
13
|
super
|
12
14
|
end
|
13
15
|
|
14
16
|
def inject(format = :text, msg)
|
15
|
-
|
16
|
-
|
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
|
17
24
|
end
|
18
25
|
|
19
26
|
def run
|
20
27
|
@name.match(/([^#]*)(#.+)/) { irc_connect $1.empty? ? 'localhost' : $1, $2 }
|
21
28
|
end
|
22
29
|
|
23
|
-
def
|
30
|
+
def on_join(m)
|
24
31
|
unless m.user.nick == m.bot.nick
|
25
32
|
if @admin_host && Regexp.new(@admin_host).match(m.user.host)
|
26
33
|
m.channel.op(m.user)
|
27
34
|
end
|
28
35
|
end
|
29
36
|
end
|
37
|
+
|
38
|
+
def on_connect(m)
|
39
|
+
@connected = true
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_disconnect(m)
|
43
|
+
@connected = false
|
44
|
+
end
|
30
45
|
|
31
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
|
32
55
|
|
33
56
|
def irc_connect(irc_server, channel)
|
34
57
|
if bot = @@irc_servers[irc_server]
|
35
|
-
|
36
|
-
@@irc_servers[irc_server].config.channels << channel
|
58
|
+
join irc_server, channel
|
37
59
|
else
|
38
60
|
logger.debug "Connecting to IRC server #{irc_server} channel #{channel}"
|
39
61
|
|
40
|
-
@@irc_servers[irc_server]
|
62
|
+
@@irc_servers[irc_server] = Cinch::Bot.new do
|
41
63
|
on :channel do |m|
|
42
64
|
if m.message =~ /^#{m.bot.nick}/
|
43
65
|
EM.defer do
|
@@ -47,7 +69,15 @@ module Qswarm
|
|
47
69
|
end
|
48
70
|
|
49
71
|
on :join do |m|
|
50
|
-
m.bot.config.shared['speaker'].
|
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)
|
51
81
|
end
|
52
82
|
end
|
53
83
|
|
@@ -55,6 +85,8 @@ module Qswarm
|
|
55
85
|
@@irc_servers[irc_server].config.nick = @agent.name
|
56
86
|
@@irc_servers[irc_server].config.channels << channel
|
57
87
|
@@irc_servers[irc_server].config.shared['speaker'] = self
|
88
|
+
|
89
|
+
@channels << channel
|
58
90
|
|
59
91
|
EM.defer do
|
60
92
|
@@irc_servers[irc_server].start
|
@@ -63,13 +95,13 @@ module Qswarm
|
|
63
95
|
end
|
64
96
|
|
65
97
|
def publish(format, name, msg)
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
)
|
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 )
|
70
102
|
end
|
71
103
|
end
|
72
104
|
|
73
105
|
end
|
74
106
|
end
|
75
|
-
end
|
107
|
+
end
|
data/lib/qswarm/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qswarm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-22 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
16
|
-
requirement: &
|
16
|
+
requirement: &70205369152540 !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: *
|
24
|
+
version_requirements: *70205369152540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: amqp
|
27
|
-
requirement: &
|
27
|
+
requirement: &70205369152020 !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: *
|
35
|
+
version_requirements: *70205369152020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: uuid
|
38
|
-
requirement: &
|
38
|
+
requirement: &70205369151420 !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: *
|
46
|
+
version_requirements: *70205369151420
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: json
|
49
|
-
requirement: &
|
49
|
+
requirement: &70205369150900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70205369150900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: andand
|
60
|
-
requirement: &
|
60
|
+
requirement: &70205369150080 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70205369150080
|
69
69
|
description: Framework for writing distributed agents hanging off an AMQP message
|
70
70
|
bus
|
71
71
|
email:
|