mongodb_logger 0.1.0
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 +17 -0
- data/Gemfile +4 -0
- data/README.md +177 -0
- data/Rakefile +110 -0
- data/SUPPORTED_RAILS_VERSIONS +13 -0
- data/TESTING.md +24 -0
- data/bin/mongodb_logger_web +24 -0
- data/config.ru +16 -0
- data/examples/server_config.yml +4 -0
- data/features/rails.feature +10 -0
- data/features/step_definitions/rails_application_steps.rb +48 -0
- data/features/support/env.rb +15 -0
- data/features/support/rails.rb +91 -0
- data/features/support/terminal.rb +94 -0
- data/lib/mongodb_logger.rb +31 -0
- data/lib/mongodb_logger/initializer_mixin.rb +26 -0
- data/lib/mongodb_logger/logger.rb +184 -0
- data/lib/mongodb_logger/railtie.rb +12 -0
- data/lib/mongodb_logger/replica_set_helper.rb +19 -0
- data/lib/mongodb_logger/server.rb +136 -0
- data/lib/mongodb_logger/server/model/filter.rb +37 -0
- data/lib/mongodb_logger/server/partials.rb +24 -0
- data/lib/mongodb_logger/server/public/images/ajax-loader.gif +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/play-icon.png +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/jquery-1.7.min.js +4 -0
- data/lib/mongodb_logger/server/public/stylesheets/all.css +9 -0
- data/lib/mongodb_logger/server/public/stylesheets/grids.css +18 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-buttons.css +83 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-forms.css +60 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-headers.css +8 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-tables.css +42 -0
- data/lib/mongodb_logger/server/public/stylesheets/layout.css +168 -0
- data/lib/mongodb_logger/server/public/stylesheets/library.css +134 -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/views/application.coffee +54 -0
- data/lib/mongodb_logger/server/views/error.erb +2 -0
- data/lib/mongodb_logger/server/views/layout.erb +32 -0
- data/lib/mongodb_logger/server/views/overview.erb +94 -0
- data/lib/mongodb_logger/server/views/shared/_log.erb +8 -0
- data/lib/mongodb_logger/server/views/shared/_log_info.erb +25 -0
- data/lib/mongodb_logger/server/views/shared/_tabs.erb +4 -0
- data/lib/mongodb_logger/server/views/show_log.erb +85 -0
- data/lib/mongodb_logger/server_config.rb +45 -0
- data/lib/mongodb_logger/version.rb +3 -0
- data/mongodb_logger.gemspec +37 -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 +8 -0
- data/test/config/samples/database_with_auth.yml +9 -0
- data/test/config/samples/mongodb_logger.yml +2 -0
- data/test/config/samples/mongoid.yml +30 -0
- data/test/rails.rb +22 -0
- data/test/rails/app/controllers/order_controller.rb +20 -0
- data/test/rails/test/functional/order_controller_test.rb +56 -0
- data/test/rails/test/test_helper.rb +10 -0
- data/test/shoulda_macros/log_macros.rb +13 -0
- data/test/test.sh +4 -0
- data/test/test_helper.rb +88 -0
- data/test/unit/mongodb_logger_replica_test.rb +45 -0
- data/test/unit/mongodb_logger_test.rb +252 -0
- metadata +300 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>MongoDB logger</title>
|
5
|
+
<link href="<%=u 'stylesheets/all.css' %>" media="screen" rel="stylesheet" type="text/css">
|
6
|
+
<script src="<%=u 'javascripts/jquery-1.7.min.js' %>" type="text/javascript"></script>
|
7
|
+
<script src="<%=u 'application.js' %>" type="text/javascript"></script>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div class="page">
|
11
|
+
<div class="header">
|
12
|
+
<div class="wrapper">
|
13
|
+
<a href="<%=h url_path("overview") %>" class="logo"><img src="<%=u 'images/logo.png'%>" alt="MongoDB Logger"></a> <span class="logger ">logger</span>
|
14
|
+
</div> <!-- wrapper -->
|
15
|
+
</div> <!-- header -->
|
16
|
+
<div class="content">
|
17
|
+
<div class="wrapper">
|
18
|
+
<div class="mainbox">
|
19
|
+
<%= yield %>
|
20
|
+
</div> <!-- mainbox -->
|
21
|
+
</div> <!-- wrapper -->
|
22
|
+
</div> <!-- content -->
|
23
|
+
|
24
|
+
<div class="footer">
|
25
|
+
<div class="wrapper">
|
26
|
+
<p>Text</p>
|
27
|
+
</div> <!-- wrapper -->
|
28
|
+
</div> <!-- footer -->
|
29
|
+
</div>
|
30
|
+
|
31
|
+
</body>
|
32
|
+
</html>
|
@@ -0,0 +1,94 @@
|
|
1
|
+
<div class="topline">
|
2
|
+
<%= partial(:"shared/tabs") %>
|
3
|
+
<div class="unit-right">
|
4
|
+
<div id="tail_logs_block">
|
5
|
+
<div class="initial">
|
6
|
+
<a id="tail_logs_link" href="#" data-url="<%=h url_path("tail_logs") %>" class="button mts mrs">
|
7
|
+
<span class="start" data-url="<%=h url_path("tail_logs") %>">Tail</span>
|
8
|
+
</a>
|
9
|
+
</div>
|
10
|
+
<div class="info">
|
11
|
+
<span id="tail_logs_time"></span>
|
12
|
+
<a id="tail_logs_stop_link" href="#" class="button negative mts mrs">
|
13
|
+
<span class="stop">Stop</span>
|
14
|
+
</a>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</div> <!-- unit-right -->
|
18
|
+
</div> <!-- topline -->
|
19
|
+
|
20
|
+
<div class="outer">
|
21
|
+
<div class="unit size3of4">
|
22
|
+
<div class="filter phm pvs">
|
23
|
+
<form action="<%=h url_path("overview") %>" method="get" accept-charset="UTF-8">
|
24
|
+
<div class="outer mvs">
|
25
|
+
<div class="unit size1of3">
|
26
|
+
<div class="unit size1of2">
|
27
|
+
<div class="prm">
|
28
|
+
<input id="f_controller" type="text" name="f[controller]" value="<%=get_field_val('controller')%>" placeholder="Controller" />
|
29
|
+
</div> <!-- prm -->
|
30
|
+
</div>
|
31
|
+
<div class="unit size1of2">
|
32
|
+
<div class="prm">
|
33
|
+
<input id="f_action" type="text" name="f[action]" value="<%=get_field_val('action')%>" placeholder="Action" />
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div class="unit size1of3">
|
38
|
+
<div class="unit size1of2">
|
39
|
+
<%=select_tag("f[limit]", [100, 500, 1000, 2000, 5000, 10000], get_field_val('limit'))%>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
<div class="unit size1of3 txtR">
|
43
|
+
<input type="submit" name="submit" value="Filter" class="button primary" />
|
44
|
+
<a href="<%=h url_path("overview") %>" class="button small mls">Clear</a>
|
45
|
+
</div>
|
46
|
+
</div> <!-- outer -->
|
47
|
+
<div class="outer mvs">
|
48
|
+
<div class="unit size1of3">
|
49
|
+
<div class="unit size1of2">
|
50
|
+
<div class="prm">
|
51
|
+
<input id="f_application_name" type="text" name="f[application_name]" value="<%=get_field_val('application_name')%>" placeholder="Application Name" />
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<div class="unit size1of2">
|
55
|
+
<div class="prm">
|
56
|
+
<input id="f_ip" type="text" name="f[ip]" value="<%=get_field_val('ip')%>" placeholder="IP" />
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
<div class="unit size1of3">
|
61
|
+
<div class="unit size1of2">
|
62
|
+
<div class="prm ptxs">
|
63
|
+
<input type="checkbox" id="err"><label for="err">Error</label>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
</div> <!-- unit -->
|
67
|
+
</div> <!-- outer -->
|
68
|
+
</form>
|
69
|
+
</div> <!-- filter -->
|
70
|
+
|
71
|
+
<div class="filter-toggle">
|
72
|
+
Filter
|
73
|
+
</div> <!-- filter-toggle -->
|
74
|
+
<table id="logs_list">
|
75
|
+
<tr>
|
76
|
+
<th>Received</th>
|
77
|
+
<th>Action</th>
|
78
|
+
<th>Controller</th>
|
79
|
+
<th>IP</th>
|
80
|
+
<th>URL</th>
|
81
|
+
<th>Runtime</th>
|
82
|
+
</tr>
|
83
|
+
|
84
|
+
<% @logs.each do |log| %>
|
85
|
+
<%= partial(:"shared/log", :object => log) %>
|
86
|
+
<% end %>
|
87
|
+
</table>
|
88
|
+
</div> <!-- unit size3of4 -->
|
89
|
+
|
90
|
+
<div class="unit size1of4">
|
91
|
+
<div id="log_info" class="details">
|
92
|
+
</div>
|
93
|
+
</div> <!-- unit size1of4 -->
|
94
|
+
</div> <!-- outer -->
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<tr class="log_info" data-url="<%=h url_path("log_info/#{log['_id']}") %>">
|
2
|
+
<td><%=h log['request_time']%></td>
|
3
|
+
<td><%=h log['controller']%></td>
|
4
|
+
<td><%=h log['action']%></td>
|
5
|
+
<td><%=h log['ip']%></td>
|
6
|
+
<td class="url_log"><%=h log['url']%></td>
|
7
|
+
<td><%=h log['runtime']%></td>
|
8
|
+
</tr>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="pas">
|
2
|
+
<div class="unit-right ptxs">
|
3
|
+
<a href="<%=h url_path("log/#{log_info['_id']}") %>" target="_blank">Direct Link</a>
|
4
|
+
</div> <!-- unit-right -->
|
5
|
+
<h2 class="phs mvs"><span class="<%= log_info['is_exception'] ? 'failure' : 'success' %>">Message</span></h2>
|
6
|
+
<div class="phs">
|
7
|
+
<% if log_info['is_exception'] %>
|
8
|
+
Error: <%= log_info['messages']['error'] %>
|
9
|
+
<% else %>
|
10
|
+
Info: <%= log_info['messages']['info'] %>
|
11
|
+
<% end %>
|
12
|
+
</div> <!-- phs -->
|
13
|
+
<h2 class="phs mtm mbs">URL</h2>
|
14
|
+
<div class="phs">
|
15
|
+
<%=h log_info['url']%>
|
16
|
+
</div> <!-- phs -->
|
17
|
+
<h2 class="phs mtm mbs">Received</h2>
|
18
|
+
<div class="phs">
|
19
|
+
<%=h log_info['request_time']%>
|
20
|
+
</div> <!-- phs -->
|
21
|
+
<h2 class="phs mtm mbs">IP</h2>
|
22
|
+
<div class="phs">
|
23
|
+
<%=h log_info['ip']%>
|
24
|
+
</div> <!-- phs -->
|
25
|
+
</div> <!-- pas -->
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<div class="topline">
|
2
|
+
<%= partial(:"shared/tabs") %>
|
3
|
+
</div> <!-- topline -->
|
4
|
+
<div class="unit-right">
|
5
|
+
<div class="pam">
|
6
|
+
<a href="<%=h url_path("overview") %>">Back</a>
|
7
|
+
</div> <!-- pam -->
|
8
|
+
</div> <!-- unit-right -->
|
9
|
+
<h1 class="pam">Log #<%=h @log['_id'] %></h1>
|
10
|
+
<ul class="list">
|
11
|
+
<li class="outer pvs phm">
|
12
|
+
<div class="unit size1of5">
|
13
|
+
<span class="pale">Url:</span>
|
14
|
+
</div> <!-- unit -->
|
15
|
+
<div class="unit size4of5">
|
16
|
+
<%=h @log['url'] %>
|
17
|
+
</div> <!-- unit -->
|
18
|
+
</li>
|
19
|
+
<li class="outer pvs phm">
|
20
|
+
<div class="unit size1of5">
|
21
|
+
<span class="pale">Controller:</span>
|
22
|
+
</div> <!-- unit -->
|
23
|
+
<div class="unit size4of5">
|
24
|
+
<%=h @log['controller'] %>
|
25
|
+
</div> <!-- unit -->
|
26
|
+
</li>
|
27
|
+
<li class="outer pvs phm">
|
28
|
+
<div class="unit size1of5">
|
29
|
+
<span class="pale">Action:</span>
|
30
|
+
</div> <!-- unit -->
|
31
|
+
<div class="unit size4of5">
|
32
|
+
<%=h @log['action'] %>
|
33
|
+
</div> <!-- unit -->
|
34
|
+
</li>
|
35
|
+
<li class="outer pvs phm">
|
36
|
+
<div class="unit size1of5">
|
37
|
+
<span class="pale">IP:</span>
|
38
|
+
</div> <!-- unit -->
|
39
|
+
<div class="unit size4of5">
|
40
|
+
<%=h @log['ip'] %>
|
41
|
+
</div> <!-- unit -->
|
42
|
+
</li>
|
43
|
+
<li class="outer pvs phm">
|
44
|
+
<div class="unit size1of5">
|
45
|
+
<span class="pale">Runtime:</span>
|
46
|
+
</div> <!-- unit -->
|
47
|
+
<div class="unit size4of5">
|
48
|
+
<%=h @log['runtime'] %> ms
|
49
|
+
</div> <!-- unit -->
|
50
|
+
</li>
|
51
|
+
<li class="outer pvs phm">
|
52
|
+
<div class="unit size1of5">
|
53
|
+
<span class="pale">Params:</span>
|
54
|
+
</div> <!-- unit -->
|
55
|
+
<div class="unit size4of5">
|
56
|
+
<pre>
|
57
|
+
<%=h PP.pp(@log['params'].to_hash, "" ) %>
|
58
|
+
</pre>
|
59
|
+
</div> <!-- unit -->
|
60
|
+
</li>
|
61
|
+
<% unless @log['messages']['error'].blank? %>
|
62
|
+
<li class="outer pvs phm">
|
63
|
+
<div class="unit size1of5">
|
64
|
+
<span class="pale">Error message:</span>
|
65
|
+
</div> <!-- unit -->
|
66
|
+
<div class="unit size4of5">
|
67
|
+
<pre>
|
68
|
+
<%=h @log['messages']['error'].join("\n") %>
|
69
|
+
</pre>
|
70
|
+
</div> <!-- unit -->
|
71
|
+
</li>
|
72
|
+
<% end %>
|
73
|
+
<% unless @log['messages']['info'].blank? %>
|
74
|
+
<li class="outer pvs phm">
|
75
|
+
<div class="unit size1of5">
|
76
|
+
<span class="pale">Info message:</span>
|
77
|
+
</div> <!-- unit -->
|
78
|
+
<div class="unit size4of5">
|
79
|
+
<pre>
|
80
|
+
<%=h @log['messages']['info'].join("\n") %>
|
81
|
+
</pre>
|
82
|
+
</div> <!-- unit -->
|
83
|
+
</li>
|
84
|
+
<% end %>
|
85
|
+
</ul>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'mongo'
|
2
|
+
require 'erb'
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
|
6
|
+
module MongodbLogger
|
7
|
+
class ServerConfig
|
8
|
+
class << self
|
9
|
+
def set_config(config_path)
|
10
|
+
if File.file?(config_path)
|
11
|
+
config_file = File.new(config_path)
|
12
|
+
config = YAML.load(ERB.new(config_file.read).result)
|
13
|
+
else
|
14
|
+
raise "Config file not found"
|
15
|
+
end
|
16
|
+
|
17
|
+
@db_configuration = {
|
18
|
+
'host' => 'localhost',
|
19
|
+
'port' => 27017}.merge(config)
|
20
|
+
@db_configuration["collection"] ||= "production_log"
|
21
|
+
@db = Mongo::Connection.new(@db_configuration['host'],
|
22
|
+
@db_configuration['port'],
|
23
|
+
:auto_reconnect => true).db(@db_configuration['database'])
|
24
|
+
|
25
|
+
if @db_configuration['username'] && @db_configuration['password']
|
26
|
+
@authenticated = @db.authenticate(@db_configuration['username'],
|
27
|
+
@db_configuration['password'])
|
28
|
+
end
|
29
|
+
@collection = @db[@db_configuration["collection"]]
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_config
|
33
|
+
@db_configuration
|
34
|
+
end
|
35
|
+
|
36
|
+
def db
|
37
|
+
@db
|
38
|
+
end
|
39
|
+
|
40
|
+
def collection
|
41
|
+
@collection
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/mongodb_logger/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Alexey Vasiliev"]
|
6
|
+
gem.email = ["leopard.not.a@gmail.com"]
|
7
|
+
gem.description = %q{MongoDB logger for Rails 3}
|
8
|
+
gem.summary = %q{MongoDB logger for Rails 3}
|
9
|
+
gem.homepage = ""
|
10
|
+
|
11
|
+
gem.add_development_dependency "rspec", "~> 2.7.0"
|
12
|
+
gem.add_development_dependency "shoulda", ">= 2.0.0"
|
13
|
+
gem.add_development_dependency "mocha", "~> 0.10.0"
|
14
|
+
gem.add_development_dependency "cucumber", "~> 1.1.2"
|
15
|
+
|
16
|
+
gem.add_runtime_dependency "rake", "~> 0.9.0"
|
17
|
+
gem.add_runtime_dependency "bundler", ">= 1.0.0"
|
18
|
+
gem.add_runtime_dependency "mongo", "~> 1.4.0"
|
19
|
+
gem.add_runtime_dependency "bson_ext", "~> 1.4.0"
|
20
|
+
gem.add_runtime_dependency "i18n", ">= 0.4.1"
|
21
|
+
gem.add_runtime_dependency "json", "~> 1.6.1"
|
22
|
+
gem.add_runtime_dependency "activesupport", ">= 3.0.0"
|
23
|
+
gem.add_runtime_dependency "sinatra", ">= 1.2.0"
|
24
|
+
gem.add_runtime_dependency "erubis", ">= 2.6.6"
|
25
|
+
gem.add_runtime_dependency "coffee-script", "~> 2.2.0"
|
26
|
+
gem.add_runtime_dependency "vegas", "~> 0.1.2"
|
27
|
+
|
28
|
+
gem.rubyforge_project = "mongodb_logger"
|
29
|
+
|
30
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
31
|
+
gem.files = `git ls-files`.split("\n")
|
32
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
33
|
+
gem.name = "mongodb_logger"
|
34
|
+
gem.require_paths = ["lib"]
|
35
|
+
gem.version = MongodbLogger::VERSION
|
36
|
+
gem.platform = Gem::Platform::RUBY
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# taken from http://mongoid.org/docs/installation/
|
2
|
+
defaults: &defaults
|
3
|
+
host: localhost
|
4
|
+
slaves:
|
5
|
+
- host: slave1.local
|
6
|
+
port: 27018
|
7
|
+
- host: slave2.local
|
8
|
+
port: 27019
|
9
|
+
autocreate_indexes: false
|
10
|
+
allow_dynamic_fields: true
|
11
|
+
include_root_in_json: false
|
12
|
+
parameterize_keys: true
|
13
|
+
persist_in_safe_mode: false
|
14
|
+
raise_not_found_error: true
|
15
|
+
reconnect_time: 3
|
16
|
+
|
17
|
+
development:
|
18
|
+
<<: *defaults
|
19
|
+
database: control_development
|
20
|
+
|
21
|
+
test:
|
22
|
+
<<: *defaults
|
23
|
+
database: system_log
|
24
|
+
|
25
|
+
# set these environment variables on your prod server
|
26
|
+
production:
|
27
|
+
<<: *defaults
|
28
|
+
host: <%= ENV['MONGOID_HOST'] %>
|
29
|
+
port: <%= ENV['MONGOID_PORT'] %>
|
30
|
+
database: <%= ENV['MONGOID_DATABASE'] %>
|
data/test/rails.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module MongodbLogger
|
2
|
+
class Application
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
class Rails
|
7
|
+
module VERSION
|
8
|
+
MAJOR = 3
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.env
|
12
|
+
ActiveSupport::StringInquirer.new("test")
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.root
|
16
|
+
Pathname.new(File.dirname(__FILE__))
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.application
|
20
|
+
MongodbLogger::Application.new
|
21
|
+
end
|
22
|
+
end
|