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.
Files changed (118) hide show
  1. data/.gitignore +20 -0
  2. data/.rvmrc +1 -0
  3. data/.travis.yml +19 -0
  4. data/CHANGELOG.md +30 -0
  5. data/Gemfile +10 -0
  6. data/LICENSE +22 -0
  7. data/README.md +207 -0
  8. data/Rakefile +169 -0
  9. data/SUPPORTED_RAILS_VERSIONS +17 -0
  10. data/TESTING.md +24 -0
  11. data/bin/mongodb_logger_web +24 -0
  12. data/config.ru +17 -0
  13. data/examples/server_config.yml +5 -0
  14. data/features/mongodb_logger_web.feature +14 -0
  15. data/features/rails.feature +12 -0
  16. data/features/step_definitions/mongodb_logger_web_steps.rb +45 -0
  17. data/features/step_definitions/rails_application_steps.rb +65 -0
  18. data/features/support/env.rb +15 -0
  19. data/features/support/rails.rb +98 -0
  20. data/features/support/terminal.rb +95 -0
  21. data/lib/mongodb_logger/initializer_mixin.rb +26 -0
  22. data/lib/mongodb_logger/logger.rb +239 -0
  23. data/lib/mongodb_logger/railtie.rb +12 -0
  24. data/lib/mongodb_logger/replica_set_helper.rb +19 -0
  25. data/lib/mongodb_logger/server/coffee/logs.coffee +250 -0
  26. data/lib/mongodb_logger/server/content_for.rb +58 -0
  27. data/lib/mongodb_logger/server/model/additional_filter.rb +104 -0
  28. data/lib/mongodb_logger/server/model/analytic.rb +82 -0
  29. data/lib/mongodb_logger/server/model/filter.rb +84 -0
  30. data/lib/mongodb_logger/server/partials.rb +24 -0
  31. data/lib/mongodb_logger/server/public/images/arrow-down.png +0 -0
  32. data/lib/mongodb_logger/server/public/images/arrow-up.png +0 -0
  33. data/lib/mongodb_logger/server/public/images/date.png +0 -0
  34. data/lib/mongodb_logger/server/public/images/external.png +0 -0
  35. data/lib/mongodb_logger/server/public/images/failure.png +0 -0
  36. data/lib/mongodb_logger/server/public/images/logo.png +0 -0
  37. data/lib/mongodb_logger/server/public/images/mongodb.png +0 -0
  38. data/lib/mongodb_logger/server/public/images/newlog.png +0 -0
  39. data/lib/mongodb_logger/server/public/images/play-icon.png +0 -0
  40. data/lib/mongodb_logger/server/public/images/spinner.gif +0 -0
  41. data/lib/mongodb_logger/server/public/images/spinner2.gif +0 -0
  42. data/lib/mongodb_logger/server/public/images/stop-icon.png +0 -0
  43. data/lib/mongodb_logger/server/public/images/success.png +0 -0
  44. data/lib/mongodb_logger/server/public/javascripts/logs.js +1 -0
  45. data/lib/mongodb_logger/server/public/javascripts/vendors/highlight.pack.js +1 -0
  46. data/lib/mongodb_logger/server/public/javascripts/vendors/jquery-1.7.1.min.js +4 -0
  47. data/lib/mongodb_logger/server/public/javascripts/vendors/jquery-ui-1.8.16.min.js +791 -0
  48. data/lib/mongodb_logger/server/public/javascripts/vendors/jquery.pjax.min.js +6 -0
  49. data/lib/mongodb_logger/server/public/stylesheets/all.css +12 -0
  50. data/lib/mongodb_logger/server/public/stylesheets/grids.css +18 -0
  51. data/lib/mongodb_logger/server/public/stylesheets/group-buttons.css +81 -0
  52. data/lib/mongodb_logger/server/public/stylesheets/group-forms.css +59 -0
  53. data/lib/mongodb_logger/server/public/stylesheets/group-headers.css +8 -0
  54. data/lib/mongodb_logger/server/public/stylesheets/group-tables.css +87 -0
  55. data/lib/mongodb_logger/server/public/stylesheets/highlight/zenburn.css +115 -0
  56. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
  57. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png +0 -0
  58. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_glass_25_cb842e_1x400.png +0 -0
  59. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_glass_70_ede4d4_1x400.png +0 -0
  60. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png +0 -0
  61. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
  62. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png +0 -0
  63. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png +0 -0
  64. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_c47a23_256x240.png +0 -0
  65. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_cb672b_256x240.png +0 -0
  66. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_f08000_256x240.png +0 -0
  67. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_f35f07_256x240.png +0 -0
  68. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_ff7519_256x240.png +0 -0
  69. data/lib/mongodb_logger/server/public/stylesheets/humanity/images/ui-icons_ffffff_256x240.png +0 -0
  70. data/lib/mongodb_logger/server/public/stylesheets/humanity/jquery-ui-1.8.16.custom.css +568 -0
  71. data/lib/mongodb_logger/server/public/stylesheets/layout.css +205 -0
  72. data/lib/mongodb_logger/server/public/stylesheets/library.css +330 -0
  73. data/lib/mongodb_logger/server/public/stylesheets/reset.css +43 -0
  74. data/lib/mongodb_logger/server/public/stylesheets/spaces.css +42 -0
  75. data/lib/mongodb_logger/server/view_helpers.rb +113 -0
  76. data/lib/mongodb_logger/server/views/analytics.erb +61 -0
  77. data/lib/mongodb_logger/server/views/error.erb +2 -0
  78. data/lib/mongodb_logger/server/views/layout.erb +47 -0
  79. data/lib/mongodb_logger/server/views/overview.erb +119 -0
  80. data/lib/mongodb_logger/server/views/shared/_collection_stats.erb +14 -0
  81. data/lib/mongodb_logger/server/views/shared/_dynamic_filter.erb +34 -0
  82. data/lib/mongodb_logger/server/views/shared/_log.erb +8 -0
  83. data/lib/mongodb_logger/server/views/shared/_log_info.erb +27 -0
  84. data/lib/mongodb_logger/server/views/shared/_message_tabs.erb +15 -0
  85. data/lib/mongodb_logger/server/views/shared/_tabs.erb +4 -0
  86. data/lib/mongodb_logger/server/views/shared/_tail_panel.erb +13 -0
  87. data/lib/mongodb_logger/server/views/shared/_top_panel.erb +7 -0
  88. data/lib/mongodb_logger/server/views/show_log.erb +105 -0
  89. data/lib/mongodb_logger/server.rb +174 -0
  90. data/lib/mongodb_logger/server_config.rb +77 -0
  91. data/lib/mongodb_logger/version.rb +3 -0
  92. data/lib/mongodb_logger.rb +31 -0
  93. data/mongodb_logger.gemspec +44 -0
  94. data/mongodb_logger.java.gemspec +42 -0
  95. data/spec/javascripts/MongodbLoggerMainSpec.js +13 -0
  96. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  97. data/spec/javascripts/support/jasmine.yml +77 -0
  98. data/spec/javascripts/support/jasmine_config.rb +23 -0
  99. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  100. data/test/active_record.rb +13 -0
  101. data/test/config/samples/database.yml +9 -0
  102. data/test/config/samples/database_no_file_logging.yml +10 -0
  103. data/test/config/samples/database_replica_set.yml +12 -0
  104. data/test/config/samples/database_with_auth.yml +9 -0
  105. data/test/config/samples/database_with_collection.yml +8 -0
  106. data/test/config/samples/mongodb_logger.yml +2 -0
  107. data/test/config/samples/mongoid.yml +30 -0
  108. data/test/config/samples/server_config.yml +3 -0
  109. data/test/rails/app/controllers/order_controller.rb +23 -0
  110. data/test/rails/test/functional/order_controller_test.rb +116 -0
  111. data/test/rails/test/test_helper.rb +10 -0
  112. data/test/rails.rb +22 -0
  113. data/test/shoulda_macros/log_macros.rb +13 -0
  114. data/test/test.sh +6 -0
  115. data/test/test_helper.rb +89 -0
  116. data/test/unit/mongodb_logger_replica_test.rb +56 -0
  117. data/test/unit/mongodb_logger_test.rb +270 -0
  118. metadata +383 -0
@@ -0,0 +1,113 @@
1
+ # view helpers
2
+ module Sinatra::ViewHelpers
3
+
4
+ def pretty_hash(hash)
5
+ begin
6
+ Marshal::dump(hash)
7
+ h(hash.to_yaml).gsub(" ", "  ")
8
+ rescue Exception => e # errors from Marshal or YAML
9
+ # Object couldn't be dumped, perhaps because of singleton methods -- this is the fallback
10
+ h(object.inspect)
11
+ end
12
+ end
13
+
14
+ def string_from_log_message(message)
15
+ message.is_a?(Array) ? message.join("\n") : message.to_s
16
+ end
17
+
18
+ def meta_informations(log)
19
+ meta_data = Hash.new
20
+ log.each do |key, val|
21
+ # predefined fields
22
+ next if [:_id, :messages, :request_time, :ip, :runtime, :application_name, :is_exception, :params, :method, :controller, :action, :path, :url].include?(key.to_sym)
23
+ meta_data[key] = val
24
+ end
25
+ meta_data
26
+ end
27
+
28
+ # TODO: improve this
29
+ def number_to_human_size(number, precision = 2)
30
+ number = begin
31
+ Float(number)
32
+ rescue ArgumentError, TypeError
33
+ return number
34
+ end
35
+ case
36
+ when number.to_i == 1 then
37
+ "1 Byte"
38
+ when number < 1024 then
39
+ "%d Bytes" % number
40
+ when number < 1048576 then
41
+ "%.#{precision}f KB" % (number / 1024)
42
+ when number < 1073741824 then
43
+ "%.#{precision}f MB" % (number / 1048576)
44
+ when number < 1099511627776 then
45
+ "%.#{precision}f GB" % (number / 1073741824)
46
+ else
47
+ "%.#{precision}f TB" % (number / 1099511627776)
48
+ end.sub(/([0-9]\.\d*?)0+ /, '\1 ' ).sub(/\. /,' ')
49
+ rescue
50
+ nil
51
+ end
52
+
53
+ def text_field_tag(object, name, options = {})
54
+ value = ""
55
+ value = options.delete(:value) if options[:value]
56
+ value = object.send name if object && object.respond_to?(name)
57
+ attr = []
58
+ options.each do |key, val|
59
+ attr << "#{key}='#{val}'"
60
+ end
61
+ "<input type='text' name='#{object.form_name}[#{name.to_s}]' value='#{value}' #{attr.join(" ")} />"
62
+ end
63
+
64
+ def submit_tag(name, value, options = {})
65
+ attr = []
66
+ options.each do |key, val|
67
+ attr << "#{key}='#{val}'"
68
+ end
69
+ "<input type='submit' name='#{name.to_s}' value='#{value}' #{attr.join(" ")} />"
70
+ end
71
+
72
+ def check_box_tag(object, name, options = {})
73
+ value = nil
74
+ value = options.delete(:value) if options[:value]
75
+ value = object.send name if object && object.respond_to?(name)
76
+ attr = []
77
+ options.each do |key, val|
78
+ attr << "#{key}='#{val}'"
79
+ end
80
+ "<input id='#{object.form_name}_#{name.to_s}' type='checkbox' name='#{object.form_name}[#{name.to_s}]' #{'checked="checked"' if value} value='1' #{attr.join(" ")} />"
81
+ end
82
+
83
+ def label_tag(object, name, label, options = {})
84
+ attr = []
85
+ options.each do |key, val|
86
+ attr << "#{key}='#{val}'"
87
+ end
88
+ "<label for='#{object.form_name}_#{name.to_s}' #{attr.join(" ")}>#{label}</label>"
89
+ end
90
+
91
+ def select_tag(object, name, options_array, options = {})
92
+ value = nil
93
+ value = options.delete(:value) if options[:value]
94
+ value = object.send name if object && object.respond_to?(name)
95
+ attr = []
96
+ options.each do |key, val|
97
+ attr << "#{key}='#{val}'"
98
+ end
99
+ select_tag = []
100
+ select_tag << "<select id='#{object.form_name}_#{name.to_s}' name='#{object.form_name}[#{name.to_s}]' #{attr.join(" ")}>"
101
+ options_array.each do |val|
102
+ if val.is_a?(Array) && 2 == val.length
103
+ skey, sval = val[0], val[1]
104
+ else
105
+ skey = sval = val
106
+ end
107
+ select_tag << "<option value='#{skey}' #{"selected='selected'" if value && skey.to_s == value}>#{sval}</option>"
108
+ end
109
+ select_tag << "</select>"
110
+ select_tag.join("\n")
111
+ end
112
+
113
+ end
@@ -0,0 +1,61 @@
1
+ <%= partial(:"shared/top_panel") %>
2
+
3
+ <div class="outer">
4
+ <div class="unit size3of4">
5
+ <div class="filter phm pvs">
6
+ <form id="analyticForm" action="<%=h url_path("analytics") %>" method="post" accept-charset="UTF-8">
7
+ <div class="outer mvs">
8
+ <div class="unit size1of2">
9
+ <div class="unit size1of2">
10
+ <div class="prm">
11
+ <%= select_tag @analytic, :type, MongodbLogger::ServerModel::Analytic::ANALYTIC_TYPES %>
12
+ </div> <!-- prm -->
13
+ </div>
14
+ <div class="unit size1of2">
15
+ <div class="prm">
16
+ <%#= text_field_tag @filter, :action, :placeholder => "Action" %>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class="unit size1of2">
21
+ <div class="unit size1of2">
22
+ <div class="prm">
23
+ <%= text_field_tag @analytic, :start_date, :placeholder => "Start date", :class => "datepicker" %>
24
+ </div> <!-- prm -->
25
+ </div> <!-- unit -->
26
+ <div class="unit size1of2">
27
+ <div class="prm">
28
+ <%= text_field_tag @analytic, :end_date, :placeholder => "End date", :class => "datepicker" %>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div> <!-- outer -->
33
+
34
+ <div class="outer">
35
+ <%= submit_tag :submit, "Analyze", :class => "button primary mrs" %> <a href="<%=h url_path("analytics") %>">Clear</a>
36
+ </div> <!-- outer -->
37
+
38
+ </form>
39
+ </div> <!-- filter -->
40
+
41
+ <div class="filter-toggle"><span class="arrow-down">Analyze</span></div>
42
+
43
+ <div id="analyticData">
44
+ <div class="pal txtC">
45
+ Select what to analyze
46
+ </div>
47
+ </div>
48
+
49
+ </div> <!-- unit size3of4 -->
50
+
51
+ <div class="unit size1of4">
52
+ <div class="details">
53
+
54
+ <div id="log_info">
55
+ <div class="pale h2 pal txtC">
56
+ Comming soon...
57
+ </div> <!-- pale h2 -->
58
+ </div>
59
+ </div> <!-- details -->
60
+ </div> <!-- unit size1of4 -->
61
+ </div> <!-- outer -->
@@ -0,0 +1,2 @@
1
+ <h1>Error</h1>
2
+ <div><%=h error%></div>
@@ -0,0 +1,47 @@
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
+ </head>
7
+ <body>
8
+ <div class="page">
9
+ <div class="header">
10
+ <div class="wrapper">
11
+ <div class="unit-right stats">
12
+ <div class="unit size2of3">
13
+ <div class="ptxs pls"><strong>DB:</strong> <%=h @db.name %></div>
14
+ <div class="pls"><strong>Collection:</strong> <%=h @collection.name %></div>
15
+ </div> <!-- unit -->
16
+ <div id="collection_stats">
17
+ <%= partial(:"shared/collection_stats", :object => @collection_stats) %>
18
+ </div>
19
+ </div>
20
+ <a href="<%=h url_path("overview") %>" class="logo" data-pjax='#main_pjax'><img src="<%=u 'images/logo.png'%>" alt="MongoDB Logger"></a>
21
+ </div> <!-- wrapper -->
22
+ </div> <!-- header -->
23
+ <div class="content">
24
+ <div class="wrapper">
25
+ <div id="main_pjax" class="mainbox">
26
+ <%= yield %>
27
+ </div> <!-- mainbox -->
28
+ </div> <!-- wrapper -->
29
+ </div> <!-- content -->
30
+ </div>
31
+
32
+ <!-- scripts -->
33
+ <script src="<%=u 'javascripts/vendors/jquery-1.7.1.min.js' %>" type="text/javascript"></script>
34
+ <script src="<%=u 'javascripts/vendors/jquery-ui-1.8.16.min.js' %>" type="text/javascript"></script>
35
+ <script src="<%=u 'javascripts/vendors/jquery.pjax.min.js' %>" type="text/javascript"></script>
36
+ <script src="<%=u 'javascripts/vendors/highlight.pack.js' %>" type="text/javascript"></script>
37
+ <script src="<%=u 'javascripts/logs.js' %>" type="text/javascript"></script>
38
+
39
+ <!-- charts -->
40
+ <script type="text/javascript" src="https://www.google.com/jsapi"></script>
41
+ <script type="text/javascript">
42
+ google.load('visualization', '1', {'packages':['corechart']});
43
+ google.setOnLoadCallback(MongodbLoggerMain.init_analytic_charts);
44
+ </script>
45
+
46
+ </body>
47
+ </html>
@@ -0,0 +1,119 @@
1
+ <% if @collection_stats["capped"] && 1 == @collection_stats["capped"] %>
2
+ <% content_for :right_top_panel do %>
3
+ <%= partial(:"shared/tail_panel") %>
4
+ <% end %>
5
+ <% end %>
6
+
7
+ <%= partial(:"shared/top_panel") %>
8
+
9
+ <div class="outer">
10
+ <div class="unit size3of4">
11
+ <div class="filter phm pvs" style="<%= 'display:block;' unless @filter.get_mongo_conditions.blank? %>">
12
+ <form action="<%=h url_path("overview") %>" method="get" accept-charset="UTF-8">
13
+ <div class="outer mvs">
14
+ <div class="unit size1of3">
15
+ <div class="unit size1of2">
16
+ <div class="prm">
17
+ <%= text_field_tag @filter, :controller, :placeholder => "Controller" %>
18
+ </div> <!-- prm -->
19
+ </div>
20
+ <div class="unit size1of2">
21
+ <div class="prm">
22
+ <%= text_field_tag @filter, :action, :placeholder => "Action" %>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <div class="unit size1of3">
27
+ <div class="unit size1of2">
28
+ <div class="prm">
29
+ <%= select_tag @filter, :limit, [[50, "Limits - 50"], [100, "Limits - 100"], [200, "Limits - 200"], [500, "Limits - 500"], [1000, "Limits - 1000"]] %>
30
+ </div> <!-- prm -->
31
+ </div> <!-- unit -->
32
+ <div class="unit size1of2">
33
+ <div class="prm">
34
+ <%= text_field_tag @filter, :application_name, :placeholder => "Application Name" %>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ <div class="unit size1of3">
39
+ <div class="unit size1of2">
40
+ <div class="prm">
41
+ <%= text_field_tag @filter, :ip, :placeholder => "IP" %>
42
+ </div>
43
+ </div>
44
+ <div class="unit size1of2">
45
+ <%= check_box_tag @filter, :is_exception %>
46
+ <%= label_tag @filter, :is_exception, "Exceptions" %>
47
+ </div> <!-- unit -->
48
+ </div> <!-- unit -->
49
+ </div> <!-- outer -->
50
+
51
+ <div class="outer">
52
+ <ul id="more_filter_list">
53
+ <% @filter.more_filters.each_with_index do |f_filter, index| %>
54
+ <li>
55
+ <%= partial(:"shared/dynamic_filter", :object => f_filter) %>
56
+ </li>
57
+ <% end %>
58
+ </ul>
59
+ <div class="mbs">
60
+ <a id="add_more_filter" href="<%=h url_path("add_filter") %>" class="add">+ Add Filter</a>
61
+ </div>
62
+
63
+ </div> <!-- outer -->
64
+
65
+ <div class="outer">
66
+ <%= submit_tag :submit, "Filter", :class => "button primary mrs" %> <a href="<%=h url_path("overview") %>">Clear</a>
67
+ </div> <!-- outer -->
68
+
69
+ <div class="outer">
70
+ <div class="pvs">
71
+ <hr />
72
+ </div>
73
+ </div>
74
+
75
+ <div class="outer">
76
+ <div class="unit size1of1">
77
+ <div class="pvs">
78
+ <strong>Mongodb Condition:</strong><br />
79
+ <%=h @filter.get_mongo_conditions.inspect %>
80
+ </div>
81
+ </div>
82
+ </div>
83
+
84
+ </form>
85
+ </div> <!-- filter -->
86
+
87
+ <div class="filter-toggle"><span class="arrow-down <%= 'rotate' unless @filter.get_mongo_conditions.blank? %>">Filter</span></div>
88
+
89
+ <% if @logs.count > 0 %>
90
+ <table id="logs_list">
91
+ <tr>
92
+ <th>Received</th>
93
+ <th>Controller</th>
94
+ <th>Action</th>
95
+ <th>Method</th>
96
+ <th>IP</th>
97
+ <th>Runtime</th>
98
+ </tr>
99
+
100
+ <% @logs.each do |log| %>
101
+ <%= partial(:"shared/log", :object => log) %>
102
+ <% end %>
103
+ </table>
104
+ <% else %>
105
+ <div class="pale pal txtC">No logs found, try to filter out the other parameters</div>
106
+ <% end %>
107
+ </div> <!-- unit size3of4 -->
108
+
109
+ <div class="unit size1of4">
110
+ <div class="details">
111
+
112
+ <div id="log_info">
113
+ <div class="pale h2 pal txtC">
114
+ Please choose log to see details
115
+ </div> <!-- pale h2 -->
116
+ </div>
117
+ </div> <!-- details -->
118
+ </div> <!-- unit size1of4 -->
119
+ </div> <!-- outer -->
@@ -0,0 +1,14 @@
1
+ <div class="unit size1of3">
2
+ <div class="pts prs txtR">
3
+ <span class="log-num" title="count of logs"><%=h collection_stats["count"] %></span></div>
4
+ </div> <!-- unit -->
5
+ <% if collection_stats["capped"] && 1 == collection_stats["capped"] %>
6
+ <div class="progress">
7
+ <span class="size"><%=h number_to_human_size(collection_stats["size"]) %> of <%=h number_to_human_size(collection_stats["storageSize"]) %></span>
8
+ <div class="used" style="width: <%=((collection_stats["size"].to_f / collection_stats["storageSize"].to_f) * 100).round%>%"></div>
9
+ </div> <!-- progress -->
10
+ <% else %>
11
+ <div class="warning"><p>You do not use capped collection for logs.
12
+ <a href="http://www.mongodb.org/display/DOCS/Capped+Collections#CappedCollections-Convertingacollectiontocapped" target="_blank" class="more">More info.</a></p>
13
+ </div>
14
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <div class="outer mvs filter_block">
2
+ <div class="unit size1of3">
3
+ <div class="unit size1of2">
4
+ <div class="prm">
5
+ <%= select_tag dynamic_filter, :type, MongodbLogger::ServerModel::AdditionalFilter::VAR_TYPES, :class => "filter_type", :rel => url_path("changed_filter") %>
6
+ </div> <!-- prm -->
7
+ </div> <!-- unit -->
8
+ <div class="unit size1of2">
9
+ <div class="prm">
10
+ <%= text_field_tag dynamic_filter, :key, :placeholder => "key" %>
11
+ </div> <!-- prm -->
12
+ </div> <!-- unit -->
13
+ </div>
14
+ <div class="unit size1of3">
15
+ <div class="unit size1of2">
16
+ <div class="prm">
17
+ <%= select_tag dynamic_filter, :condition, MongodbLogger::ServerModel::AdditionalFilter::VAR_TYPE_CONDITIONS[dynamic_filter.get_type_index], :class => "filter_conditions" %>
18
+ </div> <!-- prm -->
19
+ </div>
20
+ <div class="unit size1of2">
21
+ <div class="prm filter_values">
22
+ <% if dynamic_filter.is_selected_values? %>
23
+ <%= select_tag dynamic_filter, :value, dynamic_filter.selected_values %>
24
+ <% else %>
25
+ <%= text_field_tag dynamic_filter, :value, :placeholder => "value", :class => dynamic_filter.type %>
26
+ <% end %>
27
+ </div> <!-- prm -->
28
+ </div>
29
+ </div>
30
+ <div class="unit size1of3">
31
+ <a href="#" class="close_more_filter">Close</a>
32
+ </div> <!-- unit -->
33
+
34
+ </div>
@@ -0,0 +1,8 @@
1
+ <tr class="log_info" data-url="<%=h url_path("log_info/#{log['_id']}") %>">
2
+ <td class="td-time"><span class="<%= log['is_exception'] ? "error" : "notice" %>"></span> <%=h log['request_time']%></td>
3
+ <td class="td-controller"><%=h log['controller']%></td>
4
+ <td class="td-action"><%=h log['action']%></td>
5
+ <td class="url_log"><%=h log['method']%></td>
6
+ <td class="td-ip"><%=h log['ip']%></td>
7
+ <td class="td-runtime"><%=h log['runtime']%></td>
8
+ </tr>
@@ -0,0 +1,27 @@
1
+ <div class="pas">
2
+ <div class="unit-right">
3
+ <a href="<%=h url_path("log/#{log_info['_id']}") %>" data-pjax='#main_pjax' class="button small grey">More Info</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 wrap_text">
7
+ <% if log_info['is_exception'] && log_info['messages'] && log_info['messages']['error'] %>
8
+ Error: <%=h string_from_log_message(log_info['messages']['error']).truncate(300, :separator => ' ') %>
9
+ <% elsif log_info['messages'] && log_info['messages']['info'] %>
10
+ Info: <%=h string_from_log_message(log_info['messages']['info']).truncate(300, :separator => ' ') %>
11
+ <% end %>
12
+ </div> <!-- phs -->
13
+ <h2 class="phs mtm mbs">URL (method: <%=h log_info['method'] %>)</h2>
14
+ <div class="phs wrap_text">
15
+ <a href="<%=h log_info['url']%>" target="_blank"><%=h log_info['url']%></a>
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
+ <a href="http://www.infosniper.net/index.php?ip_address=<%=h log_info['ip']%>&map_source=1&overview_map=1&lang=1&map_type=1&zoom_level=7" target="_blank">
24
+ <%=h log_info['ip']%>
25
+ </a>
26
+ </div> <!-- phs -->
27
+ </div> <!-- pas -->
@@ -0,0 +1,15 @@
1
+ <li class="outer pvs phm">
2
+ <div class="unit size1of5">
3
+ <span class="pale">Messages:</span>
4
+ </div> <!-- unit -->
5
+ <div class="unit size4of5">
6
+ <ul class="message_tabs">
7
+ <% message_tabs.each do |key, val| %>
8
+ <li class='message_tab <%='active' if key == message_tabs.keys.first %>' data-tab='tab_<%=key %>'><%=key.capitalize %></li>
9
+ <% end %>
10
+ </ul>
11
+ <% message_tabs.each do |key, val| %>
12
+ <pre class="tab_<%=key %> tab_content <%='hidden' unless key == message_tabs.keys.first %>"><code><%=h string_from_log_message(val) %></code></pre>
13
+ <% end %>
14
+ </div> <!-- unit -->
15
+ </li>
@@ -0,0 +1,4 @@
1
+ <ul class="unit">
2
+ <li <%= class_if_current(url_path("overview")) %>><a href="<%=h url_path("overview") %>" data-pjax='#main_pjax'>Logs</a></li>
3
+ <li <%= class_if_current(url_path("analytics")) %>><a href="<%=h url_path("analytics") %>" data-pjax='#main_pjax'>Analytics</a></li>
4
+ </ul>
@@ -0,0 +1,13 @@
1
+ <div id="tail_logs_block">
2
+ <div class="initial">
3
+ <a id="tail_logs_link" href="#" data-url="<%=h url_path("tail_logs") %>" class="button mts mrs">
4
+ <span class="start" data-url="<%=h url_path("tail_logs") %>">Tail</span>
5
+ </a>
6
+ </div>
7
+ <div class="info">
8
+ <span id="tail_logs_time" class="logs-time mrs"></span>
9
+ <a id="tail_logs_stop_link" href="#" class="button negative mts mrs">
10
+ <span class="stop">Stop</span>
11
+ </a>
12
+ </div>
13
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="topline">
2
+ <%= partial(:"shared/tabs") %>
3
+ <div class="unit-right">
4
+ <% yield_content :right_top_panel %>
5
+ </div> <!-- unit-right -->
6
+ <div id="ajax_loader"><img src="<%=u 'images/spinner.gif'%>" alt="loading..."></div>
7
+ </div> <!-- topline -->
@@ -0,0 +1,105 @@
1
+ <%= partial(:"shared/top_panel") %>
2
+
3
+ <div class="unit-right">
4
+ <div class="pam">
5
+ <a href="<%=h url_path("overview") %>" data-pjax='#main_pjax' class="button small grey">Back</a>
6
+ </div> <!-- pam -->
7
+ </div> <!-- unit-right -->
8
+ <h1 class="pam">Log #<%=h @log['_id'] %></h1>
9
+ <ul class="list">
10
+ <li class="outer pvs phm">
11
+ <div class="unit size1of5">
12
+ <span class="pale">Url:</span>
13
+ </div> <!-- unit -->
14
+ <div class="unit size4of5">
15
+ <a href="<%=h @log['url']%>" target="_blank"><%=h @log['url']%></a>
16
+ </div> <!-- unit -->
17
+ </li>
18
+ <li class="outer pvs phm">
19
+ <div class="unit size1of5">
20
+ <span class="pale">Controller:</span>
21
+ </div> <!-- unit -->
22
+ <div class="unit size4of5">
23
+ <%=h @log['controller'] %>
24
+ </div> <!-- unit -->
25
+ </li>
26
+ <li class="outer pvs phm">
27
+ <div class="unit size1of5">
28
+ <span class="pale">Action:</span>
29
+ </div> <!-- unit -->
30
+ <div class="unit size4of5">
31
+ <%=h @log['action'] %>
32
+ </div> <!-- unit -->
33
+ </li>
34
+ <li class="outer pvs phm">
35
+ <div class="unit size1of5">
36
+ <span class="pale">Method:</span>
37
+ </div> <!-- unit -->
38
+ <div class="unit size4of5">
39
+ <%=h @log['method'] %>
40
+ </div> <!-- unit -->
41
+ </li>
42
+ <li class="outer pvs phm">
43
+ <div class="unit size1of5">
44
+ <span class="pale">IP:</span>
45
+ </div> <!-- unit -->
46
+ <div class="unit size4of5">
47
+ <a href="http://www.infosniper.net/index.php?ip_address=<%=h @log['ip'] %>&map_source=1&overview_map=1&lang=1&map_type=1&zoom_level=7" target="_blank">
48
+ <%=h @log['ip'] %>
49
+ </a>
50
+ </div> <!-- unit -->
51
+ </li>
52
+ <li class="outer pvs phm">
53
+ <div class="unit size1of5">
54
+ <span class="pale">Request Time:</span>
55
+ </div> <!-- unit -->
56
+ <div class="unit size4of5">
57
+ <%=h @log['request_time'] %>
58
+ </div> <!-- unit -->
59
+ </li>
60
+ <li class="outer pvs phm">
61
+ <div class="unit size1of5">
62
+ <span class="pale">Runtime:</span>
63
+ </div> <!-- unit -->
64
+ <div class="unit size4of5">
65
+ <%=h @log['runtime'] %> ms
66
+ </div> <!-- unit -->
67
+ </li>
68
+ <li class="outer pvs phm">
69
+ <div class="unit size1of5">
70
+ <span class="pale">Application Name:</span>
71
+ </div> <!-- unit -->
72
+ <div class="unit size4of5">
73
+ <%=h @log['application_name'] %>
74
+ </div> <!-- unit -->
75
+ </li>
76
+ <li class="outer pvs phm">
77
+ <div class="unit size1of5">
78
+ <span class="pale">Path:</span>
79
+ </div> <!-- unit -->
80
+ <div class="unit size4of5">
81
+ <%=h @log['path'] %>
82
+ </div> <!-- unit -->
83
+ </li>
84
+ <li class="outer pvs phm">
85
+ <div class="unit size1of5">
86
+ <span class="pale">Params:</span>
87
+ </div> <!-- unit -->
88
+ <div class="unit size4of5">
89
+ <pre><code><%= pretty_hash(@log['params']) %></code></pre>
90
+ </div> <!-- unit -->
91
+ </li>
92
+ <% if @log['messages'] && !@log['messages'].blank? && @log['messages'].is_a?(Hash) %>
93
+ <%= partial(:"shared/message_tabs", :object => @log['messages']) %>
94
+ <% end %>
95
+ <% unless meta_informations(@log).blank? %>
96
+ <li class="outer pvs phm">
97
+ <div class="unit size1of5">
98
+ <span class="pale">Meta informations:</span>
99
+ </div> <!-- unit -->
100
+ <div class="unit size4of5">
101
+ <pre><code><%= pretty_hash(meta_informations(@log)) %></code></pre>
102
+ </div> <!-- unit -->
103
+ </li>
104
+ <% end %>
105
+ </ul>