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
@@ -0,0 +1,264 @@
|
|
1
|
+
// jquery.pjax.js
|
2
|
+
// copyright chris wanstrath
|
3
|
+
// https://github.com/defunkt/jquery-pjax
|
4
|
+
|
5
|
+
(function($){
|
6
|
+
|
7
|
+
// When called on a link, fetches the href with ajax into the
|
8
|
+
// container specified as the first parameter or with the data-pjax
|
9
|
+
// attribute on the link itself.
|
10
|
+
//
|
11
|
+
// Tries to make sure the back button and ctrl+click work the way
|
12
|
+
// you'd expect.
|
13
|
+
//
|
14
|
+
// Accepts a jQuery ajax options object that may include these
|
15
|
+
// pjax specific options:
|
16
|
+
//
|
17
|
+
// container - Where to stick the response body. Usually a String selector.
|
18
|
+
// $(container).html(xhr.responseBody)
|
19
|
+
// push - Whether to pushState the URL. Defaults to true (of course).
|
20
|
+
// replace - Want to use replaceState instead? That's cool.
|
21
|
+
//
|
22
|
+
// For convenience the first parameter can be either the container or
|
23
|
+
// the options object.
|
24
|
+
//
|
25
|
+
// Returns the jQuery object
|
26
|
+
$.fn.pjax = function( container, options ) {
|
27
|
+
if ( options )
|
28
|
+
options.container = container
|
29
|
+
else
|
30
|
+
options = $.isPlainObject(container) ? container : {container:container}
|
31
|
+
|
32
|
+
// We can't persist $objects using the history API so we must use
|
33
|
+
// a String selector. Bail if we got anything else.
|
34
|
+
if ( options.container && typeof options.container !== 'string' ) {
|
35
|
+
throw "pjax container must be a string selector!"
|
36
|
+
return false
|
37
|
+
}
|
38
|
+
|
39
|
+
return this.live('click', function(event){
|
40
|
+
// Middle click, cmd click, and ctrl click should open
|
41
|
+
// links in a new tab as normal.
|
42
|
+
if ( event.which > 1 || event.metaKey )
|
43
|
+
return true
|
44
|
+
|
45
|
+
var defaults = {
|
46
|
+
url: this.href,
|
47
|
+
container: $(this).attr('data-pjax'),
|
48
|
+
clickedElement: $(this),
|
49
|
+
fragment: null
|
50
|
+
}
|
51
|
+
|
52
|
+
$.pjax($.extend({}, defaults, options))
|
53
|
+
|
54
|
+
event.preventDefault()
|
55
|
+
})
|
56
|
+
}
|
57
|
+
|
58
|
+
|
59
|
+
// Loads a URL with ajax, puts the response body inside a container,
|
60
|
+
// then pushState()'s the loaded URL.
|
61
|
+
//
|
62
|
+
// Works just like $.ajax in that it accepts a jQuery ajax
|
63
|
+
// settings object (with keys like url, type, data, etc).
|
64
|
+
//
|
65
|
+
// Accepts these extra keys:
|
66
|
+
//
|
67
|
+
// container - Where to stick the response body. Must be a String.
|
68
|
+
// $(container).html(xhr.responseBody)
|
69
|
+
// push - Whether to pushState the URL. Defaults to true (of course).
|
70
|
+
// replace - Want to use replaceState instead? That's cool.
|
71
|
+
//
|
72
|
+
// Use it just like $.ajax:
|
73
|
+
//
|
74
|
+
// var xhr = $.pjax({ url: this.href, container: '#main' })
|
75
|
+
// console.log( xhr.readyState )
|
76
|
+
//
|
77
|
+
// Returns whatever $.ajax returns.
|
78
|
+
var pjax = $.pjax = function( options ) {
|
79
|
+
var $container = $(options.container),
|
80
|
+
success = options.success || $.noop
|
81
|
+
|
82
|
+
// We don't want to let anyone override our success handler.
|
83
|
+
delete options.success
|
84
|
+
|
85
|
+
// We can't persist $objects using the history API so we must use
|
86
|
+
// a String selector. Bail if we got anything else.
|
87
|
+
if ( typeof options.container !== 'string' )
|
88
|
+
throw "pjax container must be a string selector!"
|
89
|
+
|
90
|
+
options = $.extend(true, {}, pjax.defaults, options)
|
91
|
+
|
92
|
+
if ( $.isFunction(options.url) ) {
|
93
|
+
options.url = options.url()
|
94
|
+
}
|
95
|
+
|
96
|
+
options.context = $container
|
97
|
+
|
98
|
+
options.success = function(data){
|
99
|
+
if ( options.fragment ) {
|
100
|
+
// If they specified a fragment, look for it in the response
|
101
|
+
// and pull it out.
|
102
|
+
var $fragment = $(data).find(options.fragment)
|
103
|
+
if ( $fragment.length )
|
104
|
+
data = $fragment.children()
|
105
|
+
else
|
106
|
+
return window.location = options.url
|
107
|
+
} else {
|
108
|
+
// If we got no data or an entire web page, go directly
|
109
|
+
// to the page and let normal error handling happen.
|
110
|
+
if ( !$.trim(data) || /<html/i.test(data) )
|
111
|
+
return window.location = options.url
|
112
|
+
}
|
113
|
+
|
114
|
+
// Make it happen.
|
115
|
+
this.html(data)
|
116
|
+
|
117
|
+
// If there's a <title> tag in the response, use it as
|
118
|
+
// the page's title.
|
119
|
+
var oldTitle = document.title,
|
120
|
+
title = $.trim( this.find('title').remove().text() )
|
121
|
+
if ( title ) document.title = title
|
122
|
+
|
123
|
+
// No <title>? Fragment? Look for data-title and title attributes.
|
124
|
+
if ( !title && options.fragment ) {
|
125
|
+
title = $fragment.attr('title') || $fragment.data('title')
|
126
|
+
}
|
127
|
+
|
128
|
+
var state = {
|
129
|
+
pjax: options.container,
|
130
|
+
fragment: options.fragment,
|
131
|
+
timeout: options.timeout
|
132
|
+
}
|
133
|
+
|
134
|
+
// If there are extra params, save the complete URL in the state object
|
135
|
+
var query = $.param(options.data)
|
136
|
+
if ( query != "_pjax=true" )
|
137
|
+
state.url = options.url + (/\?/.test(options.url) ? "&" : "?") + query
|
138
|
+
|
139
|
+
if ( options.replace ) {
|
140
|
+
window.history.replaceState(state, document.title, options.url)
|
141
|
+
} else if ( options.push ) {
|
142
|
+
// this extra replaceState before first push ensures good back
|
143
|
+
// button behavior
|
144
|
+
if ( !pjax.active ) {
|
145
|
+
window.history.replaceState($.extend({}, state, {url:null}), oldTitle)
|
146
|
+
pjax.active = true
|
147
|
+
}
|
148
|
+
|
149
|
+
window.history.pushState(state, document.title, options.url)
|
150
|
+
}
|
151
|
+
|
152
|
+
// Google Analytics support
|
153
|
+
if ( (options.replace || options.push) && window._gaq )
|
154
|
+
_gaq.push(['_trackPageview'])
|
155
|
+
|
156
|
+
// If the URL has a hash in it, make sure the browser
|
157
|
+
// knows to navigate to the hash.
|
158
|
+
var hash = window.location.hash.toString()
|
159
|
+
if ( hash !== '' ) {
|
160
|
+
window.location.href = hash
|
161
|
+
}
|
162
|
+
|
163
|
+
// Invoke their success handler if they gave us one.
|
164
|
+
success.apply(this, arguments)
|
165
|
+
}
|
166
|
+
|
167
|
+
// Cancel the current request if we're already pjaxing
|
168
|
+
var xhr = pjax.xhr
|
169
|
+
if ( xhr && xhr.readyState < 4) {
|
170
|
+
xhr.onreadystatechange = $.noop
|
171
|
+
xhr.abort()
|
172
|
+
}
|
173
|
+
|
174
|
+
pjax.options = options
|
175
|
+
pjax.xhr = $.ajax(options)
|
176
|
+
$(document).trigger('pjax', [pjax.xhr, options])
|
177
|
+
|
178
|
+
return pjax.xhr
|
179
|
+
}
|
180
|
+
|
181
|
+
|
182
|
+
pjax.defaults = {
|
183
|
+
timeout: 650,
|
184
|
+
push: true,
|
185
|
+
replace: false,
|
186
|
+
// We want the browser to maintain two separate internal caches: one for
|
187
|
+
// pjax'd partial page loads and one for normal page loads. Without
|
188
|
+
// adding this secret parameter, some browsers will often confuse the two.
|
189
|
+
data: { _pjax: true },
|
190
|
+
type: 'GET',
|
191
|
+
dataType: 'html',
|
192
|
+
beforeSend: function(xhr){
|
193
|
+
this.trigger('pjax:start', [xhr, pjax.options])
|
194
|
+
// start.pjax is deprecated
|
195
|
+
this.trigger('start.pjax', [xhr, pjax.options])
|
196
|
+
xhr.setRequestHeader('X-PJAX', 'true')
|
197
|
+
},
|
198
|
+
error: function(xhr, textStatus, errorThrown){
|
199
|
+
if ( textStatus !== 'abort' )
|
200
|
+
window.location = pjax.options.url
|
201
|
+
},
|
202
|
+
complete: function(xhr){
|
203
|
+
this.trigger('pjax:end', [xhr, pjax.options])
|
204
|
+
// end.pjax is deprecated
|
205
|
+
this.trigger('end.pjax', [xhr, pjax.options])
|
206
|
+
}
|
207
|
+
}
|
208
|
+
|
209
|
+
|
210
|
+
// Used to detect initial (useless) popstate.
|
211
|
+
// If history.state exists, assume browser isn't going to fire initial popstate.
|
212
|
+
var popped = ('state' in window.history), initialURL = location.href
|
213
|
+
|
214
|
+
|
215
|
+
// popstate handler takes care of the back and forward buttons
|
216
|
+
//
|
217
|
+
// You probably shouldn't use pjax on pages with other pushState
|
218
|
+
// stuff yet.
|
219
|
+
$(window).bind('popstate', function(event){
|
220
|
+
// Ignore inital popstate that some browsers fire on page load
|
221
|
+
var initialPop = !popped && location.href == initialURL
|
222
|
+
popped = true
|
223
|
+
if ( initialPop ) return
|
224
|
+
|
225
|
+
var state = event.state
|
226
|
+
|
227
|
+
if ( state && state.pjax ) {
|
228
|
+
var container = state.pjax
|
229
|
+
if ( $(container+'').length )
|
230
|
+
$.pjax({
|
231
|
+
url: state.url || location.href,
|
232
|
+
fragment: state.fragment,
|
233
|
+
container: container,
|
234
|
+
push: false,
|
235
|
+
timeout: state.timeout
|
236
|
+
})
|
237
|
+
else
|
238
|
+
window.location = location.href
|
239
|
+
}
|
240
|
+
})
|
241
|
+
|
242
|
+
|
243
|
+
// Add the state property to jQuery's event object so we can use it in
|
244
|
+
// $(window).bind('popstate')
|
245
|
+
if ( $.inArray('state', $.event.props) < 0 )
|
246
|
+
$.event.props.push('state')
|
247
|
+
|
248
|
+
|
249
|
+
// Is pjax supported by this browser?
|
250
|
+
$.support.pjax =
|
251
|
+
window.history && window.history.pushState && window.history.replaceState
|
252
|
+
// pushState isn't reliable on iOS yet.
|
253
|
+
&& !navigator.userAgent.match(/(iPod|iPhone|iPad|WebApps\/.+CFNetwork)/)
|
254
|
+
|
255
|
+
|
256
|
+
// Fall back to normalcy for older browsers.
|
257
|
+
if ( !$.support.pjax ) {
|
258
|
+
$.pjax = function( options ) {
|
259
|
+
window.location = $.isFunction(options.url) ? options.url() : options.url
|
260
|
+
}
|
261
|
+
$.fn.pjax = function() { return this }
|
262
|
+
}
|
263
|
+
|
264
|
+
})(jQuery);
|
@@ -1,16 +1,25 @@
|
|
1
1
|
.button {
|
2
2
|
display: inline-block;
|
3
|
-
|
4
|
-
padding: 0 20px;
|
5
|
-
line-height: 30px;
|
3
|
+
padding: 5px 20px;
|
6
4
|
border: 1px solid #777;
|
7
5
|
border-radius: 3px;
|
8
6
|
box-shadow: 0 1px 2px rgba(100,100,100,0.4), 0 1px 0 rgba(255,255,255,0.3) inset;
|
9
|
-
background: rgb(255,255,255);
|
10
7
|
text-decoration: none;
|
11
8
|
font-weight: bold;
|
12
|
-
color: #
|
9
|
+
color: #fff;
|
13
10
|
cursor: pointer;
|
11
|
+
background: rgb(5,171,239);
|
12
|
+
background: -moz-linear-gradient(top, rgba(5,171,239,1) 0%, rgba(3,105,173,1) 100%);
|
13
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(5,171,239,1)), color-stop(100%,rgba(3,105,173,1)));
|
14
|
+
background: -webkit-linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
15
|
+
background: -o-linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
16
|
+
background: -ms-linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
17
|
+
background: linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
18
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#05abef', endColorstr='#0369ad',GradientType=0 );
|
19
|
+
}
|
20
|
+
|
21
|
+
.button.grey {
|
22
|
+
color: #333;
|
14
23
|
background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(229,229,229,1) 100%);
|
15
24
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(229,229,229,1)));
|
16
25
|
background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(229,229,229,1) 100%);
|
@@ -21,22 +30,7 @@
|
|
21
30
|
}
|
22
31
|
|
23
32
|
.button.small {
|
24
|
-
|
25
|
-
line-height: 24px;
|
26
|
-
padding: 0 10px;
|
27
|
-
}
|
28
|
-
|
29
|
-
.button:hover {
|
30
|
-
color: #fff;
|
31
|
-
text-shadow: 0 1px 0 rgba(0,0,0,0.4);
|
32
|
-
background: rgb(5,171,239);
|
33
|
-
background: -moz-linear-gradient(top, rgba(5,171,239,1) 0%, rgba(3,105,173,1) 100%);
|
34
|
-
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(5,171,239,1)), color-stop(100%,rgba(3,105,173,1)));
|
35
|
-
background: -webkit-linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
36
|
-
background: -o-linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
37
|
-
background: -ms-linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
38
|
-
background: linear-gradient(top, rgba(5,171,239,1) 0%,rgba(3,105,173,1) 100%);
|
39
|
-
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#05abef', endColorstr='#0369ad',GradientType=0 );
|
33
|
+
padding: 2px 10px;
|
40
34
|
}
|
41
35
|
|
42
36
|
.button.negative {
|
@@ -52,32 +46,36 @@
|
|
52
46
|
}
|
53
47
|
|
54
48
|
.button.primary {
|
55
|
-
|
56
|
-
line-height: 24px;
|
57
|
-
padding: 0 10px;
|
49
|
+
padding: 3px 10px;
|
58
50
|
color: #fff;
|
59
51
|
background: #68B902;
|
60
52
|
border-color: #5E8C22;
|
61
53
|
text-shadow: 0 1px 0 rgba(0,0,0,0.4);
|
62
54
|
}
|
63
55
|
|
56
|
+
.button:hover {
|
57
|
+
color: #fff;
|
58
|
+
}
|
59
|
+
|
60
|
+
.button.grey:hover {
|
61
|
+
color: #333;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
64
65
|
.button.primary:hover {
|
65
66
|
background: #6bc102;
|
66
67
|
border-color: #57910C;
|
67
68
|
}
|
68
69
|
|
69
|
-
.button:hover .start {
|
70
|
-
background-position: 0 -29px;
|
71
|
-
}
|
72
70
|
|
73
71
|
.start {
|
74
72
|
display: inline-block;
|
75
73
|
padding-left: 13px;
|
76
|
-
background: url(../images/play-icon.png) no-repeat 0
|
74
|
+
background: url(../images/play-icon.png) no-repeat 0 -35px;
|
77
75
|
}
|
78
76
|
|
79
77
|
.stop {
|
80
78
|
display: inline-block;
|
81
79
|
padding-left: 13px;
|
82
|
-
background: url(../images/stop-icon.png) no-repeat 0
|
80
|
+
background: url(../images/stop-icon.png) no-repeat 0 5px;
|
83
81
|
}
|
@@ -54,6 +54,34 @@ td:last-child {
|
|
54
54
|
text-align: center;
|
55
55
|
}
|
56
56
|
|
57
|
+
|
58
|
+
.url-text {
|
59
|
+
max-width: 120px;
|
60
|
+
white-space: nowrap;
|
61
|
+
overflow: hidden;
|
62
|
+
text-overflow: ellipsis;
|
63
|
+
}
|
64
|
+
|
65
|
+
.td-time {
|
66
|
+
width: 100px;
|
67
|
+
}
|
68
|
+
|
69
|
+
.td-controller {
|
70
|
+
width: 15%;
|
71
|
+
}
|
72
|
+
|
73
|
+
.td-action {
|
74
|
+
width: 15%;
|
75
|
+
}
|
76
|
+
|
77
|
+
.td-ip {
|
78
|
+
width: 15%;
|
79
|
+
}
|
80
|
+
|
81
|
+
.td-runtime {
|
82
|
+
width: 15%;
|
83
|
+
}
|
84
|
+
|
57
85
|
.url_log {
|
58
|
-
width:
|
86
|
+
width: 15%;
|
59
87
|
}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>
|
4
|
+
based on dark.css by Ivan Sagalaev
|
5
|
+
|
6
|
+
*/
|
7
|
+
|
8
|
+
pre code {
|
9
|
+
display: block; padding: 0.5em;
|
10
|
+
background: #3F3F3F;
|
11
|
+
color: #DCDCDC;
|
12
|
+
}
|
13
|
+
|
14
|
+
pre .keyword,
|
15
|
+
pre .tag,
|
16
|
+
pre .django .tag,
|
17
|
+
pre .django .keyword,
|
18
|
+
pre .css .class,
|
19
|
+
pre .css .id,
|
20
|
+
pre .lisp .title {
|
21
|
+
color: #E3CEAB;
|
22
|
+
}
|
23
|
+
|
24
|
+
pre .django .template_tag,
|
25
|
+
pre .django .variable,
|
26
|
+
pre .django .filter .argument {
|
27
|
+
color: #DCDCDC;
|
28
|
+
}
|
29
|
+
|
30
|
+
pre .number,
|
31
|
+
pre .date {
|
32
|
+
color: #8CD0D3;
|
33
|
+
}
|
34
|
+
|
35
|
+
pre .dos .envvar,
|
36
|
+
pre .dos .stream,
|
37
|
+
pre .variable,
|
38
|
+
pre .apache .sqbracket {
|
39
|
+
color: #EFDCBC;
|
40
|
+
}
|
41
|
+
|
42
|
+
pre .dos .flow,
|
43
|
+
pre .diff .change,
|
44
|
+
pre .python .exception,
|
45
|
+
pre .python .built_in,
|
46
|
+
pre .literal,
|
47
|
+
pre .tex .special {
|
48
|
+
color: #EFEFAF;
|
49
|
+
}
|
50
|
+
|
51
|
+
pre .diff .chunk,
|
52
|
+
pre .ruby .subst {
|
53
|
+
color: #8F8F8F;
|
54
|
+
}
|
55
|
+
|
56
|
+
pre .dos .keyword,
|
57
|
+
pre .python .decorator,
|
58
|
+
pre .class .title,
|
59
|
+
pre .haskell .label,
|
60
|
+
pre .function .title,
|
61
|
+
pre .ini .title,
|
62
|
+
pre .diff .header,
|
63
|
+
pre .ruby .class .parent,
|
64
|
+
pre .apache .tag,
|
65
|
+
pre .nginx .built_in,
|
66
|
+
pre .tex .command,
|
67
|
+
pre .input_number {
|
68
|
+
color: #efef8f;
|
69
|
+
}
|
70
|
+
|
71
|
+
pre .dos .winutils,
|
72
|
+
pre .ruby .symbol,
|
73
|
+
pre .ruby .symbol .string,
|
74
|
+
pre .ruby .symbol .keyword,
|
75
|
+
pre .ruby .symbol .keymethods,
|
76
|
+
pre .ruby .string,
|
77
|
+
pre .ruby .instancevar {
|
78
|
+
color: #DCA3A3;
|
79
|
+
}
|
80
|
+
|
81
|
+
pre .diff .deletion,
|
82
|
+
pre .string,
|
83
|
+
pre .tag .value,
|
84
|
+
pre .preprocessor,
|
85
|
+
pre .built_in,
|
86
|
+
pre .sql .aggregate,
|
87
|
+
pre .javadoc,
|
88
|
+
pre .smalltalk .class,
|
89
|
+
pre .smalltalk .localvars,
|
90
|
+
pre .smalltalk .array,
|
91
|
+
pre .css .rules .value,
|
92
|
+
pre .attr_selector,
|
93
|
+
pre .pseudo,
|
94
|
+
pre .apache .cbracket,
|
95
|
+
pre .tex .formula {
|
96
|
+
color: #CC9393;
|
97
|
+
}
|
98
|
+
|
99
|
+
pre .shebang,
|
100
|
+
pre .diff .addition,
|
101
|
+
pre .comment,
|
102
|
+
pre .java .annotation,
|
103
|
+
pre .template_comment,
|
104
|
+
pre .pi,
|
105
|
+
pre .doctype {
|
106
|
+
color: #7F9F7F;
|
107
|
+
}
|
108
|
+
|
109
|
+
pre .xml .css,
|
110
|
+
pre .xml .javascript,
|
111
|
+
pre .xml .vbscript,
|
112
|
+
pre .tex .formula {
|
113
|
+
opacity: 0.5;
|
114
|
+
}
|
115
|
+
|
@@ -3,6 +3,7 @@ html, body {
|
|
3
3
|
}
|
4
4
|
|
5
5
|
body {
|
6
|
+
min-width: 1000px;
|
6
7
|
font: 12px/140% helvetica, arial, sans-serif;
|
7
8
|
color: #333;
|
8
9
|
background: #F3F4EB;
|
@@ -23,7 +24,9 @@ body {
|
|
23
24
|
}
|
24
25
|
|
25
26
|
.wrapper {
|
26
|
-
|
27
|
+
width: 96%;
|
28
|
+
max-width: 1600px;
|
29
|
+
margin: 0 auto;
|
27
30
|
position: relative;
|
28
31
|
}
|
29
32
|
|
@@ -43,8 +46,7 @@ body {
|
|
43
46
|
}
|
44
47
|
|
45
48
|
.content {
|
46
|
-
padding
|
47
|
-
padding-top: 20px;
|
49
|
+
padding: 20px 0;
|
48
50
|
}
|
49
51
|
|
50
52
|
.header {
|
@@ -118,13 +120,6 @@ body {
|
|
118
120
|
background-color: #fefefe;
|
119
121
|
box-shadow: 2px 2px 5px #e4e4e4 inset;
|
120
122
|
background: rgb(255,255,255);
|
121
|
-
background: -moz-linear-gradient(top, rgba(255,255,255,1) 1%, rgba(244,244,244,1) 49%, rgba(255,255,255,1) 100%);
|
122
|
-
background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,rgba(255,255,255,1)), color-stop(49%,rgba(244,244,244,1)), color-stop(100%,rgba(255,255,255,1)));
|
123
|
-
background: -webkit-linear-gradient(top, rgba(255,255,255,1) 1%,rgba(244,244,244,1) 49%,rgba(255,255,255,1) 100%);
|
124
|
-
background: -o-linear-gradient(top, rgba(255,255,255,1) 1%,rgba(244,244,244,1) 49%,rgba(255,255,255,1) 100%);
|
125
|
-
background: -ms-linear-gradient(top, rgba(255,255,255,1) 1%,rgba(244,244,244,1) 49%,rgba(255,255,255,1) 100%);
|
126
|
-
background: linear-gradient(top, rgba(255,255,255,1) 1%,rgba(244,244,244,1) 49%,rgba(255,255,255,1) 100%);
|
127
|
-
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 );
|
128
123
|
min-height: 400px;
|
129
124
|
}
|
130
125
|
|
@@ -176,6 +171,33 @@ body {
|
|
176
171
|
margin-left: -110px;
|
177
172
|
left: 50%;
|
178
173
|
}
|
174
|
+
|
175
|
+
.stats {
|
176
|
+
position: relative;
|
177
|
+
width: 25%;
|
178
|
+
height: 50px;
|
179
|
+
color: #fff;
|
180
|
+
font-size: 11px;
|
181
|
+
line-height: 1.1;
|
182
|
+
text-shadow: 0 1px 0 rgba(0,0,0, 0.7);
|
183
|
+
background: rgb(119,73,43);
|
184
|
+
background: -moz-linear-gradient(top, rgba(119,73,43,1) 0%, rgba(89,54,32,1) 100%);
|
185
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(119,73,43,1)), color-stop(100%,rgba(89,54,32,1)));
|
186
|
+
background: -webkit-linear-gradient(top, rgba(119,73,43,1) 0%,rgba(89,54,32,1) 100%);
|
187
|
+
background: -o-linear-gradient(top, rgba(119,73,43,1) 0%,rgba(89,54,32,1) 100%);
|
188
|
+
background: -ms-linear-gradient(top, rgba(119,73,43,1) 0%,rgba(89,54,32,1) 100%);
|
189
|
+
background: linear-gradient(top, rgba(119,73,43,1) 0%,rgba(89,54,32,1) 100%);
|
190
|
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#77492b', endColorstr='#593620',GradientType=0 );
|
191
|
+
|
192
|
+
}
|
193
|
+
|
194
|
+
.stats strong {
|
195
|
+
display: inline-block;
|
196
|
+
width: 60px;
|
197
|
+
color: #e7c5a9;
|
198
|
+
}
|
199
|
+
|
200
|
+
|
179
201
|
/*
|
180
202
|
http://localhost:3000/mongodblogs/overview
|
181
203
|
./bin/mongodb_logger_web ../mongo.yml -F
|