mode 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
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