mode 0.0.16 → 0.0.17
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.
- checksums.yaml +4 -4
- data/lib/connect.rb +14 -3
- data/lib/mode/api/request.rb +9 -4
- data/lib/mode/commands/connect.rb +1 -1
- data/lib/mode/connector/data_source.rb +7 -0
- data/lib/mode/connector/poller.rb +2 -2
- data/lib/mode/connector/scheduler.rb +12 -8
- data/lib/mode/logger.rb +6 -0
- data/lib/mode/version.rb +1 -1
- data/spec/connector/poller_spec.rb +3 -2
- data/spec/connector/scheduler_spec.rb +6 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74f1b2ce9baad12179eacc6a688af0cc4c1a63ea
|
4
|
+
data.tar.gz: 3d8f7f5cab8366b0eb3bf454c62e4374ce9fccf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e288584297b41d8e45ce8886b987531dc5aa77650a9dc188426e25c1b1f47727fd7b6c92a378bad2c3df863c6ddf4671eddb5f48e2b3cea55635cd2da158061
|
7
|
+
data.tar.gz: b091fee08b2215bb46ead6ec37c207db6641f53fa4b71b8a59e012f930d998dfb22d438211ded8f4b7997d0c090f98854914a7d25bdc463283ab5cbdc1895cca
|
data/lib/connect.rb
CHANGED
@@ -6,8 +6,19 @@ require 'mode'
|
|
6
6
|
|
7
7
|
runner = Mode::Connector::Daemon.new(:max_jobs => ARGV[0] || 4)
|
8
8
|
|
9
|
-
trap("INT")
|
10
|
-
|
11
|
-
|
9
|
+
trap("INT") do
|
10
|
+
Mode::Logger.instance.info("connect.rb", "Received INT signal, shutting down.")
|
11
|
+
runner.stop
|
12
|
+
end
|
13
|
+
|
14
|
+
trap("HUP") do
|
15
|
+
Mode::Logger.instance.info("connect.rb", "Received HUP signal, shutting down.")
|
16
|
+
runner.stop
|
17
|
+
end
|
18
|
+
|
19
|
+
trap("TERM") do
|
20
|
+
Mode::Logger.instance.info("connect.rb", "Received TERM signal, shutting down.")
|
21
|
+
runner.stop
|
22
|
+
end
|
12
23
|
|
13
24
|
runner.start
|
data/lib/mode/api/request.rb
CHANGED
@@ -13,8 +13,13 @@ module Mode
|
|
13
13
|
@params = params
|
14
14
|
end
|
15
15
|
|
16
|
-
def perform
|
17
|
-
response = http.send(method.to_sym
|
16
|
+
def perform(request_opts = {})
|
17
|
+
response = http.send(method.to_sym) do |request|
|
18
|
+
request.url path
|
19
|
+
request.body = params unless params.empty?
|
20
|
+
request.options[:timeout] = request_opts.fetch(:timeout, 30)
|
21
|
+
end
|
22
|
+
|
18
23
|
response.success? ? success(response) : error(response)
|
19
24
|
end
|
20
25
|
|
@@ -103,8 +108,8 @@ module Mode
|
|
103
108
|
new(:head, resolve_path(path)).perform
|
104
109
|
end
|
105
110
|
|
106
|
-
def get(path)
|
107
|
-
new(:get, resolve_path(path)).perform
|
111
|
+
def get(path, params = {})
|
112
|
+
new(:get, resolve_path(path), params).perform
|
108
113
|
end
|
109
114
|
|
110
115
|
def post(path, params = {})
|
@@ -77,6 +77,10 @@ module Mode
|
|
77
77
|
def mysql?
|
78
78
|
['mysql', 'mysql2', 'jdbc:mysql'].include?(adapter)
|
79
79
|
end
|
80
|
+
|
81
|
+
def oracle?
|
82
|
+
['oracle', 'jdbc:oracle:thin'].include?(adapter)
|
83
|
+
end
|
80
84
|
|
81
85
|
private
|
82
86
|
|
@@ -101,11 +105,14 @@ module Mode
|
|
101
105
|
case adapter
|
102
106
|
when 'jdbc:redshift'
|
103
107
|
'jdbc:postgresql'
|
108
|
+
# when 'jdbc:oracle:thin'
|
109
|
+
# jdbc:oracle:thin:scott/tiger@localhost:1521:orcl
|
104
110
|
else
|
105
111
|
adapter
|
106
112
|
end
|
107
113
|
end
|
108
114
|
|
115
|
+
|
109
116
|
def port_segment
|
110
117
|
port.nil? ? nil : ":#{port}"
|
111
118
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Mode
|
2
2
|
module Connector
|
3
3
|
class Poller
|
4
|
-
def perform!(&block)
|
5
|
-
messages = Mode::API::Request.get(path)
|
4
|
+
def perform!(options = {}, &block)
|
5
|
+
messages = Mode::API::Request.get(path, options)
|
6
6
|
|
7
7
|
if messages.is_a?(Mode::API::Resource)
|
8
8
|
messages.embedded('messages').each do |message|
|
@@ -33,26 +33,30 @@ module Mode
|
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
|
+
def available_slots
|
37
|
+
max_jobs - processors.length
|
38
|
+
end
|
39
|
+
|
36
40
|
def tick
|
37
|
-
if
|
38
|
-
|
41
|
+
if available_slots > 0
|
42
|
+
poll_messages(:num_messages => available_slots) do |message|
|
43
|
+
scheduler.in(0, :tag => 'processor') { tock(message) }
|
44
|
+
end
|
39
45
|
end
|
40
46
|
rescue => err
|
41
47
|
Mode::Logger.instance.error(
|
42
48
|
"Connector::Scheduler", err.message, err.backtrace)
|
43
49
|
end
|
44
50
|
|
45
|
-
def tock
|
46
|
-
|
47
|
-
process_message(message)
|
48
|
-
end
|
51
|
+
def tock(message)
|
52
|
+
process_message(message)
|
49
53
|
rescue => err
|
50
54
|
Mode::Logger.instance.error(
|
51
55
|
"Connector::Scheduler", err.message, err.backtrace)
|
52
56
|
end
|
53
57
|
|
54
|
-
def poll_messages(&block)
|
55
|
-
Mode::Connector::Poller.new.perform!(&block)
|
58
|
+
def poll_messages(options = {}, &block)
|
59
|
+
Mode::Connector::Poller.new.perform!(options, &block)
|
56
60
|
end
|
57
61
|
|
58
62
|
def process_message(message)
|
data/lib/mode/logger.rb
CHANGED
@@ -44,6 +44,8 @@ module Mode
|
|
44
44
|
level = options[:level] || self.class.default_level
|
45
45
|
formatter = options[:formatter] || self.class.default_formatter
|
46
46
|
|
47
|
+
ensure_log_path(path)
|
48
|
+
|
47
49
|
@logger = ::Logger.new(path, rotate_freq)
|
48
50
|
|
49
51
|
set_log_level(level)
|
@@ -160,6 +162,10 @@ module Mode
|
|
160
162
|
@logger.formatter = formatter
|
161
163
|
end
|
162
164
|
|
165
|
+
def ensure_log_path(path)
|
166
|
+
FileUtils.mkdir_p(File.dirname(path))
|
167
|
+
end
|
168
|
+
|
163
169
|
def log_with_formatting(severity, component, message, detail = [])
|
164
170
|
mutex.synchronize do
|
165
171
|
return unless enabled
|
data/lib/mode/version.rb
CHANGED
@@ -17,9 +17,10 @@ describe Mode::Connector::Poller do
|
|
17
17
|
'messages' => [{}, {}]
|
18
18
|
}
|
19
19
|
})
|
20
|
-
Mode::API::Request.should_receive(:get).with(path
|
20
|
+
Mode::API::Request.should_receive(:get).with(path,
|
21
|
+
{:num_messages => 5}).and_return(resource)
|
21
22
|
|
22
|
-
poller.perform! do |message|
|
23
|
+
poller.perform!(:num_messages => 5) do |message|
|
23
24
|
message.should be_instance_of(Mode::Connector::Message)
|
24
25
|
end
|
25
26
|
end
|
@@ -60,29 +60,29 @@ describe Mode::Connector::Scheduler do
|
|
60
60
|
scheduler = Mode::Connector::Scheduler.new(data_sources)
|
61
61
|
|
62
62
|
message = double(:message, :name => 'name', :query => 'SELECT 1')
|
63
|
-
|
64
|
-
scheduler.should_receive(:poll_messages).and_yield(message)
|
65
63
|
scheduler.should_receive(:process_message).with(message).and_return(true)
|
66
64
|
|
67
|
-
scheduler.send(:tock)
|
65
|
+
scheduler.send(:tock, message)
|
68
66
|
end
|
69
67
|
|
70
68
|
it "catches errors during tocks" do
|
71
69
|
scheduler = Mode::Connector::Scheduler.new(data_sources)
|
72
70
|
|
73
71
|
message = "Broken tocking!"
|
74
|
-
scheduler.should_receive(:
|
72
|
+
scheduler.should_receive(:process_message).and_raise(StandardError.new(message))
|
75
73
|
|
76
74
|
Mode::Logger.instance.should_receive(:error)
|
77
75
|
|
78
|
-
scheduler.send(:tock)
|
76
|
+
scheduler.send(:tock, message)
|
79
77
|
end
|
80
78
|
|
81
79
|
it "polls if there are available threads in the pool" do
|
82
80
|
scheduler = Mode::Connector::Scheduler.new(data_sources)
|
83
81
|
|
82
|
+
message = double(:message, :name => 'name', :query => 'SELECT 1')
|
83
|
+
scheduler.should_receive(:poll_messages).and_yield(message)
|
84
84
|
scheduler.scheduler.should_receive(:in).and_return(true)
|
85
|
-
|
85
|
+
|
86
86
|
scheduler.send(:tick)
|
87
87
|
end
|
88
88
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mode Analytics
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|