rackamole 0.3.2 → 0.3.3

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/HISTORY CHANGED
@@ -54,4 +54,8 @@
54
54
  0.3.2
55
55
  * Fix issue with excluded_path being nil.
56
56
  * Changed default excluded_path
57
- * Added perf_excludes option to exempt alerts from being sent for known slower requests
57
+ * Added perf_excludes option to exempt alerts from being sent for known slower requests
58
+
59
+ 0.3.3
60
+ * Added support for rackamole store authentication
61
+ * Fixed issue to enforce regexp when excluded path are specified as strings.
data/lib/rackamole.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Rackamole
2
2
 
3
3
  # :stopdoc:
4
- VERSION = '0.3.2'
4
+ VERSION = '0.3.3'
5
5
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
6
6
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
7
7
  # :startdoc:
@@ -39,8 +39,7 @@ module Rackamole::Alert
39
39
  Pony.mail( params )
40
40
  output
41
41
  rescue => boom
42
- puts boom
43
- boom.backtrace.each { |l| puts l }
42
+ boom.backtrace.each { |l| logger.error l }
44
43
  logger.error( "Rackamole email alert failed with error `#{boom}" )
45
44
  end
46
45
 
@@ -258,7 +258,11 @@ module Rack
258
258
  def mole_request?( request )
259
259
  if options.has_key?( :excluded_paths ) and options[:excluded_paths]
260
260
  options[:excluded_paths].each do |exclude_path|
261
- return false if request.path =~ exclude_path
261
+ exclude_path = Regexp.new( exclude_path ) if exclude_path.is_a?( String )
262
+ if request.path =~ exclude_path
263
+ logger.debug ">>> Excluded request -- #{request.path} using exclude flag #{exclude_path}"
264
+ return false
265
+ end
262
266
  end
263
267
  end
264
268
  true
@@ -19,9 +19,11 @@ module Rackamole
19
19
  #
20
20
  # === Options
21
21
  #
22
- # :host :: The name of the host running the mongo server. Default: localhost
23
- # :port :: The port for the mongo server instance. Default: 27017
24
- # :db_name :: The name of the mole databaase. Default: mole_mdb
22
+ # :host :: The name of the host running the mongo server. Default: localhost
23
+ # :port :: The port for the mongo server instance. Default: 27017
24
+ # :db_name :: The name of the mole databaase. Default: mole_mdb
25
+ # :username :: username if the mongo db has auth setup. optional
26
+ # :password :: password if the mongo db has auth required. optional
25
27
  #
26
28
  def initialize( options={} )
27
29
  opts = default_options.merge( options )
@@ -79,9 +81,14 @@ module Rackamole
79
81
  @connection = Mongo::Connection.new( @host, @port, :logger => opts[:logger] )
80
82
  @database = @connection.db( @db_name )
81
83
 
82
- @features = database.collection( 'features' )
83
- @logs = database.collection( 'logs' )
84
- @users = database.collection( 'users' )
84
+ if opts[:username] and opts[:password]
85
+ authenticated = @database.authenticate( opts[:username], opts[:password] )
86
+ raise "Authentication failed for database #{@db_name}. Please check your credentials and try again" unless authenticated
87
+ end
88
+
89
+ @features = database.collection( 'features' )
90
+ @logs = database.collection( 'logs' )
91
+ @users = database.collection( 'users' )
85
92
  end
86
93
 
87
94
  # Validates option hash.
@@ -91,14 +98,22 @@ module Rackamole
91
98
  raise "[MOle] Mongo store configuration error -- You must specify a value for option `:#{option}"
92
99
  end
93
100
  end
101
+ # check for auth
102
+ if opts[:username]
103
+ %w(username password).each do |option|
104
+ unless opts[option.to_sym]
105
+ raise "[MOle] Mongo store configuration error -- You must specify a value for auth option `:#{option}"
106
+ end
107
+ end
108
+ end
94
109
  end
95
110
 
96
111
  # Set up mongo default options ie localhost host, default mongo port and
97
112
  # the database being mole_mdb
98
113
  def default_options
99
114
  {
100
- :host => 'localhost',
101
- :port => Mongo::Connection::DEFAULT_PORT
115
+ :host => 'localhost',
116
+ :port => Mongo::Connection::DEFAULT_PORT
102
117
  }
103
118
  end
104
119
 
@@ -4,6 +4,7 @@ require 'chronic'
4
4
  describe Rackamole::Store::MongoDb do
5
5
 
6
6
  describe "#mole" do
7
+
7
8
  before( :all ) do
8
9
  @now = Chronic.parse( "11/27/2009" )
9
10
  @store = Rackamole::Store::MongoDb.new(
@@ -11,18 +12,18 @@ describe Rackamole::Store::MongoDb do
11
12
  :port => 27017,
12
13
  :db_name => 'mole_app_test_mdb',
13
14
  :logger => Rackamole::Logger.new( :file_name => $stdout, :log_level => 'info' ) )
14
- @db = @store.database
15
+ @db = @store.database
15
16
  end
16
17
 
17
18
  before( :each ) do
18
19
  @store.send( :reset! )
19
20
 
20
21
  @args = OrderedHash.new
21
- @args[:type] = Rackamole.feature
22
- @args[:app_name] = "app"
23
- @args[:environment] = :test
24
- @args[:perf_issue] = false
25
- @args[:ip] = "1.1.1.1"
22
+ @args[:type] = Rackamole.feature
23
+ @args[:app_name] = "app"
24
+ @args[:environment] = :test
25
+ @args[:perf_issue] = false
26
+ @args[:ip] = "1.1.1.1"
26
27
  @args[:browser] = OrderedHash.new
27
28
  @args[:browser][:name] = "Ibrowse"
28
29
  @args[:browser][:version] = "1.X"
@@ -30,15 +31,15 @@ describe Rackamole::Store::MongoDb do
30
31
  @args[:machine][:platform] = "Blee"
31
32
  @args[:machine][:os] = "Windoze"
32
33
  @args[:machine][:version] = "10.0"
33
- @args[:user_id] = 100
34
- @args[:user_name] = "Fernand"
35
- @args[:request_time] = 1.0
36
- @args[:url] = "http://test_me/"
37
- @args[:path] = "/fred"
38
- @args[:method] = 'GET'
39
- @args[:params] = { :blee => "duh".to_json }
40
- @args[:session] = { :fred => 10.to_json }
41
- @args[:created_at] = @now.utc
34
+ @args[:user_id] = 100
35
+ @args[:user_name] = "Fernand"
36
+ @args[:request_time] = 1.0
37
+ @args[:url] = "http://test_me/"
38
+ @args[:path] = "/fred"
39
+ @args[:method] = 'GET'
40
+ @args[:params] = { :blee => "duh".to_json }
41
+ @args[:session] = { :fred => 10.to_json }
42
+ @args[:created_at] = @now.utc
42
43
  end
43
44
 
44
45
  it "should mole a context based feature correctly" do
@@ -53,23 +54,23 @@ describe Rackamole::Store::MongoDb do
53
54
  feature['ctx'].should == '/fred'
54
55
 
55
56
  log = @store.logs.find_one()
56
- log.should_not be_nil
57
- log['typ'].should == Rackamole.feature
58
- log['fid'].should_not be_nil
59
- log['par'].should == { 'blee' => 'duh'.to_json }
60
- log['ip'].should == '1.1.1.1'
57
+ log.should_not be_nil
58
+ log['typ'].should == Rackamole.feature
59
+ log['fid'].should_not be_nil
60
+ log['par'].should == { 'blee' => 'duh'.to_json }
61
+ log['ip'].should == '1.1.1.1'
61
62
  log['bro']['name'].should == "Ibrowse"
62
63
  log['bro']['version'].should == "1.X"
63
64
  log['mac']['platform'].should == "Blee"
64
65
  log['mac']['os'].should == "Windoze"
65
66
  log['mac']['version'].should == "10.0"
66
- log['url'].should == 'http://test_me/'
67
- log['met'].should == 'GET'
68
- log['ses'].should == { 'fred' => '10' }
69
- log['uid'].should_not be_nil
70
- log['rti'].should == 1.0
71
- log['did'].should == '20091127'
72
- log['tid'].should == '190000'
67
+ log['url'].should == 'http://test_me/'
68
+ log['met'].should == 'GET'
69
+ log['ses'].should == { 'fred' => '10' }
70
+ log['uid'].should_not be_nil
71
+ log['rti'].should == 1.0
72
+ log['did'].should == '20091127'
73
+ log['tid'].should == '190000'
73
74
 
74
75
  feature = @store.features.find_one( log['fid'] )
75
76
  feature.should_not be_nil
@@ -164,4 +165,27 @@ describe Rackamole::Store::MongoDb do
164
165
  end
165
166
  end
166
167
 
168
+ describe( "authentication" ) do
169
+ it "should authenticate correctly if a store is setup with auth" do
170
+ store = Rackamole::Store::MongoDb.new(
171
+ :host => 'localhost',
172
+ :port => 27017,
173
+ :db_name => 'mole_sec_app_test_mdb',
174
+ :username => 'fred',
175
+ :password => 'letmein',
176
+ :logger => Rackamole::Logger.new( :file_name => $stdout, :log_level => 'info' ) )
177
+ end
178
+
179
+ it "should crap out if auth failed" do
180
+ lambda {
181
+ store = Rackamole::Store::MongoDb.new(
182
+ :host => 'localhost',
183
+ :port => 27017,
184
+ :db_name => 'mole_sec_app_test_mdb',
185
+ :username => 'fred',
186
+ :password => 'hoy',
187
+ :logger => Rackamole::Logger.new( :file_name => $stdout, :log_level => 'info' ) )
188
+ }.should raise_error( /Authentication failed/ )
189
+ end
190
+ end
167
191
  end
data/spec/spec_helper.rb CHANGED
@@ -2,9 +2,6 @@ require 'rubygems'
2
2
  require 'rack'
3
3
  require 'rack/test'
4
4
 
5
- # require 'active_support'
6
- # require 'action_pack'
7
-
8
5
  require File.join(File.dirname(__FILE__), %w[.. lib rackamole])
9
6
 
10
7
  Spec::Runner.configure do |config|
@@ -37,6 +37,9 @@ production:
37
37
  <<: *defaults
38
38
  :perf_threshold: 5
39
39
  :store: !ruby/object:Rackamole::Store::MongoDb
40
- host: fred
41
- port: 10
42
- db_name: mole_fred_production
40
+ host: fred
41
+ port: 10
42
+ db_name: mole_fred_production
43
+ username: fred
44
+ password: secret
45
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rackamole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernand Galiana
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-11 00:00:00 -07:00
12
+ date: 2010-02-27 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency