pomelo-citrus-admin 0.0.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.
@@ -0,0 +1,246 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 15 July 2014
4
+
5
+ require File.expand_path('../spec_helper', __FILE__)
6
+
7
+ describe ConsoleService do
8
+
9
+ master_host = '127.0.0.1'
10
+ master_port = 3333
11
+
12
+ it "should send the request to the right monitor's console module and get the response from callback" do
13
+ monitor_id1 = 'connector-server-1'
14
+ monitor_id2 = 'area-server-1'
15
+ monitor_type1 = 'connector'
16
+ monitor_type2 = 'area'
17
+ module_id1 = 'module-1'
18
+ module_id2 = 'module-2'
19
+ msg1 = { :msg => 'message to monitor1' }
20
+ msg2 = { :msg => 'message to monitor2' }
21
+
22
+ req1_count = 0
23
+ req2_count = 0
24
+ resp1_count = 0
25
+ resp2_count = 0
26
+
27
+ master_console = ConsoleService.create_master_console({
28
+ :port => master_port
29
+ })
30
+
31
+ monitor_console1 = ConsoleService.create_monitor_console({
32
+ :host => master_host,
33
+ :port => master_port,
34
+ :server_id => monitor_id1,
35
+ :server_type => monitor_type1
36
+ })
37
+ monitor_console2 = ConsoleService.create_monitor_console({
38
+ :host => master_host,
39
+ :port => master_port,
40
+ :server_id => monitor_id2,
41
+ :server_type => monitor_type2
42
+ })
43
+
44
+ module_entity1 = Object.new
45
+ class << module_entity1
46
+ include RSpec::Matchers
47
+ attr_accessor :type
48
+ end
49
+ module_entity2 = Object.new
50
+ class << module_entity2
51
+ include RSpec::Matchers
52
+ attr_accessor :type
53
+ end
54
+
55
+ module_entity1.define_singleton_method :monitor_handler, proc{ |agent, msg, &block|
56
+ req1_count += 1
57
+ expect(msg).to be
58
+ expect(msg).to eql msg1
59
+ block.call nil, msg
60
+ }
61
+ module_entity2.define_singleton_method :monitor_handler, proc{ |agent, msg, &block|
62
+ req2_count += 1
63
+ expect(msg).to be
64
+ expect(msg).to eql msg2
65
+ block.call nil, msg
66
+ }
67
+
68
+ monitor_console1.register module_id1, module_entity1
69
+ monitor_console2.register module_id2, module_entity2
70
+
71
+ EM.run {
72
+ master_console.start { |err|
73
+ expect(err).to be_nil
74
+ }
75
+
76
+ EM.add_timer(0.1) {
77
+ monitor_console1.start { |err|
78
+ expect(err).to be_nil
79
+ master_console.agent.request monitor_id1, module_id1, msg1, proc{ |err, resp|
80
+ resp1_count += 1
81
+ expect(err).to be_nil
82
+ expect(resp).to be
83
+ expect(resp).to eql msg1
84
+ }
85
+ }
86
+ monitor_console2.start { |err|
87
+ expect(err).to be_nil
88
+ master_console.agent.request monitor_id2, module_id2, msg2, proc{ |err, resp|
89
+ resp2_count += 1
90
+ expect(err).to be_nil
91
+ expect(resp).to be
92
+ expect(resp).to eql msg2
93
+ }
94
+ }
95
+ }
96
+
97
+ EM.add_timer(0.2) {
98
+ expect(req1_count).to eql 1
99
+ expect(req2_count).to eql 1
100
+ expect(resp1_count).to eql 1
101
+ expect(resp2_count).to eql 1
102
+ EM.stop_event_loop
103
+ }
104
+ }
105
+ end
106
+
107
+ it "should send the message from monitor to the right master's console module" do
108
+ monitor_id = 'connector-server-1'
109
+ monitor_type = 'connector'
110
+ module_id = 'module-1'
111
+ org_msg = { :msg => 'message to master' }
112
+
113
+ req_count = 0
114
+
115
+ master_console = ConsoleService.create_master_console({
116
+ :port => master_port
117
+ })
118
+
119
+ module_entity1 = Object.new
120
+ class << module_entity1
121
+ include RSpec::Matchers
122
+ attr_accessor :type
123
+ end
124
+
125
+ module_entity1.define_singleton_method :master_handler, proc{ |agent, msg, &block|
126
+ req_count += 1
127
+ expect(msg).to be
128
+ expect(msg).to eql org_msg
129
+ }
130
+
131
+ master_console.register module_id, module_entity1
132
+
133
+ monitor_console = ConsoleService.create_monitor_console({
134
+ :host => master_host,
135
+ :port => master_port,
136
+ :server_id => monitor_id,
137
+ :server_type => monitor_type
138
+ })
139
+
140
+ EM.run {
141
+ master_console.start { |err|
142
+ expect(err).to be_nil
143
+ }
144
+
145
+ EM.add_timer(0.1) {
146
+ monitor_console.start { |err|
147
+ expect(err).to be_nil
148
+ monitor_console.agent.notify module_id, org_msg
149
+ }
150
+ }
151
+
152
+ EM.add_timer(0.2) {
153
+ expect(req_count).to eql 1
154
+ EM.stop_event_loop
155
+ }
156
+ }
157
+ end
158
+
159
+ it 'should fail if the module is disabled' do
160
+ monitor_id = 'connector-server-1'
161
+ monitor_type = 'connector'
162
+ module_id = 'module-1'
163
+ org_msg = { :msg => 'message to someone' }
164
+
165
+ module_entity1 = Object.new
166
+ class << module_entity1
167
+ include RSpec::Matchers
168
+ attr_accessor :type
169
+ end
170
+ module_entity2 = Object.new
171
+ class << module_entity2
172
+ include RSpec::Matchers
173
+ attr_accessor :type
174
+ end
175
+
176
+ module_entity1.define_singleton_method :master_handler, proc{ |agent, msg, &block|
177
+ # should not arrive here
178
+ expect(true).to eql false
179
+ }
180
+
181
+ module_entity2.define_singleton_method :monitor_handler, proc{ |agent, msg, &block|
182
+ # should not arrive here
183
+ expect(true).to eql false
184
+ }
185
+
186
+ master_console = ConsoleService.create_master_console({
187
+ :port => master_port
188
+ })
189
+ monitor_console = ConsoleService.create_monitor_console({
190
+ :host => master_host,
191
+ :port => master_port,
192
+ :server_id => monitor_id,
193
+ :server_type => monitor_type
194
+ })
195
+
196
+ master_console.register module_id, module_entity1
197
+ monitor_console.register module_id, module_entity1
198
+
199
+ EM.run {
200
+ master_console.start { |err|
201
+ expect(err).to be_nil
202
+ }
203
+
204
+ EM.add_timer(0.1) {
205
+ monitor_console.start { |err|
206
+ expect(err).to be_nil
207
+ master_console.disable_module module_id
208
+ monitor_console.disable_module module_id
209
+ master_console.agent.notify monitor_id, module_id, org_msg
210
+ monitor_console.agent.notify module_id, org_msg
211
+ }
212
+ }
213
+
214
+ EM.add_timer(0.2) {
215
+ EM.stop_event_loop
216
+ }
217
+ }
218
+ end
219
+
220
+ it 'should fail if the monitor does not exist' do
221
+ monitor_id = 'connector-server-1'
222
+ module_id = 'module-1'
223
+ org_msg = { :msg => 'message to someone' }
224
+
225
+ master_console = ConsoleService.create_master_console({
226
+ :port => master_port
227
+ })
228
+
229
+ EM.run {
230
+ master_console.start { |err|
231
+ expect(err).to be_nil
232
+ }
233
+
234
+ EM.add_timer(0.1) {
235
+ master_console.agent.request monitor_id, module_id, org_msg, proc{ |err, resp|
236
+ expect(err).to be
237
+ expect(resp).to be_nil
238
+ }
239
+ }
240
+
241
+ EM.add_timer(0.2) {
242
+ EM.stop_event_loop
243
+ }
244
+ }
245
+ end
246
+ end
@@ -0,0 +1,18 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 13 July 2014
4
+
5
+ require File.expand_path('../../lib/citrus-admin', __FILE__)
6
+
7
+ ConsoleService = CitrusAdmin::ConsoleService
8
+ MasterAgent = CitrusAdmin::MasterAgent
9
+ MonitorAgent = CitrusAdmin::MonitorAgent
10
+
11
+ RSpec.configure { |config|
12
+ config.mock_with(:rspec) { |c|
13
+ c.syntax = [:should, :expect]
14
+ }
15
+ config.expect_with(:rspec) { |c|
16
+ c.syntax = [:should, :expect]
17
+ }
18
+ }
metadata ADDED
@@ -0,0 +1,178 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pomelo-citrus-admin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - MinixLi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: eventmachine
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: websocket-eventmachine-client
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: websocket-eventmachine-server
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pomelo-citrus-loader
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pomelo-citrus-logger
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pomelo-citrus-monitor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pomelo-citrus-scheduler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: pomelo-citrus-admin is a simple clone of pomelo-admin, it provides an
126
+ admin module for pomelo monitor system
127
+ email: MinixLi1986@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - README.md
133
+ - Rakefile
134
+ - citrus-admin.gemspec
135
+ - lib/citrus-admin.rb
136
+ - lib/citrus-admin/client/client.rb
137
+ - lib/citrus-admin/console_service.rb
138
+ - lib/citrus-admin/master_agent.rb
139
+ - lib/citrus-admin/modules/console_module.rb
140
+ - lib/citrus-admin/modules/monitor_log.rb
141
+ - lib/citrus-admin/modules/process_info.rb
142
+ - lib/citrus-admin/modules/system_info.rb
143
+ - lib/citrus-admin/modules/watch_server.rb
144
+ - lib/citrus-admin/monitor_agent.rb
145
+ - lib/citrus-admin/util/protocol.rb
146
+ - lib/citrus-admin/util/utils.rb
147
+ - lib/citrus-admin/version.rb
148
+ - spec/agent_spec.rb
149
+ - spec/console_service_spec.rb
150
+ - spec/spec_helper.rb
151
+ homepage: https://github.com/minixli/pomelo-citrus-admin
152
+ licenses:
153
+ - MIT
154
+ metadata: {}
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.4.1
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: pomelo-admin clone written in Ruby using EventMachine
175
+ test_files:
176
+ - spec/agent_spec.rb
177
+ - spec/console_service_spec.rb
178
+ - spec/spec_helper.rb