mongodb_logger 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/SUPPORTED_RAILS_VERSIONS +3 -1
- data/config.ru +1 -1
- data/examples/server_config.yml +1 -0
- data/lib/mongodb_logger/logger.rb +2 -1
- data/lib/mongodb_logger/server/coffee/{application.coffee → logs.coffee} +59 -8
- data/lib/mongodb_logger/server/content_for.rb +58 -0
- data/lib/mongodb_logger/server/model/additional_filter.rb +70 -0
- data/lib/mongodb_logger/server/model/filter.rb +52 -32
- 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/javascripts/{application.js → logs.js} +68 -10
- data/lib/mongodb_logger/server/public/javascripts/vendors/highlight.pack.js +1 -0
- data/lib/mongodb_logger/server/public/javascripts/{jquery-1.7.min.js → vendors/jquery-1.7.min.js} +0 -0
- data/lib/mongodb_logger/server/public/javascripts/{jquery-ui-1.8.16.effects.min.js → vendors/jquery-ui-1.8.16.effects.min.js} +0 -0
- data/lib/mongodb_logger/server/public/javascripts/vendors/jquery.pjax.js +264 -0
- data/lib/mongodb_logger/server/public/stylesheets/all.css +2 -1
- data/lib/mongodb_logger/server/public/stylesheets/group-buttons.css +27 -29
- data/lib/mongodb_logger/server/public/stylesheets/group-forms.css +1 -1
- data/lib/mongodb_logger/server/public/stylesheets/group-tables.css +29 -1
- data/lib/mongodb_logger/server/public/stylesheets/highlight/zenburn.css +115 -0
- data/lib/mongodb_logger/server/public/stylesheets/layout.css +32 -10
- data/lib/mongodb_logger/server/public/stylesheets/library.css +169 -19
- data/lib/mongodb_logger/server/view_helpers.rb +35 -0
- data/lib/mongodb_logger/server/views/layout.erb +31 -7
- data/lib/mongodb_logger/server/views/overview.erb +40 -51
- data/lib/mongodb_logger/server/views/shared/_dynamic_filter.erb +30 -0
- data/lib/mongodb_logger/server/views/shared/_log.erb +6 -6
- data/lib/mongodb_logger/server/views/shared/_log_info.erb +9 -7
- data/lib/mongodb_logger/server/views/shared/_message_tabs.erb +15 -0
- data/lib/mongodb_logger/server/views/shared/_tabs.erb +2 -2
- 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 +31 -15
- data/lib/mongodb_logger/server.rb +17 -3
- data/lib/mongodb_logger/version.rb +1 -1
- data/mongodb_logger.gemspec +9 -9
- metadata +47 -36
@@ -55,30 +55,32 @@ a:hover, a:active {
|
|
55
55
|
}
|
56
56
|
|
57
57
|
.notice {
|
58
|
+
position: relative;
|
59
|
+
top: 1px;
|
58
60
|
width: 10px;
|
59
61
|
height: 10px;
|
60
62
|
display: inline-block;
|
61
|
-
margin-right:
|
62
|
-
margin-left: -
|
63
|
-
|
64
|
-
}
|
65
|
-
|
66
|
-
.arrow-down {
|
67
|
-
padding-right: 15px;
|
68
|
-
background: url(../images/arrow-down.png) no-repeat 100% 50%;
|
69
|
-
}
|
70
|
-
|
71
|
-
.notice.new {
|
72
|
-
background: url(../images/newlog.png) no-repeat 0 0;
|
63
|
+
margin-right: 5px;
|
64
|
+
margin-left: -17px;
|
65
|
+
/* background: url(../images/success.png) no-repeat 0 0; */
|
73
66
|
}
|
74
67
|
|
75
68
|
.error {
|
69
|
+
position: relative;
|
70
|
+
top: 1px;
|
76
71
|
width: 10px;
|
77
72
|
height: 10px;
|
78
73
|
display: inline-block;
|
74
|
+
margin-right: 5px;
|
75
|
+
margin-left: -17px;
|
79
76
|
background: url(../images/failure.png) no-repeat 0 0;
|
80
77
|
}
|
81
78
|
|
79
|
+
.arrow-down {
|
80
|
+
padding-right: 15px;
|
81
|
+
background: url(../images/arrow-down.png) no-repeat 100% 50%;
|
82
|
+
}
|
83
|
+
|
82
84
|
code {
|
83
85
|
display: block;
|
84
86
|
overflow: auto;
|
@@ -128,6 +130,7 @@ code {
|
|
128
130
|
line-height: 24px;
|
129
131
|
font-weight: bold;
|
130
132
|
cursor: pointer;
|
133
|
+
text-shadow: 0 1px 0 #fff;
|
131
134
|
border-bottom: 1px solid #bbb;
|
132
135
|
background: rgb(238,238,238);
|
133
136
|
background: -moz-linear-gradient(top, rgba(238,238,238,1) 0%, rgba(211,211,211,1) 100%);
|
@@ -142,14 +145,14 @@ code {
|
|
142
145
|
|
143
146
|
.logs-time {
|
144
147
|
width: 200px;
|
145
|
-
padding: 7px 15px;
|
148
|
+
padding: 7px 15px 7px 30px;
|
146
149
|
-moz-box-sizing: border-box;
|
147
150
|
-webkit-box-sizing: border-box;
|
148
151
|
box-sizing: border-box;
|
149
152
|
font: 12px arial, sans-serif;
|
150
153
|
vertical-align: middle;
|
151
154
|
border: 1px solid #bbb;
|
152
|
-
background
|
155
|
+
background: #fff url(../images/date.png) no-repeat 9px 50%;
|
153
156
|
border-radius: 3px;
|
154
157
|
box-shadow: 0 1px 2px #e6e6e6 inset, 0 1px 0 #fff;
|
155
158
|
}
|
@@ -163,11 +166,158 @@ code {
|
|
163
166
|
display: none;
|
164
167
|
}
|
165
168
|
|
166
|
-
#logs_list{
|
167
|
-
table-layout: fixed;
|
168
|
-
}
|
169
|
-
|
170
169
|
|
171
170
|
.wrap_text {
|
172
171
|
word-wrap: break-word;
|
173
|
-
}
|
172
|
+
}
|
173
|
+
|
174
|
+
li.message_tab {
|
175
|
+
cursor: pointer;
|
176
|
+
cursor: hand;
|
177
|
+
}
|
178
|
+
|
179
|
+
.tab_content.hidden {
|
180
|
+
display:none;
|
181
|
+
}
|
182
|
+
|
183
|
+
|
184
|
+
.message_tabs {
|
185
|
+
height: 30px;
|
186
|
+
position: relative;
|
187
|
+
background: rgb(238,238,238);
|
188
|
+
border: 1px solid #ADB4B8;
|
189
|
+
background: -moz-linear-gradient(top, rgba(238,238,238,1) 0%, rgba(204,204,204,1) 100%);
|
190
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(238,238,238,1)), color-stop(100%,rgba(204,204,204,1)));
|
191
|
+
background: -webkit-linear-gradient(top, rgba(238,238,238,1) 0%,rgba(204,204,204,1) 100%);
|
192
|
+
background: -o-linear-gradient(top, rgba(238,238,238,1) 0%,rgba(204,204,204,1) 100%);
|
193
|
+
background: -ms-linear-gradient(top, rgba(238,238,238,1) 0%,rgba(204,204,204,1) 100%);
|
194
|
+
background: linear-gradient(top, rgba(238,238,238,1) 0%,rgba(204,204,204,1) 100%);
|
195
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#cccccc',GradientType=0 );
|
196
|
+
}
|
197
|
+
|
198
|
+
.message_tabs li.message_tab {
|
199
|
+
float: left;
|
200
|
+
padding: 0 20px;
|
201
|
+
height: 30px;
|
202
|
+
line-height: 30px;
|
203
|
+
font-size: 14px;
|
204
|
+
border-right: 1px solid #bbb;
|
205
|
+
border-top: 0;
|
206
|
+
color: #333;
|
207
|
+
background: transparent;
|
208
|
+
}
|
209
|
+
|
210
|
+
.message_tabs li:hover {
|
211
|
+
background: -moz-linear-gradient(top, rgba(255,255,255,0.62) 0%, rgba(23,146,212,0.5) 100%);
|
212
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.62)), color-stop(100%,rgba(23,146,212,0.5)));
|
213
|
+
background: -webkit-linear-gradient(top, rgba(255,255,255,0.62) 0%,rgba(23,146,212,0.5) 100%);
|
214
|
+
background: -o-linear-gradient(top, rgba(255,255,255,0.62) 0%,rgba(23,146,212,0.5) 100%);
|
215
|
+
background: -ms-linear-gradient(top, rgba(255,255,255,0.62) 0%,rgba(23,146,212,0.5) 100%);
|
216
|
+
background: linear-gradient(top, rgba(255,255,255,0.62) 0%,rgba(23,146,212,0.5) 100%);
|
217
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9effffff', endColorstr='#801792d4',GradientType=0 );
|
218
|
+
|
219
|
+
}
|
220
|
+
|
221
|
+
.message_tabs li.active {
|
222
|
+
background: #f4f4f4;
|
223
|
+
box-shadow: 0 2px 5px #ccc inset;
|
224
|
+
text-shadow: 0 1px 0 #fff;
|
225
|
+
}
|
226
|
+
|
227
|
+
a[target="_blank"] {
|
228
|
+
display: inline-block;
|
229
|
+
background: url(../images/external.png) no-repeat 0 3px;
|
230
|
+
padding-left: 17px;
|
231
|
+
}
|
232
|
+
|
233
|
+
.not-implemented {
|
234
|
+
opacity: 0.3;
|
235
|
+
cursor: default;
|
236
|
+
}
|
237
|
+
|
238
|
+
.not-implemented:hover {
|
239
|
+
background: none !important;
|
240
|
+
}
|
241
|
+
|
242
|
+
.log-num {
|
243
|
+
padding: 3px 7px 1px;
|
244
|
+
background-color: #5E3B22;
|
245
|
+
font-size: 11px;
|
246
|
+
color: #fff;
|
247
|
+
border-radius: 20px;
|
248
|
+
box-shadow: 0 2px 3px rgba(0,0,0, 0.4) inset, 0 1px 0 rgba(255,255,255, 0.2);
|
249
|
+
}
|
250
|
+
|
251
|
+
.progress {
|
252
|
+
height: 14px;
|
253
|
+
position: absolute;
|
254
|
+
bottom: 4px;
|
255
|
+
left: 10px;
|
256
|
+
right: 10px;
|
257
|
+
font-size: 10px;
|
258
|
+
background: rgb(230,234,220);
|
259
|
+
background: -moz-linear-gradient(top, rgba(230,234,220,1) 0%, rgba(223,234,197,1) 100%);
|
260
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(230,234,220,1)), color-stop(100%,rgba(223,234,197,1)));
|
261
|
+
background: -webkit-linear-gradient(top, rgba(230,234,220,1) 0%,rgba(223,234,197,1) 100%);
|
262
|
+
background: -o-linear-gradient(top, rgba(230,234,220,1) 0%,rgba(223,234,197,1) 100%);
|
263
|
+
background: -ms-linear-gradient(top, rgba(230,234,220,1) 0%,rgba(223,234,197,1) 100%);
|
264
|
+
background: linear-gradient(top, rgba(230,234,220,1) 0%,rgba(223,234,197,1) 100%);
|
265
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e6eadc', endColorstr='#dfeac5',GradientType=0 );
|
266
|
+
border-radius: 3px;
|
267
|
+
box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset;
|
268
|
+
}
|
269
|
+
|
270
|
+
.used {
|
271
|
+
height: 14px;
|
272
|
+
position: absolute;
|
273
|
+
left: 0;
|
274
|
+
top: 0;
|
275
|
+
border-radius: 3px;
|
276
|
+
background: rgb(191,210,85);
|
277
|
+
background: -moz-linear-gradient(top, rgba(191,210,85,1) 0%, rgba(142,185,42,1) 50%, rgba(114,170,0,1) 51%, rgba(158,203,45,1) 100%);
|
278
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(191,210,85,1)), color-stop(50%,rgba(142,185,42,1)), color-stop(51%,rgba(114,170,0,1)), color-stop(100%,rgba(158,203,45,1)));
|
279
|
+
background: -webkit-linear-gradient(top, rgba(191,210,85,1) 0%,rgba(142,185,42,1) 50%,rgba(114,170,0,1) 51%,rgba(158,203,45,1) 100%);
|
280
|
+
background: -o-linear-gradient(top, rgba(191,210,85,1) 0%,rgba(142,185,42,1) 50%,rgba(114,170,0,1) 51%,rgba(158,203,45,1) 100%);
|
281
|
+
background: -ms-linear-gradient(top, rgba(191,210,85,1) 0%,rgba(142,185,42,1) 50%,rgba(114,170,0,1) 51%,rgba(158,203,45,1) 100%);
|
282
|
+
background: linear-gradient(top, rgba(191,210,85,1) 0%,rgba(142,185,42,1) 50%,rgba(114,170,0,1) 51%,rgba(158,203,45,1) 100%);
|
283
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bfd255', endColorstr='#9ecb2d',GradientType=0 );
|
284
|
+
|
285
|
+
}
|
286
|
+
|
287
|
+
.size {
|
288
|
+
font-size: 10px;
|
289
|
+
position: absolute;
|
290
|
+
right: 5px;
|
291
|
+
top: 3px;
|
292
|
+
z-index: 2;
|
293
|
+
color: #000;
|
294
|
+
text-shadow: none;
|
295
|
+
}
|
296
|
+
|
297
|
+
.add {
|
298
|
+
color: #333;
|
299
|
+
text-decoration: none;
|
300
|
+
}
|
301
|
+
|
302
|
+
.warning {
|
303
|
+
position: absolute;
|
304
|
+
bottom: 1px;
|
305
|
+
padding: 3px 0;
|
306
|
+
clear: both;
|
307
|
+
width: 100%;
|
308
|
+
font-size: 10px;
|
309
|
+
background-color: #FCF6C4;
|
310
|
+
color: black;
|
311
|
+
text-shadow: none;
|
312
|
+
}
|
313
|
+
|
314
|
+
.warning p {
|
315
|
+
padding: 0 10px;
|
316
|
+
}
|
317
|
+
|
318
|
+
a.more {
|
319
|
+
padding-left: 0;
|
320
|
+
background: none;
|
321
|
+
font-weight: bold;
|
322
|
+
}
|
323
|
+
|
@@ -1,6 +1,41 @@
|
|
1
1
|
# view helpers
|
2
2
|
module Sinatra::ViewHelpers
|
3
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
|
+
# TODO: improve this
|
15
|
+
def number_to_human_size(number, precision = 2)
|
16
|
+
number = begin
|
17
|
+
Float(number)
|
18
|
+
rescue ArgumentError, TypeError
|
19
|
+
return number
|
20
|
+
end
|
21
|
+
case
|
22
|
+
when number.to_i == 1 then
|
23
|
+
"1 Byte"
|
24
|
+
when number < 1024 then
|
25
|
+
"%d Bytes" % number
|
26
|
+
when number < 1048576 then
|
27
|
+
"%.#{precision}f KB" % (number / 1024)
|
28
|
+
when number < 1073741824 then
|
29
|
+
"%.#{precision}f MB" % (number / 1048576)
|
30
|
+
when number < 1099511627776 then
|
31
|
+
"%.#{precision}f GB" % (number / 1073741824)
|
32
|
+
else
|
33
|
+
"%.#{precision}f TB" % (number / 1099511627776)
|
34
|
+
end.sub(/([0-9]\.\d*?)0+ /, '\1 ' ).sub(/\. /,' ')
|
35
|
+
rescue
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
4
39
|
def text_field_tag(object, name, options = {})
|
5
40
|
value = ""
|
6
41
|
value = options.delete(:value) if options[:value]
|
@@ -1,27 +1,51 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html>
|
3
3
|
<head>
|
4
|
-
<title>MongoDB
|
4
|
+
<title>MongoDB Logger</title>
|
5
5
|
<link href="<%=u 'stylesheets/all.css' %>" media="screen" rel="stylesheet" type="text/css">
|
6
|
-
|
7
|
-
<script src="<%=u 'javascripts/jquery-
|
8
|
-
<script src="<%=u 'javascripts/
|
6
|
+
|
7
|
+
<script src="<%=u 'javascripts/vendors/jquery-1.7.min.js' %>" type="text/javascript"></script>
|
8
|
+
<script src="<%=u 'javascripts/vendors/jquery-ui-1.8.16.effects.min.js' %>" type="text/javascript"></script>
|
9
|
+
<script src="<%=u 'javascripts/vendors/jquery.pjax.js' %>" type="text/javascript"></script>
|
10
|
+
<script src="<%=u 'javascripts/vendors/highlight.pack.js' %>" type="text/javascript"></script>
|
11
|
+
<script src="<%=u 'javascripts/logs.js' %>" type="text/javascript"></script>
|
9
12
|
</head>
|
10
13
|
<body>
|
11
14
|
<div class="page">
|
12
15
|
<div class="header">
|
13
16
|
<div class="wrapper">
|
14
|
-
<
|
17
|
+
<div class="unit-right stats">
|
18
|
+
<div class="unit size2of3">
|
19
|
+
<div class="ptxs pls"><strong>DB:</strong> <%=h @db.name %></div>
|
20
|
+
<div class="pls"><strong>Collection:</strong> <%=h @collection.name %></div>
|
21
|
+
</div> <!-- unit -->
|
22
|
+
<div class="unit size1of3">
|
23
|
+
<div class="pts prs txtR">
|
24
|
+
<span id="db_collection_count" class="log-num"><%=h @collection_stats["count"] %></span></div>
|
25
|
+
</div> <!-- unit -->
|
26
|
+
<% if @collection_stats["capped"] && 1 == @collection_stats["capped"] %>
|
27
|
+
|
28
|
+
<div class="progress">
|
29
|
+
<span class="size"><%=h number_to_human_size(@collection_stats["size"]) %> of <%=h number_to_human_size(@collection_stats["storageSize"]) %></span>
|
30
|
+
<div class="used" style="width: <%=((@collection_stats["size"].to_f / @collection_stats["storageSize"].to_f) * 100).round%>%"></div>
|
31
|
+
</div> <!-- progress -->
|
32
|
+
|
33
|
+
<% else %>
|
34
|
+
<div class="warning"><p>You do not use capped collection for logs.
|
35
|
+
<a href="http://www.mongodb.org/display/DOCS/Capped+Collections" target="_blank" class="more">More info.</a></p>
|
36
|
+
</div>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
39
|
+
<a href="<%=h url_path("overview") %>" class="logo" data-pjax='#main_pjax'><img src="<%=u 'images/logo.png'%>" alt="MongoDB Logger"></a> <span class="logger ">logger</span>
|
15
40
|
</div> <!-- wrapper -->
|
16
41
|
</div> <!-- header -->
|
17
42
|
<div class="content">
|
18
43
|
<div class="wrapper">
|
19
|
-
<div class="mainbox">
|
44
|
+
<div id="main_pjax" class="mainbox">
|
20
45
|
<%= yield %>
|
21
46
|
</div> <!-- mainbox -->
|
22
47
|
</div> <!-- wrapper -->
|
23
48
|
</div> <!-- content -->
|
24
|
-
|
25
49
|
</div>
|
26
50
|
|
27
51
|
</body>
|
@@ -1,23 +1,8 @@
|
|
1
|
-
|
2
|
-
<%= partial(:"shared/
|
3
|
-
|
4
|
-
|
5
|
-
|
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" class="logs-time mrs"></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
|
-
|
19
|
-
<div id="ajax_loader"><img src="<%=u 'images/spinner.gif'%>" alt="loading..."></div>
|
20
|
-
</div> <!-- topline -->
|
1
|
+
<% content_for :right_top_panel do %>
|
2
|
+
<%= partial(:"shared/tail_panel") %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<%= partial(:"shared/top_panel") %>
|
21
6
|
|
22
7
|
<div class="outer">
|
23
8
|
<div class="unit size3of4">
|
@@ -38,43 +23,47 @@
|
|
38
23
|
</div>
|
39
24
|
<div class="unit size1of3">
|
40
25
|
<div class="unit size1of2">
|
41
|
-
|
42
|
-
|
43
|
-
|
26
|
+
<div class="prm">
|
27
|
+
<%= select_tag @filter, :limit, [50, 100, 200, 500, 1000] %>
|
28
|
+
</div> <!-- prm -->
|
29
|
+
</div> <!-- unit -->
|
44
30
|
<div class="unit size1of2">
|
45
|
-
<div class="
|
46
|
-
<%=
|
47
|
-
</div>
|
48
|
-
</div> <!-- unit -->
|
49
|
-
</div>
|
50
|
-
</div> <!-- outer -->
|
51
|
-
<div class="outer mvs">
|
52
|
-
<div class="unit size1of3">
|
53
|
-
<div class="unit size1of2">
|
54
|
-
<div class="prm">
|
55
|
-
<%= text_field_tag @filter, :application_name, :placeholder => "Application Name" %>
|
31
|
+
<div class="prm">
|
32
|
+
<%= text_field_tag @filter, :application_name, :placeholder => "Application Name" %>
|
33
|
+
</div>
|
56
34
|
</div>
|
57
35
|
</div>
|
58
|
-
<div class="unit
|
59
|
-
<div class="
|
60
|
-
|
36
|
+
<div class="unit size1of3">
|
37
|
+
<div class="unit size1of2">
|
38
|
+
<div class="prm">
|
39
|
+
<%= text_field_tag @filter, :ip, :placeholder => "IP" %>
|
40
|
+
</div>
|
61
41
|
</div>
|
62
|
-
|
63
|
-
</div>
|
64
|
-
<div class="unit size1of3">
|
65
|
-
<div class="unit size1of2">
|
66
|
-
<div class="prm ptxs">
|
42
|
+
<div class="unit size1of2">
|
67
43
|
<%= check_box_tag @filter, :is_exception %>
|
68
|
-
<%= label_tag @filter, :is_exception, "
|
69
|
-
</div>
|
70
|
-
</div>
|
71
|
-
<div class="unit size1of2">
|
72
|
-
<div class="ptxs plm">
|
73
|
-
<a href="<%=h url_path("overview") %>">Clear</a>
|
74
|
-
</div> <!-- ptxs -->
|
44
|
+
<%= label_tag @filter, :is_exception, "Exceptions" %>
|
45
|
+
</div> <!-- unit -->
|
75
46
|
</div> <!-- unit -->
|
76
|
-
</div> <!-- unit -->
|
77
47
|
</div> <!-- outer -->
|
48
|
+
|
49
|
+
<div class="outer">
|
50
|
+
<ul id="more_filter_list">
|
51
|
+
<% @filter.more_filters.each_with_index do |f_filter, index| %>
|
52
|
+
<li>
|
53
|
+
<%= partial(:"shared/dynamic_filter", :object => f_filter) %>
|
54
|
+
</li>
|
55
|
+
<% end %>
|
56
|
+
</ul>
|
57
|
+
<div class="mbs">
|
58
|
+
<a id="add_more_filter" href="<%=h url_path("add_filter") %>" class="add">+ Add Filter</a>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
</div> <!-- outer -->
|
62
|
+
|
63
|
+
<div class="outer">
|
64
|
+
<%= submit_tag :submit, "Filter", :class => "button primary mrs" %> <a href="<%=h url_path("overview") %>">Clear</a>
|
65
|
+
</div> <!-- outer -->
|
66
|
+
|
78
67
|
</form>
|
79
68
|
</div> <!-- filter -->
|
80
69
|
|
@@ -86,8 +75,8 @@
|
|
86
75
|
<th>Received</th>
|
87
76
|
<th>Controller</th>
|
88
77
|
<th>Action</th>
|
78
|
+
<th>Method</th>
|
89
79
|
<th>IP</th>
|
90
|
-
<th>URL</th>
|
91
80
|
<th>Runtime</th>
|
92
81
|
</tr>
|
93
82
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="outer mvs">
|
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 %>
|
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::DEFAULT_CONDITIONS %>
|
18
|
+
</div> <!-- prm -->
|
19
|
+
</div>
|
20
|
+
<div class="unit size1of2">
|
21
|
+
<div class="prm">
|
22
|
+
<%= text_field_tag dynamic_filter, :value, :placeholder => "value" %>
|
23
|
+
</div> <!-- prm -->
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
<div class="unit size1of3">
|
27
|
+
<a href="#" class="close_more_filter">Close</a>
|
28
|
+
</div> <!-- unit -->
|
29
|
+
|
30
|
+
</div>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<tr class="log_info" data-url="<%=h url_path("log_info/#{log['_id']}") %>">
|
2
|
-
<td><span class="<%= log['is_exception'] ? "error" : "notice" %>"></span> <%=h log['request_time']%></td>
|
3
|
-
<td><%=h log['controller']%></td>
|
4
|
-
<td><%=h log['action']%></td>
|
5
|
-
<td><%=h log['
|
6
|
-
<td class="
|
7
|
-
<td><%=h log['runtime']%></td>
|
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
8
|
</tr>
|
@@ -1,18 +1,18 @@
|
|
1
1
|
<div class="pas">
|
2
|
-
<div class="unit-right
|
3
|
-
<a href="<%=h url_path("log/#{log_info['_id']}") %>"
|
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
4
|
</div> <!-- unit-right -->
|
5
5
|
<h2 class="phs mvs"><span class="<%= log_info['is_exception'] ? 'failure' : 'success' %>">Message</span></h2>
|
6
6
|
<div class="phs wrap_text">
|
7
|
-
<% if log_info['is_exception'] %>
|
7
|
+
<% if log_info['is_exception'] && log_info['messages'] && log_info['messages']['error'] %>
|
8
8
|
Error: <%= log_info['messages']['error'].join("\n").truncate(300, :separator => ' ') %>
|
9
|
-
<%
|
9
|
+
<% elsif log_info['messages'] && log_info['messages']['info'] %>
|
10
10
|
Info: <%= log_info['messages']['info'].join("\n").truncate(300, :separator => ' ') %>
|
11
11
|
<% end %>
|
12
12
|
</div> <!-- phs -->
|
13
|
-
<h2 class="phs mtm mbs">URL</h2>
|
13
|
+
<h2 class="phs mtm mbs">URL (method: <%=h log_info['method'] %>)</h2>
|
14
14
|
<div class="phs wrap_text">
|
15
|
-
<%=h log_info['url']%>
|
15
|
+
<a href="<%=h log_info['url']%>" target="_blank"><%=h log_info['url']%></a>
|
16
16
|
</div> <!-- phs -->
|
17
17
|
<h2 class="phs mtm mbs">Received</h2>
|
18
18
|
<div class="phs">
|
@@ -20,6 +20,8 @@
|
|
20
20
|
</div> <!-- phs -->
|
21
21
|
<h2 class="phs mtm mbs">IP</h2>
|
22
22
|
<div class="phs">
|
23
|
-
|
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>
|
24
26
|
</div> <!-- phs -->
|
25
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 (val.is_a?(Array) ? val.join("\n") : val) %></code></pre>
|
13
|
+
<% end %>
|
14
|
+
</div> <!-- unit -->
|
15
|
+
</li>
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<ul class="unit">
|
2
|
-
<li
|
3
|
-
<li><a href="#">Graphs</a></li>
|
2
|
+
<li <%= class_if_current(url_path("overview")) %>><a href="<%=h url_path("overview") %>" data-pjax='#main_pjax'>Logs</a></li>
|
3
|
+
<li><a href="#" title="Comming soon..." class="not-implemented">Graphs</a></li>
|
4
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>
|