mongodb_logger 0.2.6-jruby
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/.gitignore +20 -0
- data/.rvmrc +1 -0
- data/.travis.yml +19 -0
- data/CHANGELOG.md +30 -0
- data/Gemfile +10 -0
- data/LICENSE +22 -0
- data/README.md +207 -0
- data/Rakefile +169 -0
- data/SUPPORTED_RAILS_VERSIONS +17 -0
- data/TESTING.md +24 -0
- data/bin/mongodb_logger_web +24 -0
- data/config.ru +17 -0
- data/examples/server_config.yml +5 -0
- data/features/mongodb_logger_web.feature +14 -0
- data/features/rails.feature +12 -0
- data/features/step_definitions/mongodb_logger_web_steps.rb +45 -0
- data/features/step_definitions/rails_application_steps.rb +65 -0
- data/features/support/env.rb +15 -0
- data/features/support/rails.rb +98 -0
- data/features/support/terminal.rb +95 -0
- data/lib/mongodb_logger/initializer_mixin.rb +26 -0
- data/lib/mongodb_logger/logger.rb +239 -0
- data/lib/mongodb_logger/railtie.rb +12 -0
- data/lib/mongodb_logger/replica_set_helper.rb +19 -0
- data/lib/mongodb_logger/server/coffee/logs.coffee +250 -0
- data/lib/mongodb_logger/server/content_for.rb +58 -0
- data/lib/mongodb_logger/server/model/additional_filter.rb +104 -0
- data/lib/mongodb_logger/server/model/analytic.rb +82 -0
- data/lib/mongodb_logger/server/model/filter.rb +84 -0
- data/lib/mongodb_logger/server/partials.rb +24 -0
- data/lib/mongodb_logger/server/public/images/arrow-down.png +0 -0
- data/lib/mongodb_logger/server/public/images/arrow-up.png +0 -0
- data/lib/mongodb_logger/server/public/images/date.png +0 -0
- data/lib/mongodb_logger/server/public/images/external.png +0 -0
- data/lib/mongodb_logger/server/public/images/failure.png +0 -0
- data/lib/mongodb_logger/server/public/images/logo.png +0 -0
- data/lib/mongodb_logger/server/public/images/mongodb.png +0 -0
- data/lib/mongodb_logger/server/public/images/newlog.png +0 -0
- data/lib/mongodb_logger/server/public/images/play-icon.png +0 -0
- data/lib/mongodb_logger/server/public/images/spinner.gif +0 -0
- data/lib/mongodb_logger/server/public/images/spinner2.gif +0 -0
- data/lib/mongodb_logger/server/public/images/stop-icon.png +0 -0
- data/lib/mongodb_logger/server/public/images/success.png +0 -0
- data/lib/mongodb_logger/server/public/javascripts/logs.js +1 -0
- data/lib/mongodb_logger/server/public/javascripts/vendors/highlight.pack.js +1 -0
- data/lib/mongodb_logger/server/public/javascripts/vendors/jquery-1.7.1.min.js +4 -0
- data/lib/mongodb_logger/server/public/javascripts/vendors/jquery-ui-1.8.16.min.js +791 -0
- data/lib/mongodb_logger/server/public/javascripts/vendors/jquery.pjax.min.js +6 -0
- data/lib/mongodb_logger/server/public/stylesheets/all.css +12 -0
- data/lib/mongodb_logger/server/public/stylesheets/grids.css +18 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-buttons.css +81 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-forms.css +59 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-headers.css +8 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-tables.css +87 -0
- data/lib/mongodb_logger/server/public/stylesheets/highlight/zenburn.css +115 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_glass_25_cb842e_1x400.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_glass_70_ede4d4_1x400.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_c47a23_256x240.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_cb672b_256x240.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_f08000_256x240.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_f35f07_256x240.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_ff7519_256x240.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/mongodb_logger/server/public/stylesheets/humanity/jquery-ui-1.8.16.custom.css +568 -0
- data/lib/mongodb_logger/server/public/stylesheets/layout.css +205 -0
- data/lib/mongodb_logger/server/public/stylesheets/library.css +330 -0
- data/lib/mongodb_logger/server/public/stylesheets/reset.css +43 -0
- data/lib/mongodb_logger/server/public/stylesheets/spaces.css +42 -0
- data/lib/mongodb_logger/server/view_helpers.rb +113 -0
- data/lib/mongodb_logger/server/views/analytics.erb +61 -0
- data/lib/mongodb_logger/server/views/error.erb +2 -0
- data/lib/mongodb_logger/server/views/layout.erb +47 -0
- data/lib/mongodb_logger/server/views/overview.erb +119 -0
- data/lib/mongodb_logger/server/views/shared/_collection_stats.erb +14 -0
- data/lib/mongodb_logger/server/views/shared/_dynamic_filter.erb +34 -0
- data/lib/mongodb_logger/server/views/shared/_log.erb +8 -0
- data/lib/mongodb_logger/server/views/shared/_log_info.erb +27 -0
- data/lib/mongodb_logger/server/views/shared/_message_tabs.erb +15 -0
- data/lib/mongodb_logger/server/views/shared/_tabs.erb +4 -0
- data/lib/mongodb_logger/server/views/shared/_tail_panel.erb +13 -0
- data/lib/mongodb_logger/server/views/shared/_top_panel.erb +7 -0
- data/lib/mongodb_logger/server/views/show_log.erb +105 -0
- data/lib/mongodb_logger/server.rb +174 -0
- data/lib/mongodb_logger/server_config.rb +77 -0
- data/lib/mongodb_logger/version.rb +3 -0
- data/lib/mongodb_logger.rb +31 -0
- data/mongodb_logger.gemspec +44 -0
- data/mongodb_logger.java.gemspec +42 -0
- data/spec/javascripts/MongodbLoggerMainSpec.js +13 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/support/jasmine.yml +77 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/test/active_record.rb +13 -0
- data/test/config/samples/database.yml +9 -0
- data/test/config/samples/database_no_file_logging.yml +10 -0
- data/test/config/samples/database_replica_set.yml +12 -0
- data/test/config/samples/database_with_auth.yml +9 -0
- data/test/config/samples/database_with_collection.yml +8 -0
- data/test/config/samples/mongodb_logger.yml +2 -0
- data/test/config/samples/mongoid.yml +30 -0
- data/test/config/samples/server_config.yml +3 -0
- data/test/rails/app/controllers/order_controller.rb +23 -0
- data/test/rails/test/functional/order_controller_test.rb +116 -0
- data/test/rails/test/test_helper.rb +10 -0
- data/test/rails.rb +22 -0
- data/test/shoulda_macros/log_macros.rb +13 -0
- data/test/test.sh +6 -0
- data/test/test_helper.rb +89 -0
- data/test/unit/mongodb_logger_replica_test.rb +56 -0
- data/test/unit/mongodb_logger_test.rb +270 -0
- metadata +383 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ruby-1.9.3-p0@mongodb_logger_gems --create
|
data/.travis.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
before_script:
|
2
|
+
- "sh -e /etc/init.d/xvfb start"
|
3
|
+
script: "sh -c 'export DISPLAY=:99.0 && test/test.sh'"
|
4
|
+
rvm:
|
5
|
+
- 1.8.7
|
6
|
+
# - ree
|
7
|
+
- 1.9.2
|
8
|
+
- 1.9.3
|
9
|
+
- ruby-head
|
10
|
+
# - jruby-18mode
|
11
|
+
# - jruby-19mode
|
12
|
+
notifications:
|
13
|
+
email: false
|
14
|
+
branches:
|
15
|
+
only:
|
16
|
+
- master
|
17
|
+
- development
|
18
|
+
- gem
|
19
|
+
#bundler_args: --path vendor/bundle
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
## v0.2.6
|
2
|
+
|
3
|
+
* Replica Set set in config by key 'hosts'
|
4
|
+
* Adding jruby support
|
5
|
+
|
6
|
+
## v0.2.5
|
7
|
+
|
8
|
+
* Build graphs for analytics page
|
9
|
+
* Fix month for analytics
|
10
|
+
|
11
|
+
## v0.2.4
|
12
|
+
|
13
|
+
* Move on logs list by using arrows on keybords
|
14
|
+
|
15
|
+
## v0.2.3
|
16
|
+
|
17
|
+
* Fix storage log with attachments (save it for search by "original\_filename" and "content\_type")
|
18
|
+
* Fix tests for CI
|
19
|
+
|
20
|
+
## v0.2.2
|
21
|
+
|
22
|
+
* Fix set custom collection in config and add tests on it
|
23
|
+
|
24
|
+
## v0.2.1
|
25
|
+
|
26
|
+
* Add show on 'more info' page meta data from log
|
27
|
+
|
28
|
+
## v0.2.0
|
29
|
+
|
30
|
+
* Public release
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) Alexey Vasiliev
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
# MongodbLogger [](http://travis-ci.org/le0pard/mongodb_logger) [](https://gemnasium.com/le0pard/mongodb_logger)
|
2
|
+
|
3
|
+
MongodbLogger is a alternative logger for Rails 3, which log all requests of you application into MongoDB database.
|
4
|
+
It:
|
5
|
+
|
6
|
+
* simple to integrate into existing Rails 3 application;
|
7
|
+
* allow to store all logs from web cluster into one scalable storage - MongoDB;
|
8
|
+
* flexible schema of MongoDB allow to store and search any information from logs;
|
9
|
+
* web panel allow filter logs, build graphs using MapReduce by information from logs;
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
1. Add the following to your Gemfile then refresh your dependencies by executing "bundle install" (or just simple "bundle"):
|
14
|
+
|
15
|
+
gem "mongodb_logger"
|
16
|
+
|
17
|
+
1. Add the following line to your ApplicationController:
|
18
|
+
|
19
|
+
include MongodbLogger::Base
|
20
|
+
|
21
|
+
1. For use with Heroku you need to prevent the rails\_log\_stdout plugin from being added by Heroku:
|
22
|
+
|
23
|
+
mkdir vendor/plugins/rails_log_stdout
|
24
|
+
touch vendor/plugins/rails_log_stdout/.gitkeep
|
25
|
+
|
26
|
+
1. Add MongodbLogger settings to database.yml for each environment in which you want to use the MongodbLogger. The MongodbLogger will also
|
27
|
+
look for a separate mongodb\_logger.yml or mongoid.yml (if you are using mongoid) before looking in database.yml.
|
28
|
+
In the mongodb\_logger.yml and mongoid.yml case, the settings should be defined without the 'mongodb\_logger' subkey.
|
29
|
+
|
30
|
+
database.yml:
|
31
|
+
|
32
|
+
development:
|
33
|
+
adapter: postgresql
|
34
|
+
database: my_app_development
|
35
|
+
username: postgres
|
36
|
+
mongodb_logger:
|
37
|
+
database: my_app # required (the only required setting)
|
38
|
+
capsize: <%= 10.megabytes %> # default: 250MB
|
39
|
+
host: localhost # default: localhost
|
40
|
+
port: 27017 # default: 27017
|
41
|
+
replica_set: true # default: false - Adds retries for ConnectionFailure during voting for replica set master
|
42
|
+
safe_insert: false # default: false - Enable/Disable safe inserts (wait for insert to propagate to all nodes)
|
43
|
+
application_name: my_app # default: Rails.application
|
44
|
+
disable_file_logging: false # default: false - disable logging into filesystem (only in MongoDB)
|
45
|
+
collection: some_name # default: Rails.env + "_log" - name of MongoDB collection
|
46
|
+
|
47
|
+
mongodb\_logger.yml:
|
48
|
+
|
49
|
+
development:
|
50
|
+
database: my_app
|
51
|
+
capsize: <%= 10.megabytes %>
|
52
|
+
host: localhost
|
53
|
+
port: 27017
|
54
|
+
replica_set: true
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
1. For using with MongoDB Replica Set (more info you can read by this link [http://www.mongodb.org/display/DOCS/Replica+Sets](http://www.mongodb.org/display/DOCS/Replica+Sets)). In config set list of [host, port] in key "hosts":
|
59
|
+
|
60
|
+
development:
|
61
|
+
database: my_app
|
62
|
+
capsize: <%= 10.megabytes %>
|
63
|
+
host: localhost
|
64
|
+
port: 27017
|
65
|
+
hosts:
|
66
|
+
- - 127.0.0.1
|
67
|
+
- 27018
|
68
|
+
- - 127.0.0.1
|
69
|
+
- 27019
|
70
|
+
|
71
|
+
|
72
|
+
## Usage
|
73
|
+
|
74
|
+
After success instalation of gem, a new MongoDB document (record) will be created for each request on your application,
|
75
|
+
by default will record the following information: Runtime, IP Address, Request Time, Controller, Method,
|
76
|
+
Action, Params, Application Name and All messages sent to the logger. The structure of the MongoDB document looks like this:
|
77
|
+
|
78
|
+
{
|
79
|
+
'action' : action_name,
|
80
|
+
'application_name' : application_name (rails root),
|
81
|
+
'controller' : controller_name,
|
82
|
+
'ip' : ip_address,
|
83
|
+
'messages' : {
|
84
|
+
'info' : [ ],
|
85
|
+
'debug' : [ ],
|
86
|
+
'error' : [ ],
|
87
|
+
'warn' : [ ],
|
88
|
+
'fatal' : [ ]
|
89
|
+
},
|
90
|
+
'params' : { },
|
91
|
+
'path' : path,
|
92
|
+
'request_time' : date_of_request,
|
93
|
+
'runtime' : elapsed_execution_time_in_milliseconds,
|
94
|
+
'url' : full_url,
|
95
|
+
'method' : request method (GET, POST, OPTIONS),
|
96
|
+
'is_exception' : true only for exceptions (in other cases this field miss)
|
97
|
+
}
|
98
|
+
|
99
|
+
Beyond that, if you want to add extra information to the base of the document (let's say something like user\_id on every request that it's available),
|
100
|
+
you can just call the Rails.logger.add\_metadata method on your logger like so (for example from a before\_filter):
|
101
|
+
|
102
|
+
# make sure we're using the MongodbLogger in this environment
|
103
|
+
if Rails.logger.respond_to?(:add_metadata)
|
104
|
+
Rails.logger.add_metadata(:user_id => @current_user.id)
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
## The Front End
|
109
|
+
To setup web interface in you Rails application, first of all create autoload file in you Rails application
|
110
|
+
|
111
|
+
File: you\_rails\_app/config/initializers/mongodb\_logger.rb (example)
|
112
|
+
|
113
|
+
require 'mongodb_logger/server' # required
|
114
|
+
# this secure you web interface by basic auth, but you can skip this, if you no need this
|
115
|
+
MongodbLogger::Server.use Rack::Auth::Basic do |username, password|
|
116
|
+
[username, password] == ['admin', 'password']
|
117
|
+
end
|
118
|
+
|
119
|
+
and just mount MongodbLogger::Server in rails routes:
|
120
|
+
|
121
|
+
File: you\_rails\_app/config/routes.rb
|
122
|
+
|
123
|
+
mount MongodbLogger::Server.new, :at => "/mongodb"
|
124
|
+
|
125
|
+
Now you can see web interface by url "http://localhost:3000/mongodb"
|
126
|
+
|
127
|
+
If you've installed MongodbLogger as a gem and want running the front end without Rails application, you can do it by this command:
|
128
|
+
|
129
|
+
mongodb_logger_web config.yml
|
130
|
+
|
131
|
+
where config.yml is config, similar to config of Rails apps, but without Rails.env. Example:
|
132
|
+
|
133
|
+
database: app_logs_dev
|
134
|
+
host: localhost
|
135
|
+
port: 27017
|
136
|
+
collection: development_log # set for see development logs
|
137
|
+
|
138
|
+
parameter "collection" should be set, if your set custom for your Rails application or start this front end not for production
|
139
|
+
enviroment (by default taken "production\_log" collection, in Rails application gem generate "#{Rails.env}\_log" collection,
|
140
|
+
if it is not defined in config).
|
141
|
+
|
142
|
+
It's a thin layer around rackup so it's configurable as well:
|
143
|
+
|
144
|
+
mongodb_logger_web config.yml -p 8282
|
145
|
+
|
146
|
+
### Passenger, Unicorn, Thin, etc.
|
147
|
+
|
148
|
+
Using Passenger, Unicorn, Thin, etc? MongodbLogger ships with a `config.ru` you can use. See guide:
|
149
|
+
|
150
|
+
* Passenger Apache: <http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_rack_based_ruby_application>
|
151
|
+
* Passenger Nginx: <http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_a_rack_app>
|
152
|
+
* Unicorn: <http://unicorn.bogomips.org>
|
153
|
+
* Thin: <http://code.macournoyer.com/thin/usage>
|
154
|
+
|
155
|
+
Don't forget setup MONGODBLOGGERCONFIG env variable, which provide information about MongodbLogger config. Example starting with unicorn:
|
156
|
+
|
157
|
+
MONGODBLOGGERCONFIG=examples/server_config.yml unicorn
|
158
|
+
|
159
|
+
## Demo Application with MongodbLogger
|
160
|
+
|
161
|
+
Demo: [http://demo-mongodb-logger.catware.org/](http://demo-mongodb-logger.catware.org/)
|
162
|
+
|
163
|
+
Demo Sources: [https://github.com/le0pard/mongodb_logger_example_heroku](https://github.com/le0pard/mongodb_logger_example_heroku)
|
164
|
+
|
165
|
+
|
166
|
+
## Querying via the Rails console
|
167
|
+
|
168
|
+
And now, for a couple quick examples on getting ahold of this log data...
|
169
|
+
First, here's how to get a handle on the MongoDB from within a Rails console:
|
170
|
+
|
171
|
+
>> db = Rails.logger.mongo_connection
|
172
|
+
=> #<Mongo::DB:0x007fdc7c65adc8 @name="monkey_logs_dev" ... >
|
173
|
+
|
174
|
+
>> collection = db[Rails.logger.mongo_collection_name]
|
175
|
+
=> #<Mongo::Collection:0x007fdc7a4d12b0 @name="development_log" .. >
|
176
|
+
|
177
|
+
Once you've got the collection, you can find all requests for a specific user (with id):
|
178
|
+
|
179
|
+
>> cursor = collection.find(:user_id => '12355')
|
180
|
+
=> #<Mongo::Cursor:0x1031a3e30 ... >
|
181
|
+
>> cursor.count
|
182
|
+
=> 5
|
183
|
+
|
184
|
+
Find all requests that took more that one second to complete:
|
185
|
+
|
186
|
+
>> collection.find({:runtime => {'$gt' => 1000}}).count
|
187
|
+
=> 3
|
188
|
+
|
189
|
+
Find all order#show requests with a particular order id (id=order\_id):
|
190
|
+
|
191
|
+
>> collection.find({"controller" => "order", "action"=> "show", "params.id" => order_id})
|
192
|
+
|
193
|
+
Find all requests with an exception that contains "RoutingError" in the message or stack trace:
|
194
|
+
|
195
|
+
>> collection.find({"messages.error" => /RoutingError/})
|
196
|
+
|
197
|
+
Find all requests with errors:
|
198
|
+
|
199
|
+
>> collection.find({"is_exception" => true})
|
200
|
+
|
201
|
+
Find all requests with a request\_date greater than '11/18/2010 22:59:52 GMT'
|
202
|
+
|
203
|
+
>> collection.find({:request_time => {'$gt' => Time.utc(2010, 11, 18, 22, 59, 52)}})
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
Copyright (c) 2009-2012 Phil Burrows, CustomInk (based on https://github.com/customink/central_logger) and Leopard released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
begin
|
5
|
+
require 'cucumber/rake/task'
|
6
|
+
rescue LoadError
|
7
|
+
$stderr.puts "Please install cucumber: `gem install cucumber`"
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
11
|
+
#require "bundler/gem_tasks"
|
12
|
+
require 'bundler/gem_helper'
|
13
|
+
Bundler::GemHelper.install_tasks(:name => 'mongodb_logger.java')
|
14
|
+
Bundler::GemHelper.install_tasks(:name => 'mongodb_logger')
|
15
|
+
|
16
|
+
|
17
|
+
#########################################
|
18
|
+
### Help tasks
|
19
|
+
#########################################
|
20
|
+
|
21
|
+
require 'coffee-script'
|
22
|
+
require 'uglifier'
|
23
|
+
namespace :js do
|
24
|
+
desc "compile coffee-scripts from ./lib/mongodb_logger/server/coffee to ./lib/mongodb_logger/server/public/javascripts"
|
25
|
+
task :compile do
|
26
|
+
source = "#{File.dirname(__FILE__)}/lib/mongodb_logger/server/coffee/"
|
27
|
+
javascripts = "#{File.dirname(__FILE__)}/lib/mongodb_logger/server/public/javascripts/"
|
28
|
+
|
29
|
+
Dir.foreach(source) do |cf|
|
30
|
+
unless cf == '.' || cf == '..'
|
31
|
+
js_compiled = CoffeeScript.compile File.read("#{source}#{cf}")
|
32
|
+
js = Uglifier.compile js_compiled
|
33
|
+
open "#{javascripts}#{cf.gsub('.coffee', '.js')}", 'w' do |f|
|
34
|
+
f.puts js
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
puts "All done."
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
#########################################
|
44
|
+
### TESTS
|
45
|
+
#########################################
|
46
|
+
|
47
|
+
desc 'Default: run unit tests.'
|
48
|
+
task :default => [:test]
|
49
|
+
#task :default => [:test, "cucumber:rails:all"]
|
50
|
+
|
51
|
+
desc "Clean out the tmp directory"
|
52
|
+
task :clean do
|
53
|
+
exec "rm -rf tmp"
|
54
|
+
end
|
55
|
+
|
56
|
+
desc 'Test unit.'
|
57
|
+
Rake::TestTask.new(:test) do |test|
|
58
|
+
test.libs << 'lib' << 'test'
|
59
|
+
test.test_files = ['test/unit/mongodb_logger_test.rb']
|
60
|
+
test.verbose = true
|
61
|
+
end
|
62
|
+
|
63
|
+
namespace :test do
|
64
|
+
|
65
|
+
desc "Run replica set tests (not for CI)"
|
66
|
+
Rake::TestTask.new(:replica_set) do |test|
|
67
|
+
test.libs << 'lib' << 'test'
|
68
|
+
test.pattern = 'test/unit/mongodb_logger_replica_test.rb'
|
69
|
+
test.verbose = true
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
GEM_ROOT = File.dirname(__FILE__).freeze
|
76
|
+
LOCAL_GEM_ROOT = File.join(GEM_ROOT, 'tmp', 'local_gems').freeze
|
77
|
+
|
78
|
+
if ENV['CI']
|
79
|
+
# for ci testing only major rails versions
|
80
|
+
RAILS_VERSIONS = ['3.0.11', '3.1.3', '3.2.0']
|
81
|
+
else
|
82
|
+
RAILS_VERSIONS = IO.read('SUPPORTED_RAILS_VERSIONS').strip.split("\n")
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
LOCAL_GEMS = [['sqlite3', nil], ['shoulda', nil], ["rspec", nil], ["mocha", nil], ["cucumber", nil], ["bundler", "1.0.21"]] +
|
87
|
+
RAILS_VERSIONS.collect { |version| ['rails', version] }
|
88
|
+
|
89
|
+
desc "Vendor test gems: Run this once to prepare your test environment"
|
90
|
+
task :vendor_test_gems do
|
91
|
+
old_gem_path = ENV['GEM_PATH']
|
92
|
+
old_gem_home = ENV['GEM_HOME']
|
93
|
+
ENV['GEM_PATH'] = LOCAL_GEM_ROOT
|
94
|
+
ENV['GEM_HOME'] = LOCAL_GEM_ROOT
|
95
|
+
LOCAL_GEMS.each do |gem_name, version|
|
96
|
+
gem_file_pattern = [gem_name, version || '*'].compact.join('-')
|
97
|
+
version_option = version ? "-v #{version}" : ''
|
98
|
+
pattern = File.join(LOCAL_GEM_ROOT, 'gems', "#{gem_file_pattern}")
|
99
|
+
existing = Dir.glob(pattern).first
|
100
|
+
unless existing
|
101
|
+
command = "gem install -i #{LOCAL_GEM_ROOT} --no-ri --no-rdoc --backtrace #{version_option} #{gem_name}"
|
102
|
+
puts "Vendoring #{gem_file_pattern}..."
|
103
|
+
unless system("#{command} 2>&1")
|
104
|
+
puts "Command failed: #{command}"
|
105
|
+
exit(1)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
ENV['GEM_PATH'] = old_gem_path
|
110
|
+
ENV['GEM_HOME'] = old_gem_home
|
111
|
+
end
|
112
|
+
|
113
|
+
Cucumber::Rake::Task.new(:cucumber) do |t|
|
114
|
+
t.fork = true
|
115
|
+
t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'progress')]
|
116
|
+
end
|
117
|
+
|
118
|
+
task :cucumber => [:vendor_test_gems]
|
119
|
+
|
120
|
+
def run_rails_cucumbr_task(version, additional_cucumber_args)
|
121
|
+
puts "Testing Rails #{version}"
|
122
|
+
if version.empty?
|
123
|
+
raise "No Rails version specified - make sure ENV['RAILS_VERSION'] is set, e.g. with `rake cucumber:rails:all`"
|
124
|
+
end
|
125
|
+
ENV['RAILS_VERSION'] = version
|
126
|
+
system("cucumber --format #{ENV['CUCUMBER_FORMAT'] || 'progress'} #{additional_cucumber_args} features/rails.feature")
|
127
|
+
end
|
128
|
+
|
129
|
+
def define_rails_cucumber_tasks(additional_cucumber_args = '')
|
130
|
+
namespace :rails do
|
131
|
+
RAILS_VERSIONS.each do |version|
|
132
|
+
desc "Test integration of the gem with Rails #{version}"
|
133
|
+
task version => [:vendor_test_gems] do
|
134
|
+
exit 1 unless run_rails_cucumbr_task(version, additional_cucumber_args)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
desc "Test integration of the gem with all Rails versions"
|
139
|
+
task :all do
|
140
|
+
results = RAILS_VERSIONS.map do |version|
|
141
|
+
run_rails_cucumbr_task(version, additional_cucumber_args)
|
142
|
+
end
|
143
|
+
|
144
|
+
exit 1 unless results.all?
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def define_web_cucumber_tasks(additional_cucumber_args = '')
|
150
|
+
desc "Test web of the gem"
|
151
|
+
task :web do
|
152
|
+
puts "Testing Web"
|
153
|
+
system("cucumber --format #{ENV['CUCUMBER_FORMAT'] || 'progress'} #{additional_cucumber_args} features/mongodb_logger_web.feature")
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
namespace :cucumber do
|
158
|
+
define_rails_cucumber_tasks
|
159
|
+
define_web_cucumber_tasks
|
160
|
+
end
|
161
|
+
|
162
|
+
begin
|
163
|
+
require 'jasmine'
|
164
|
+
load 'jasmine/tasks/jasmine.rake'
|
165
|
+
rescue LoadError
|
166
|
+
task :jasmine do
|
167
|
+
abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
|
168
|
+
end
|
169
|
+
end
|
data/TESTING.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Running the suite
|
2
|
+
=================
|
3
|
+
|
4
|
+
Since the logger must run on many versions of Rails, running its test suite is slightly different than you may be used to.
|
5
|
+
|
6
|
+
First execute the following command:
|
7
|
+
|
8
|
+
rake vendor_test_gems
|
9
|
+
# NOT: bundle exec rake vendor_test_gems
|
10
|
+
|
11
|
+
This command will download the various versions of Rails that the notifier must be tested against.
|
12
|
+
|
13
|
+
Then, to start the suite, run
|
14
|
+
|
15
|
+
rake cucumber:rails:all
|
16
|
+
|
17
|
+
Note: do NOT use 'bundle exec rake cucumber:rails:all'.
|
18
|
+
|
19
|
+
For help created file test/test.sh, which run all this testing steps + unit tests. Run this file from root of gem:
|
20
|
+
|
21
|
+
./test/test.sh
|
22
|
+
|
23
|
+
Versions of testing Rails you can see in file "SUPPORTED_RAILS_VERSIONS". If some tests is faild, you can see
|
24
|
+
more information about fallen tests in file "tmp/terminal.log".
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
+
begin
|
5
|
+
require 'vegas'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'vegas'
|
9
|
+
end
|
10
|
+
require 'mongodb_logger/server'
|
11
|
+
|
12
|
+
|
13
|
+
Vegas::Runner.new(MongodbLogger::Server, 'mongodb_logger_web', {
|
14
|
+
:before_run => lambda {|v|
|
15
|
+
config_file = (ENV['MONGODBLOGGERCONFIG'] || v.args.first)
|
16
|
+
if config_file
|
17
|
+
MongodbLogger::ServerConfig.set_config(config_file)
|
18
|
+
else
|
19
|
+
raise ArgumentError, "please provide config file"
|
20
|
+
end
|
21
|
+
}
|
22
|
+
}) do |runner, opts, app|
|
23
|
+
#
|
24
|
+
end
|
data/config.ru
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift ::File.expand_path(::File.dirname(__FILE__) + '/lib')
|
5
|
+
require 'mongodb_logger/server'
|
6
|
+
|
7
|
+
# Set the MONGODBLOGGERCONFIG env variable
|
8
|
+
# config file you want loaded on boot.
|
9
|
+
if ENV['MONGODBLOGGERCONFIG'] && ::File.exists?(::File.expand_path(ENV['MONGODBLOGGERCONFIG']))
|
10
|
+
MongodbLogger::ServerConfig.set_config(::File.expand_path(ENV['MONGODBLOGGERCONFIG']))
|
11
|
+
use Rack::ShowExceptions
|
12
|
+
run MongodbLogger::Server.new
|
13
|
+
else
|
14
|
+
raise "Please provide config file"
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Install MongodbLogger Web and test it
|
2
|
+
|
3
|
+
Scenario: Main page
|
4
|
+
Given homepage
|
5
|
+
Then I should see text that no logs in system
|
6
|
+
|
7
|
+
Scenario: Tail logs buttons
|
8
|
+
Given homepage
|
9
|
+
And I should see start tail button
|
10
|
+
When I click on start tail button
|
11
|
+
Then I should see stop tails button
|
12
|
+
And box with time of last log tail
|
13
|
+
When I click on stop tail button
|
14
|
+
Then I should see start tail button
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Feature: Install the Gem in a Rails application and test it
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have built and installed the "mongodb_logger" gem
|
5
|
+
|
6
|
+
Scenario: Use the gem without vendoring the gem in a Rails application
|
7
|
+
When I generate a new Rails application
|
8
|
+
And I configure my application to require the "mongodb_logger" gem
|
9
|
+
And I setup mongodb_logger tests
|
10
|
+
And I setup all gems for rails
|
11
|
+
And I prepare rails environment for testing
|
12
|
+
Then the tests should have run successfully
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
require 'mongodb_logger/server'
|
3
|
+
require 'capybara/cucumber'
|
4
|
+
|
5
|
+
include Capybara::DSL
|
6
|
+
|
7
|
+
Before do
|
8
|
+
MongodbLogger::ServerConfig.set_config_for_testing(File.join(PROJECT_ROOT, 'test/config/samples/server_config.yml'))
|
9
|
+
Capybara.app = MongodbLogger::Server
|
10
|
+
end
|
11
|
+
|
12
|
+
After do
|
13
|
+
MongodbLogger::ServerConfig.collection.drop
|
14
|
+
end
|
15
|
+
|
16
|
+
Given /^homepage$/ do
|
17
|
+
visit "/"
|
18
|
+
end
|
19
|
+
|
20
|
+
Then /^I should see text that no logs in system$/ do
|
21
|
+
page.has_selector?('div', :text => 'No logs found, try to filter out the other parameters', :visible => true)
|
22
|
+
end
|
23
|
+
|
24
|
+
Given /^I should see start tail button$/ do
|
25
|
+
page.has_link?('tail_logs_link', :visible => true)
|
26
|
+
page.has_link?('tail_logs_stop_link', :visible => false)
|
27
|
+
end
|
28
|
+
|
29
|
+
When /^I click on start tail button$/ do
|
30
|
+
click_link('tail_logs_link')
|
31
|
+
end
|
32
|
+
|
33
|
+
Then /^I should see stop tails button$/ do
|
34
|
+
page.has_link?('tail_logs_link', :visible => false)
|
35
|
+
page.has_link?('tail_logs_stop_link', :visible => true)
|
36
|
+
end
|
37
|
+
|
38
|
+
Then /^box with time of last log tail$/ do
|
39
|
+
page.has_selector?('span', :id => 'tail_logs_time', :visible => true)
|
40
|
+
end
|
41
|
+
|
42
|
+
When /^I click on stop tail button$/ do
|
43
|
+
click_link('tail_logs_stop_link')
|
44
|
+
end
|
45
|
+
|