rack-mini-profiler 1.0.1 → 1.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7c0f5a071d07b17ed627b9c25ca3fa6a60f9670178e990fa8d84e7f826c05ff
4
- data.tar.gz: 94c852d1876cf526cf1f771bb609d6f6993f5d1827da16861128351b59ee0f83
3
+ metadata.gz: 343dec64a1a5e96e086a3cbceb07c418d08a891d5f89a9315472108e125a9282
4
+ data.tar.gz: d242ccef7bd8c5aeb2224f7912886a0e05ce21ef571a3f6c76f384686b5f1525
5
5
  SHA512:
6
- metadata.gz: f53c37831ae521bfc0f79dc375595f76165499b76ca60191f5ba88cf811f68abe2c787e548010c68fd209b0b156e06ba6f54b40d10dd24b1297622aefeb80c58
7
- data.tar.gz: 471f7506b95eefc6e9f182a88baa8ef9bd8f613557619d3c34ce7f4d1831026f48ba61da7160dcb3ae7adca4dbf5d33766bbba48880a84633ee7692a2ae9ad1f
6
+ metadata.gz: 394c8ce3d60dbb2638fd0ea58420e8372702cfa5043bf08bdd51e731abe3019f1299bb4e3c22b92fac70f477a2fe8783720a3f2c46d393dda7ace0509b02963b
7
+ data.tar.gz: cf3ba12543795194bab109ff9fddd97ff0d0c349b8f505cebae202cf30b6e6d8e5058a1385ad4a8cbc747d27108c6351a4c7ddb53ccda14b9f68b7f4f9978b48
data/CHANGELOG.md CHANGED
@@ -1,6 +1,46 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 1.0.1 2018-12-10
3
+ ## 1.1.6 - 2020-01-30
4
+
5
+ - [FIX] edge condition on page transition function could lead to exceptions
6
+
7
+ ## 1.1.5 - 2020-01-28
8
+
9
+ - [FIX] correct custom counter regression
10
+ - [FIX] respect max_traces_to_show
11
+ - [FIX] handle storage engine failures in whitelist mode
12
+
13
+ ## 1.1.4 - 2019-12-12
14
+
15
+ - [SECURITY] carefully crafted SQL could cause an XSS on sites that do not use CSPs
16
+
17
+ ## 1.1.3 - 2019-10-28
18
+
19
+ - [FEATURE] precompile all templates to avoid need for unsafe-eval
20
+
21
+ ## 1.1.2 - 2019-10-24
22
+
23
+ - [FIX] JS payload was not working on IE11 and leading to errors
24
+ - [FIX] Remove global singleton_class which was injected
25
+ - [FIX] Regressions post removal of jQuery
26
+
27
+ ## 1.1.1 - 2019-10-22
28
+
29
+ - [FIX] correct JavaScript fetch support header iteration (Jorge Manrubia)
30
+
31
+ ## 1.1.0 - 2019-10-01
32
+
33
+ - [FEATURE] remove jQuery dependency, switch template library to dot.js
34
+ - [FEATURE] disable all sensitive debugging methods by default (env, memory profiling) can be enabled with enable_advanced_debugging_tools.
35
+ - [FIX] when conditionally requiring rack mini profiler, asset precompile could fail
36
+ - [FEATURE] `/rack-mini-profiler/requests` can be used to monitor all requests for apps that do not have a UI (like API apps)
37
+ - [SECURITY] XSS injection in `?pp=help` via rogue uri
38
+
39
+ ## 1.0.2 - 2019-02-05
40
+
41
+ - [FIX] correct script injection to work with Rails 6 and above
42
+
43
+ ## 1.0.1 - 2018-12-10
4
44
 
5
45
  - [FIX] add support for exec_params instrumentation in PG, this method as of PG 1.1.0 no longer
6
46
  routes calls to exec / async_exec
@@ -10,7 +50,7 @@
10
50
  - [FIX] getEntriesByName is missing in iOS, workaround
11
51
  - [FEATURE] drop support for Ruby 2.2.0 we require 2.3.0 and up (EOL Ruby no longer supported)
12
52
 
13
- ## 1.0.0 2017-03-29
53
+ ## 1.0.0 - 2018-03-29
14
54
 
15
55
  - [BREAKING CHANGE] Ruby version 2.2.0 or later is required
16
56
  - [FEATURE] use new web performance API to avoid warning @MikeRogers0
@@ -18,16 +58,16 @@
18
58
  - [FIX] correct jQuery 3.0 deprecations @TiSer
19
59
  - [FIX] JS in IFRAME @naiyt
20
60
 
21
- ## 0.10.8 2017-12-01
61
+ ## 0.10.8 - 2017-12-01
22
62
 
23
63
  - [FEATURE] Add `# frozen_string_literal: true` to all `lib/**/*.rb` files
24
64
 
25
- ## 0.10.7 2017-11-24
65
+ ## 0.10.7 - 2017-11-24
26
66
 
27
67
  - [FEATURE] Replace Time.now with Process.clock_gettime(Process::CLOCK_MONOTONIC)
28
68
  - [FIX] Error with webrick and empty cache control
29
69
 
30
- ## 0.10.6 2017-10-30
70
+ ## 0.10.6 - 2017-10-30
31
71
 
32
72
  - [FEATURE] Support for vertical positions (top/bottom)
33
73
  - [FEATURE] Suppress profiler results in print media @Mike Dillon
@@ -35,11 +75,11 @@
35
75
  - [FEATURE] install generator @yhirano
36
76
  - [FEATURE] store initial cache control headers in X-MiniProfiler-Original-Cache-Control @mrasu
37
77
 
38
- ## 0.10.5 2017-05-22
78
+ ## 0.10.5 - 2017-05-22
39
79
 
40
80
  - [FIX] revert PG bind sniffing until it is properly tested
41
81
 
42
- ## 0.10.4 2017-05-17
82
+ ## 0.10.4 - 2017-05-17
43
83
 
44
84
  - [FEATURE] log binds for pg @neznauy
45
85
  - [FIX] use async exec pg monkey patch instead of exec
@@ -48,25 +88,25 @@
48
88
  - [FIX] ensure redis get_unviewed_ids returns only ids that exist
49
89
  - [FIX] correctly respect SCRIPT in env if it is sniffed by middleware
50
90
 
51
- ## 0.10.2 2017-02-08
91
+ ## 0.10.2 - 2017-02-08
52
92
 
53
93
  - [FIX] improve turbolinks support
54
94
  - [FEATURE] make location of mini_profiler injection customizable
55
95
 
56
- ## 0.10.1 2016-05-18
96
+ ## 0.10.1 - 2016-05-18
57
97
 
58
98
  - [FEATURE] push forward the security checks so no work is ever done if a valid production
59
99
  cookie is not available (@sam)
60
100
 
61
- ## 0.9.9.2 2016-03-06
101
+ ## 0.9.9.2 - 2016-03-06
62
102
 
63
103
  - [FEATURE] on pageTransition collapse previously expanded timings
64
104
 
65
- ## 0.9.9.1 2016-03-06
105
+ ## 0.9.9.1 - 2016-03-06
66
106
 
67
107
  - [FEATURE] expost MiniProfiler.pageTransition() for use by SPA web apps (@sam)
68
108
 
69
- ## 0.9.9 2016-03-06
109
+ ## 0.9.9 - 2016-03-06
70
110
 
71
111
  - [FIX] removes alias_method_chain in favor of alias_method until Ruby 1.9.3 (@ayfredlund)
72
112
  - [FIX] Dont block mongo when already patched for another db (@rrooding @kbrock)
@@ -122,7 +162,7 @@
122
162
  - [FIXED] Possible XSS (admin only)
123
163
  - [FIXED] Corrected Sql patching to avoid setting instance vars on nil which is frozen (thanks Andy, huoxito)
124
164
 
125
- ## 0.9.0.pre - 2013-12-12 (Sam Saffron)
165
+ ## 0.9.0.pre - 2013-12-05 (Sam Saffron)
126
166
  - Bumped up version to reflect the stability of the project
127
167
  - [IMPROVED] Reports for pp=profile-gc
128
168
  - [IMPROVED] pp=flamegraph&flamegraph_sample_rate=1 , allow you to specify sampling rates
@@ -132,7 +172,7 @@
132
172
  config.assets.prefix path since developers can rename the path to serve Asset Pipeline
133
173
  files from
134
174
 
135
- ## 2013-09-03
175
+ ## 0.1.31 - 2013-09-03
136
176
  - [IMPROVED] Flamegraph now has much increased fidelity
137
177
  - [REMOVED] Ripped out flamegraph so it can be isolated into a gem
138
178
  - [REMOVED] Ripped out pp=sample it just was never really used
@@ -188,13 +228,13 @@
188
228
  - [ADDED] New MemchacedStore
189
229
  - [ADDED] Rails 4 support
190
230
 
191
- ## 2012-09-12 (Sam Saffron)
231
+ ## 0.1.20 - 2012-09-12 (Sam Saffron)
192
232
  - [ADDED] pp=profile-gc: allows you to profile the GC in Ruby 1.9.3
193
233
 
194
234
  ## 0.1.19 - 2012-09-10 (Sam Saffron)
195
235
  - [FIXED] Compatibility issue with Ruby 1.8.7
196
236
 
197
- ## 0.1.17 - 2012-09-09 (Sam Saffron)
237
+ ## 0.1.17 - 2012-09-07 (Sam Saffron)
198
238
  - [FIXED] pp=sample was bust unless stacktrace was installed
199
239
 
200
240
  ## 0.1.16 - 2012-09-05 (Sam Saffron)
@@ -218,10 +258,10 @@
218
258
  ## 0.1.12.pre - 2012-08-20 (Sam Saffron)
219
259
  - [IMPROVED] Cap X-MiniProfiler-Ids at 10, otherwise the header can get killed
220
260
 
221
- ## 2012-08-10 (Sam Saffron)
261
+ ## 0.1.11.pre - 2012-08-10 (Sam Saffron)
222
262
  - [ADDED] Basic prepared statement profiling for Postgres
223
263
 
224
- ## 2012-08-07 (Sam Saffron)
264
+ ## 0.1.10 - 2012-08-07 (Sam Saffron)
225
265
  - [ADDED] Option to disable profiler for the current session (pp=disable / pp=enable)
226
266
  - [ADDED] yajl compatability contributed by Sven Riedel
227
267
 
@@ -235,7 +275,7 @@
235
275
  - [ADDED] First Paint time for Google Chrome
236
276
  - [FIXED] Ensure non Rails installs have mini profiler
237
277
 
238
- ## 2012-07-12 (Sam Saffron)
278
+ ## 0.1.6 - 2012-07-12 (Sam Saffron)
239
279
  - [ADDED] Native PG and MySql2 interceptors, this gives way more accurate times
240
280
  - [ADDED] some more client probing built in to rails
241
281
  - [IMPROVED] Refactored context so its a proper class and not a hash
@@ -249,7 +289,7 @@
249
289
  production
250
290
  - [IMPROVED] Cleaned up railties, got rid of the post authorize callback
251
291
 
252
- ## 2012-06-28 (Sam Saffron)
292
+ ## 0.1.1 - 2012-06-28 (Sam Saffron)
253
293
  - [ADDED] Started change log
254
294
  - [ADDED] added MemcacheStore
255
295
  - [IMPROVED] Corrected profiler so it properly captures POST requests (was supressing non 200s)
data/README.md CHANGED
@@ -19,12 +19,11 @@ Middleware that displays speed badge for every html page. Designed to work both
19
19
 
20
20
  ## rack-mini-profiler needs your help
21
21
 
22
- We have decided to restructure our repository so there is a central UI repo and the various language implementation have their own.
22
+ We have decided to restructure our repository so there is a central UI repo and the various language implementations have their own.
23
23
 
24
24
  **WE NEED HELP.**
25
25
 
26
- - Setting up a build that reuses https://github.com/MiniProfiler/ui
27
- - Migrating the internal data structures [per the spec](https://github.com/MiniProfiler/ui)
26
+ - Help [triage issues](https://www.codetriage.com/miniprofiler/rack-mini-profiler) [![Open Source Helpers](https://www.codetriage.com/miniprofiler/rack-mini-profiler/badges/users.svg)](https://www.codetriage.com/miniprofiler/rack-mini-profiler)
28
27
 
29
28
  If you feel like taking on any of this start an issue and update us on your progress.
30
29
 
@@ -54,7 +53,7 @@ All you have to do is to include the Gem and you're good to go in development. S
54
53
 
55
54
  #### Rails and manual initialization
56
55
 
57
- In case you need to make sure rack_mini_profiler initialized is after all other gems, or you want to execute some code before rack_mini_profiler required:
56
+ In case you need to make sure rack_mini_profiler is initialized after all other gems, or you want to execute some code before rack_mini_profiler required:
58
57
 
59
58
  ```ruby
60
59
  gem 'rack-mini-profiler', require: false
@@ -187,6 +186,13 @@ In those cases use:
187
186
  Rack::MiniProfiler.config.authorization_mode = :whitelist
188
187
  ```
189
188
 
189
+ When deciding to fully profile a page mini profiler consults with the `authorization_mode`
190
+
191
+ By default in production we attempt to set the authorization mode to `:whitelist` meaning that end user will only be able to see requests where somewhere `Rack::MiniProfiler.authorize_request` is invoked.
192
+
193
+ In development we run in the `:allow_all` authorization mode meaning every request is profiled and displayed to the end user.
194
+
195
+
190
196
  ## Configuration
191
197
 
192
198
  Various aspects of rack-mini-profiler's behavior can be configured when your app boots.
@@ -221,8 +227,7 @@ Rack::MiniProfiler.config.storage = Rack::MiniProfiler::MemoryStore
221
227
 
222
228
  # set RedisStore
223
229
  if Rails.env.production?
224
- uri = URI.parse(ENV["REDIS_SERVER_URL"])
225
- Rack::MiniProfiler.config.storage_options = { :host => uri.host, :port => uri.port, :password => uri.password }
230
+ Rack::MiniProfiler.config.storage_options = { url: ENV["REDIS_SERVER_URL"] }
226
231
  Rack::MiniProfiler.config.storage = Rack::MiniProfiler::RedisStore
227
232
  end
228
233
  ```
@@ -291,6 +296,9 @@ You need to inject the following in your SPA to load MiniProfiler's speed badge
291
296
 
292
297
  _Note:_ The GUID (`data-version` and the `?v=` parameter on the `src`) will change with each release of `rack_mini_profiler`. The MiniProfiler's speed badge will continue to work, although you will have to change the GUID to expire the script to fetch the most recent version.
293
298
 
299
+ #### Using MiniProfiler's built in route for apps without HTML responses
300
+ MiniProfiler also ships with a `/rack-mini-profiler/requests` route that displays the speed badge on a blank HTML page. This can be useful when profiling an application that does not render HTML.
301
+
294
302
  ### Configuration Options
295
303
 
296
304
  You can set configuration options using the configuration accessor on `Rack::MiniProfiler`.
@@ -310,18 +318,18 @@ skip_paths|`[]`|Paths that skip profiling.
310
318
  skip_schema_queries|Rails dev: `'true'`<br>Othwerwise: `'false'`|`'true'` to log schema queries.
311
319
  auto_inject|`true`|`true` to inject the miniprofiler script in the page.
312
320
  backtrace_ignores|`[]`|Regexes of lines to be removed from backtraces.
313
- backtrace_includes|Rails: `[/^\/?(app|config|lib|test)/]`<br>Rack: `[]`|Regexes of lines to keep in backtraces.
321
+ backtrace_includes|Rails: `[/^\/?(app\|config\|lib\|test)/]`<br>Rack: `[]`|Regexes of lines to keep in backtraces.
314
322
  backtrace_remove|rails: `Rails.root`<br>Rack: `nil`|A string or regex to remove part of each line in the backtrace.
315
323
  toggle_shortcut|Alt+P|Keyboard shortcut to toggle the mini_profiler's visibility. See [jquery.hotkeys](https://github.com/jeresig/jquery.hotkeys).
316
324
  start_hidden|`false`|`false` to make mini_profiler visible on page load.
317
325
  backtrace_threshold_ms|`0`|Minimum SQL query elapsed time before a backtrace is recorded.
318
326
  flamegraph_sample_rate|`0.5`|How often to capture stack traces for flamegraphs in milliseconds.
319
- disable_env_dump|`false`|`true` disables `?pp=env`, which prevents sending ENV vars over HTTP.
320
327
  base_url_path|`'/mini-profiler-resources/'`|Path for assets; added as a prefix when naming assets and sought when responding to requests.
321
328
  collapse_results|`true`|If multiple timing results exist in a single page, collapse them till clicked.
322
329
  max_traces_to_show|20|Maximum number of mini profiler timing blocks to show on one page
323
330
  html_container|`body`|The HTML container (as a jQuery selector) to inject the mini_profiler UI into
324
331
  show_total_sql_count|`false`|Displays the total number of SQL executions.
332
+ enable_advanced_debugging_tools|`false`|Enables sensitive debugging tools that can be used via the UI. In production we recommend keeping this disabled as memory and environment debugging tools can expose contents of memory that may contain passwords.
325
333
 
326
334
  ### Custom middleware ordering (required if using `Rack::Deflate` with Rails)
327
335
 
@@ -0,0 +1,2 @@
1
+ /* Laura Doktorova https://github.com/olado/doT */
2
+ !function(){"use strict";function e(n,t,r){return("string"==typeof t?t:t.toString()).replace(n.define||a,function(e,t,o,a){return 0===t.indexOf("def.")&&(t=t.substring(4)),t in r||(":"===o?(n.defineParams&&a.replace(n.defineParams,function(e,n,o){r[t]={arg:n,text:o}}),t in r||(r[t]=a)):new Function("def","def['"+t+"']="+a)(r)),""}).replace(n.use||a,function(t,o){n.useParams&&(o=o.replace(n.useParams,function(e,n,t,o){if(r[t]&&r[t].arg&&o){var a=(t+":"+o).replace(/'|\\/g,"_");return r.__exp=r.__exp||{},r.__exp[a]=r[t].text.replace(new RegExp("(^|[^\\w$])"+r[t].arg+"([^\\w$])","g"),"$1"+o+"$2"),n+"def.__exp['"+a+"']"}}));var a=new Function("def","return "+o)(r);return a?e(n,a,r):a})}function n(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}var t,r={engine:"doT",version:"1.1.1",templateSettings:{evaluate:/\{\{([\s\S]+?(\}?)+)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,encode:/\{\{!([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,useParams:/(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,defineParams:/^\s*([\w$]+):([\s\S]+)/,conditional:/\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,varname:"it",strip:!0,append:!0,selfcontained:!1,doNotSkipEncoded:!1},template:void 0,compile:void 0,log:!0};r.encodeHTMLSource=function(e){var n={"&":"&#38;","<":"&#60;",">":"&#62;",'"':"&#34;","'":"&#39;","/":"&#47;"},t=e?/[&<>"'\/]/g:/&(?!#?\w+;)|<|>|"|'|\//g;return function(e){return e?e.toString().replace(t,function(e){return n[e]||e}):""}},t=function(){return this||(0,eval)("this")}(),"undefined"!=typeof module&&module.exports?module.exports=r:"function"==typeof define&&define.amd?define(function(){return r}):t.doT=r;var o={append:{start:"'+(",end:")+'",startencode:"'+encodeHTML("},split:{start:"';out+=(",end:");out+='",startencode:"';out+=encodeHTML("}},a=/$^/;r.template=function(c,i,u){i=i||r.templateSettings;var d,s,p=i.append?o.append:o.split,l=0,f=i.use||i.define?e(i,c,u||{}):c;f=("var out='"+(i.strip?f.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):f).replace(/'|\\/g,"\\$&").replace(i.interpolate||a,function(e,t){return p.start+n(t)+p.end}).replace(i.encode||a,function(e,t){return d=!0,p.startencode+n(t)+p.end}).replace(i.conditional||a,function(e,t,r){return t?r?"';}else if("+n(r)+"){out+='":"';}else{out+='":r?"';if("+n(r)+"){out+='":"';}out+='"}).replace(i.iterate||a,function(e,t,r,o){return t?(l+=1,s=o||"i"+l,t=n(t),"';var arr"+l+"="+t+";if(arr"+l+"){var "+r+","+s+"=-1,l"+l+"=arr"+l+".length-1;while("+s+"<l"+l+"){"+r+"=arr"+l+"["+s+"+=1];out+='"):"';} } out+='"}).replace(i.evaluate||a,function(e,t){return"';"+n(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,""),d&&(i.selfcontained||!t||t._encodeHTML||(t._encodeHTML=r.encodeHTMLSource(i.doNotSkipEncoded)),f="var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("+r.encodeHTMLSource.toString()+"("+(i.doNotSkipEncoded||"")+"));"+f);try{return new Function(i.varname,f)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+f),e}},r.compile=function(e,n){return r.template(e,null,n)}}();
@@ -1,9 +1,29 @@
1
1
  @charset "UTF-8";
2
- .profiler-result, .profiler-queries {
2
+ .profiler-result,
3
+ .profiler-queries {
3
4
  color: #555;
4
5
  line-height: 1;
5
6
  font-size: 12px; }
6
- .profiler-result pre, .profiler-result code, .profiler-result label, .profiler-result table, .profiler-result tbody, .profiler-result thead, .profiler-result tfoot, .profiler-result tr, .profiler-result th, .profiler-result td, .profiler-queries pre, .profiler-queries code, .profiler-queries label, .profiler-queries table, .profiler-queries tbody, .profiler-queries thead, .profiler-queries tfoot, .profiler-queries tr, .profiler-queries th, .profiler-queries td {
7
+ .profiler-result pre,
8
+ .profiler-result code,
9
+ .profiler-result label,
10
+ .profiler-result table,
11
+ .profiler-result tbody,
12
+ .profiler-result thead,
13
+ .profiler-result tfoot,
14
+ .profiler-result tr,
15
+ .profiler-result th,
16
+ .profiler-result td,
17
+ .profiler-queries pre,
18
+ .profiler-queries code,
19
+ .profiler-queries label,
20
+ .profiler-queries table,
21
+ .profiler-queries tbody,
22
+ .profiler-queries thead,
23
+ .profiler-queries tfoot,
24
+ .profiler-queries tr,
25
+ .profiler-queries th,
26
+ .profiler-queries td {
7
27
  margin: 0;
8
28
  padding: 0;
9
29
  border: 0;
@@ -13,15 +33,21 @@
13
33
  background-color: transparent;
14
34
  overflow: visible;
15
35
  max-height: none; }
16
- .profiler-result table, .profiler-queries table {
36
+ .profiler-result table,
37
+ .profiler-queries table {
17
38
  border-collapse: collapse;
18
39
  border-spacing: 0; }
19
- .profiler-result a, .profiler-result a:hover, .profiler-queries a, .profiler-queries a:hover {
40
+ .profiler-result a,
41
+ .profiler-result a:hover,
42
+ .profiler-queries a,
43
+ .profiler-queries a:hover {
20
44
  cursor: pointer;
21
- color: #0077CC; }
22
- .profiler-result a, .profiler-queries a {
45
+ color: #0077cc; }
46
+ .profiler-result a,
47
+ .profiler-queries a {
23
48
  text-decoration: none; }
24
- .profiler-result a:hover, .profiler-queries a:hover {
49
+ .profiler-result a:hover,
50
+ .profiler-queries a:hover {
25
51
  text-decoration: underline; }
26
52
 
27
53
  .profiler-result {
@@ -38,9 +64,13 @@
38
64
  color: #767676; }
39
65
  .profiler-result .profiler-trivial {
40
66
  display: none; }
41
- .profiler-result .profiler-trivial td, .profiler-result .profiler-trivial td * {
67
+ .profiler-result .profiler-trivial td,
68
+ .profiler-result .profiler-trivial td * {
42
69
  color: #767676 !important; }
43
- .profiler-result pre, .profiler-result code, .profiler-result .profiler-number, .profiler-result .profiler-unit {
70
+ .profiler-result pre,
71
+ .profiler-result code,
72
+ .profiler-result .profiler-number,
73
+ .profiler-result .profiler-unit {
44
74
  font-family: Consolas, monospace, serif; }
45
75
  .profiler-result .profiler-number {
46
76
  color: #111; }
@@ -54,7 +84,8 @@
54
84
  background-color: #fff;
55
85
  color: #767676;
56
86
  text-align: right; }
57
- .profiler-result .profiler-timings th, .profiler-result .profiler-timings td {
87
+ .profiler-result .profiler-timings th,
88
+ .profiler-result .profiler-timings td {
58
89
  white-space: nowrap; }
59
90
  .profiler-result .profiler-timings .profiler-duration-with-children {
60
91
  display: none; }
@@ -63,8 +94,9 @@
63
94
  text-align: right; }
64
95
  .profiler-result .profiler-timings .profiler-indent {
65
96
  letter-spacing: 4px; }
66
- .profiler-result .profiler-timings .profiler-queries-show .profiler-number, .profiler-result .profiler-timings .profiler-queries-show .profiler-unit {
67
- color: #0077CC; }
97
+ .profiler-result .profiler-timings .profiler-queries-show .profiler-number,
98
+ .profiler-result .profiler-timings .profiler-queries-show .profiler-unit {
99
+ color: #0077cc; }
68
100
  .profiler-result .profiler-timings .profiler-queries-duration {
69
101
  padding-left: 6px; }
70
102
  .profiler-result .profiler-timings .profiler-percent-in-sql {
@@ -89,13 +121,15 @@
89
121
  .profiler-result .profiler-queries tbody tr {
90
122
  border-bottom: 1px solid #f1f1f1; }
91
123
  .profiler-result .profiler-queries tr {
92
- background-color: #FFF; }
124
+ background-color: #fff; }
125
+ .profiler-result .profiler-queries tr.higlight-animate {
126
+ animation: highlight-in 3s; }
93
127
  .profiler-result .profiler-queries tr.slow {
94
- background-color: #FEE; }
128
+ background-color: #fee; }
95
129
  .profiler-result .profiler-queries tr.very-slow {
96
- background-color: #FDD; }
130
+ background-color: #fdd; }
97
131
  .profiler-result .profiler-queries tr.very-very-slow {
98
- background-color: #FCC; }
132
+ background-color: #fcc; }
99
133
  .profiler-result .profiler-queries pre {
100
134
  font-family: Consolas, monospace, serif;
101
135
  white-space: pre-wrap; }
@@ -110,12 +144,14 @@
110
144
  text-align: left; }
111
145
  .profiler-result .profiler-queries td:last-child {
112
146
  padding-right: 25px; }
113
- .profiler-result .profiler-queries .profiler-since-start, .profiler-result .profiler-queries .profiler-duration {
147
+ .profiler-result .profiler-queries .profiler-since-start,
148
+ .profiler-result .profiler-queries .profiler-duration {
114
149
  text-align: right; }
115
150
  .profiler-result .profiler-queries .profiler-info div {
116
151
  text-align: right;
117
152
  margin-bottom: 5px; }
118
- .profiler-result .profiler-queries .profiler-gap-info, .profiler-result .profiler-queries .profiler-gap-info td {
153
+ .profiler-result .profiler-queries .profiler-gap-info,
154
+ .profiler-result .profiler-queries .profiler-gap-info td {
119
155
  background-color: #ccc; }
120
156
  .profiler-result .profiler-queries .profiler-gap-info .profiler-unit {
121
157
  color: #777; }
@@ -147,9 +183,15 @@
147
183
  color: blue; }
148
184
  .profiler-result .profiler-queries .dec {
149
185
  color: purple; }
150
- .profiler-result .profiler-warning, .profiler-result .profiler-warning *, .profiler-result .profiler-warning .profiler-queries-show, .profiler-result .profiler-warning .profiler-queries-show .profiler-unit {
186
+ .profiler-result .profiler-warning,
187
+ .profiler-result .profiler-warning *,
188
+ .profiler-result .profiler-warning .profiler-queries-show,
189
+ .profiler-result .profiler-warning .profiler-queries-show .profiler-unit {
151
190
  color: #f00; }
152
- .profiler-result .profiler-warning:hover, .profiler-result .profiler-warning *:hover, .profiler-result .profiler-warning .profiler-queries-show:hover, .profiler-result .profiler-warning .profiler-queries-show .profiler-unit:hover {
191
+ .profiler-result .profiler-warning:hover,
192
+ .profiler-result .profiler-warning *:hover,
193
+ .profiler-result .profiler-warning .profiler-queries-show:hover,
194
+ .profiler-result .profiler-warning .profiler-queries-show .profiler-unit:hover {
153
195
  color: #f00; }
154
196
  .profiler-result .profiler-nuclear {
155
197
  color: #f00;
@@ -165,39 +207,52 @@
165
207
  top: 0px; }
166
208
  .profiler-results.profiler-top.profiler-left {
167
209
  left: 0px; }
168
- .profiler-results.profiler-top.profiler-left.profiler-no-controls .profiler-totals, .profiler-results.profiler-top.profiler-left.profiler-no-controls .profiler-result:last-child .profiler-button, .profiler-results.profiler-top.profiler-left .profiler-controls {
210
+ .profiler-results.profiler-top.profiler-left.profiler-no-controls .profiler-totals,
211
+ .profiler-results.profiler-top.profiler-left.profiler-no-controls .profiler-result:last-child .profiler-button,
212
+ .profiler-results.profiler-top.profiler-left .profiler-controls {
169
213
  -webkit-border-bottom-right-radius: 10px;
170
214
  -moz-border-radius-bottomright: 10px;
171
215
  border-bottom-right-radius: 10px; }
172
- .profiler-results.profiler-top.profiler-left .profiler-button, .profiler-results.profiler-top.profiler-left .profiler-controls {
216
+ .profiler-results.profiler-top.profiler-left .profiler-button,
217
+ .profiler-results.profiler-top.profiler-left .profiler-controls {
173
218
  border-right: 1px solid #888; }
174
219
  .profiler-results.profiler-top.profiler-right {
175
220
  right: 0px; }
176
- .profiler-results.profiler-top.profiler-right.profiler-no-controls .profiler-totals, .profiler-results.profiler-top.profiler-right.profiler-no-controls .profiler-result:last-child .profiler-button, .profiler-results.profiler-top.profiler-right .profiler-controls {
221
+ .profiler-results.profiler-top.profiler-right.profiler-no-controls .profiler-totals,
222
+ .profiler-results.profiler-top.profiler-right.profiler-no-controls .profiler-result:last-child .profiler-button,
223
+ .profiler-results.profiler-top.profiler-right .profiler-controls {
177
224
  -webkit-border-bottom-left-radius: 10px;
178
225
  -moz-border-radius-bottomleft: 10px;
179
226
  border-bottom-left-radius: 10px; }
180
- .profiler-results.profiler-top.profiler-right .profiler-button, .profiler-results.profiler-top.profiler-right .profiler-controls {
227
+ .profiler-results.profiler-top.profiler-right .profiler-button,
228
+ .profiler-results.profiler-top.profiler-right .profiler-controls {
181
229
  border-left: 1px solid #888; }
182
230
  .profiler-results.profiler-bottom {
183
231
  bottom: 0px; }
184
232
  .profiler-results.profiler-bottom.profiler-left {
185
233
  left: 0px; }
186
- .profiler-results.profiler-bottom.profiler-left.profiler-no-controls .profiler-totals, .profiler-results.profiler-bottom.profiler-left.profiler-no-controls .profiler-result:first-child .profiler-button, .profiler-results.profiler-bottom.profiler-left .profiler-controls {
234
+ .profiler-results.profiler-bottom.profiler-left.profiler-no-controls .profiler-totals,
235
+ .profiler-results.profiler-bottom.profiler-left.profiler-no-controls .profiler-result:first-child .profiler-button,
236
+ .profiler-results.profiler-bottom.profiler-left .profiler-controls {
187
237
  -webkit-border-top-right-radius: 10px;
188
238
  -moz-border-radius-topright: 10px;
189
239
  border-top-right-radius: 10px; }
190
- .profiler-results.profiler-bottom.profiler-left .profiler-button, .profiler-results.profiler-bottom.profiler-left .profiler-controls {
240
+ .profiler-results.profiler-bottom.profiler-left .profiler-button,
241
+ .profiler-results.profiler-bottom.profiler-left .profiler-controls {
191
242
  border-right: 1px solid #888; }
192
243
  .profiler-results.profiler-bottom.profiler-right {
193
244
  right: 0px; }
194
- .profiler-results.profiler-bottom.profiler-right.profiler-no-controls .profiler-totals, .profiler-results.profiler-bottom.profiler-right.profiler-no-controls .profiler-result:first-child .profiler-button, .profiler-results.profiler-bottom.profiler-right .profiler-controls {
245
+ .profiler-results.profiler-bottom.profiler-right.profiler-no-controls .profiler-totals,
246
+ .profiler-results.profiler-bottom.profiler-right.profiler-no-controls .profiler-result:first-child .profiler-button,
247
+ .profiler-results.profiler-bottom.profiler-right .profiler-controls {
195
248
  -webkit-border-bottom-top-radius: 10px;
196
249
  -moz-border-radius-topleft: 10px;
197
250
  border-top-left-radius: 10px; }
198
- .profiler-results.profiler-bottom.profiler-right .profiler-button, .profiler-results.profiler-bottom.profiler-right .profiler-controls {
251
+ .profiler-results.profiler-bottom.profiler-right .profiler-button,
252
+ .profiler-results.profiler-bottom.profiler-right .profiler-controls {
199
253
  border-left: 1px solid #888; }
200
- .profiler-results .profiler-button, .profiler-results .profiler-controls {
254
+ .profiler-results .profiler-button,
255
+ .profiler-results .profiler-controls {
201
256
  display: none;
202
257
  z-index: 2147483640;
203
258
  border-bottom: 1px solid #888;
@@ -205,12 +260,17 @@
205
260
  padding: 4px 7px;
206
261
  text-align: right;
207
262
  cursor: pointer; }
208
- .profiler-results .profiler-button.profiler-button-active, .profiler-results .profiler-controls.profiler-button-active {
263
+ .profiler-results .profiler-button.profiler-button-active,
264
+ .profiler-results .profiler-controls.profiler-button-active {
209
265
  background-color: maroon; }
210
- .profiler-results .profiler-button.profiler-button-active .profiler-number, .profiler-results .profiler-button.profiler-button-active .profiler-nuclear, .profiler-results .profiler-controls.profiler-button-active .profiler-number, .profiler-results .profiler-controls.profiler-button-active .profiler-nuclear {
266
+ .profiler-results .profiler-button.profiler-button-active .profiler-number,
267
+ .profiler-results .profiler-button.profiler-button-active .profiler-nuclear,
268
+ .profiler-results .profiler-controls.profiler-button-active .profiler-number,
269
+ .profiler-results .profiler-controls.profiler-button-active .profiler-nuclear {
211
270
  color: #fff;
212
271
  font-weight: bold; }
213
- .profiler-results .profiler-button.profiler-button-active .profiler-unit, .profiler-results .profiler-controls.profiler-button-active .profiler-unit {
272
+ .profiler-results .profiler-button.profiler-button-active .profiler-unit,
273
+ .profiler-results .profiler-controls.profiler-button-active .profiler-unit {
214
274
  color: #fff;
215
275
  font-weight: normal; }
216
276
  .profiler-results .profiler-totals .profiler-reqs {
@@ -258,7 +318,8 @@
258
318
  display: none; }
259
319
  .profiler-results .profiler-popup .profiler-info .profiler-server-time {
260
320
  font-size: 95%; }
261
- .profiler-results .profiler-popup .profiler-timings th, .profiler-results .profiler-popup .profiler-timings td {
321
+ .profiler-results .profiler-popup .profiler-timings th,
322
+ .profiler-results .profiler-popup .profiler-timings td {
262
323
  padding-left: 6px;
263
324
  padding-right: 6px; }
264
325
  .profiler-results .profiler-popup .profiler-timings th {
@@ -313,7 +374,8 @@
313
374
  padding-right: 20px;
314
375
  font-size: 80%;
315
376
  color: #888; }
316
- .profiler-result-full .profiler-result .profiler-popup .profiler-timings td, .profiler-result-full .profiler-result .profiler-popup .profiler-timings th {
377
+ .profiler-result-full .profiler-result .profiler-popup .profiler-timings td,
378
+ .profiler-result-full .profiler-result .profiler-popup .profiler-timings th {
317
379
  padding-left: 8px;
318
380
  padding-right: 8px; }
319
381
  .profiler-result-full .profiler-result .profiler-popup .profiler-timings th {
@@ -339,3 +401,9 @@
339
401
  .profiler-result-full .profiler-result .profiler-queries .profiler-info div {
340
402
  text-align: right;
341
403
  margin-bottom: 5px; }
404
+
405
+ @keyframes highlight-in {
406
+ 0% {
407
+ background: #ffffbb; }
408
+ 100% {
409
+ background: #fff; } }