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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 739e44d832df7720ca4502cb8720eab57583415b
4
- data.tar.gz: 92beab19a19b2b215aab07ec78181a63cd8e074d
3
+ metadata.gz: 74f1b2ce9baad12179eacc6a688af0cc4c1a63ea
4
+ data.tar.gz: 3d8f7f5cab8366b0eb3bf454c62e4374ce9fccf3
5
5
  SHA512:
6
- metadata.gz: c0858dbcab185e74b16db79382763ae3d23d8505bf53dd681fa1d8d5f3336fc76f94fd6c4b36d51b44fd6f9974e55ec09b1ed622ba7771cf1d49bd2d576f4386
7
- data.tar.gz: a3acf7a3b6f816bd509a5c207cf5be8368044a33a01ff5e78461aa4fb9f1439ebd80888b4a6159f94b4ee9e1a7f03241246f6fba15a9aa3e7d5a90d0c8ba412b
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") { runner.stop }
10
- trap("HUP") { runner.stop }
11
- trap("TERM") { runner.stop }
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
@@ -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, path, params)
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 = {})
@@ -51,7 +51,7 @@ module Mode
51
51
  raise StandardError.new("Unknown connection error")
52
52
  end
53
53
  rescue => err
54
- raise "Error: Cannot connect to #{data_source.name}. #{err.message}"
54
+ raise "Cannot connect to #{data_source.name}. #{err.message}"
55
55
  end
56
56
 
57
57
  def configuration
@@ -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 processors.length < max_jobs
38
- scheduler.in(0, :tag => 'processor') { tock }
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
- poll_messages do |message|
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
@@ -1,3 +1,3 @@
1
1
  module Mode
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
@@ -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).and_return(resource)
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(:poll_messages).and_raise(StandardError.new(message))
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.16
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-01-30 00:00:00.000000000 Z
11
+ date: 2014-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor