diff --git a/lib/html/includes.css b/lib/html/includes.css index 5c753c46..8c3d30e8 100644 --- a/lib/html/includes.css +++ b/lib/html/includes.css @@ -76,6 +76,8 @@ font-family: Helvetica, Arial, sans-serif; } .profiler-result .profiler-toggle-duration-with-children { float: right; } + .profiler-result .profiler-snapshots-page-link { + float: left; } .profiler-result table.profiler-client-timings { margin-top: 10px; } .profiler-result .profiler-label { diff --git a/lib/html/includes.js b/lib/html/includes.js index 46565f24..87bd60cc 100644 --- a/lib/html/includes.js +++ b/lib/html/includes.js @@ -965,7 +965,7 @@ var MiniProfiler = (function() { var script = document.getElementById("mini-profiler"); if (!script || !script.getAttribute) return; - options = (function() { + this.options = options = (function() { var version = script.getAttribute("data-version"); var path = script.getAttribute("data-path"); var currentId = script.getAttribute("data-current-id"); diff --git a/lib/html/includes.scss b/lib/html/includes.scss index c0ef2cba..b98ea069 100644 --- a/lib/html/includes.scss +++ b/lib/html/includes.scss @@ -68,6 +68,9 @@ $zindex: 2147483640; // near 32bit max 2147483647 .profiler-toggle-duration-with-children { float: right; } + .profiler-snapshots-page-link { + float: left; + } table.profiler-client-timings { margin-top: 10px; } diff --git a/lib/html/includes.tmpl b/lib/html/includes.tmpl index 3229ce49..97d323f7 100644 --- a/lib/html/includes.tmpl +++ b/lib/html/includes.tmpl @@ -45,6 +45,10 @@ {{= MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) }} {{?}} show time with children + snapshots {{? it.has_sql_timings}} diff --git a/lib/html/vendor.js b/lib/html/vendor.js index 524588e6..d79c794c 100644 --- a/lib/html/vendor.js +++ b/lib/html/vendor.js @@ -7,7 +7,7 @@ MiniProfiler.templates = {}; MiniProfiler.templates["profilerTemplate"] = function anonymous(it ) { -var out='
';if(it.has_duplicate_sql_timings){out+='!';}out+=' '+( MiniProfiler.formatDuration(it.duration_milliseconds))+' ms ';if(MiniProfiler.showTotalSqlCount()){out+=' '+( it.sql_count)+' sql ';}out+='
'+( it.name)+' ('+( MiniProfiler.formatDuration(it.duration_milliseconds))+' ms) '+( it.machine_name)+' on '+( MiniProfiler.renderDate(it.started))+'
';if(it.has_sql_timings){out+=' ';}out+=' ';var arr1=it.custom_timing_names;if(arr1){var value,i1=-1,l1=arr1.length-1;while(i1'+( value.toLowerCase() )+' (ms) ';} } out+=' '+( MiniProfiler.templates.timingTemplate({timing: it.root, page: it}) )+' ';if(it.has_sql_timings){out+=' ';}out+=' ';var arr2=it.custom_timing_names;if(arr2){var value,i2=-1,l2=arr2.length-1;while(i2 '+( MiniProfiler.formatDuration(it.custom_timing_stats[value].duration / it.duration_milliseconds * 100) )+' % in '+( value.toLowerCase() )+' ';} } out+='
duration (ms) with children (ms) from start (ms)query time (ms)
';if(!it.client_timings){out+=' '+( MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) )+' ';}out+=' show time with children '+( MiniProfiler.formatDuration(it.duration_milliseconds_in_sql / it.duration_milliseconds * 100) )+' % in sql
';if(it.client_timings){out+=' ';var arr3=MiniProfiler.getClientTimings(it.client_timings);if(arr3){var value,i3=-1,l3=arr3.length-1;while(i3 ';} } out+='
client event duration (ms) from start (ms)
'+( value.name )+' ';if(value.duration >= 0){out+=' '+( MiniProfiler.formatDuration(value.duration) )+' ';}out+=' +'+( MiniProfiler.formatDuration(value.start) )+'
'+( MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) )+'
';}out+=' ';if(it.custom_fields && Object.keys(it.custom_fields).length > 0){out+='

Snapshot custom fields

';var arr4=Object.keys(it.custom_fields);if(arr4){var key,i4=-1,l4=arr4.length-1;while(i4 ';} } out+='
'+( key )+' '+( it.custom_fields[key] )+'
';}out+='
';if(it.has_sql_timings){out+='
';var arr5=MiniProfiler.getSqlTimings(it.root);if(arr5){var value,index=-1,l5=arr5.length-1;while(indexms ';if(MiniProfiler.showTotalSqlCount()){out+=' '+( it.sql_count)+' sql ';}out+='
'+( it.name)+' ('+( MiniProfiler.formatDuration(it.duration_milliseconds))+' ms) '+( it.machine_name)+' on '+( MiniProfiler.renderDate(it.started))+'
step
time from start
query type
duration
call stack
query
';if(it.has_sql_timings){out+=' ';}out+=' ';var arr1=it.custom_timing_names;if(arr1){var value,i1=-1,l1=arr1.length-1;while(i1'+( value.toLowerCase() )+' (ms) ';} } out+=' '+( MiniProfiler.templates.timingTemplate({timing: it.root, page: it}) )+' ';if(it.has_sql_timings){out+=' ';}out+=' ';var arr2=it.custom_timing_names;if(arr2){var value,i2=-1,l2=arr2.length-1;while(i2 '+( MiniProfiler.formatDuration(it.custom_timing_stats[value].duration / it.duration_milliseconds * 100) )+' % in '+( value.toLowerCase() )+' ';} } out+='
duration (ms) with children (ms) from start (ms)query time (ms)
';if(!it.client_timings){out+=' '+( MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) )+' ';}out+=' show time with children snapshots '+( MiniProfiler.formatDuration(it.duration_milliseconds_in_sql / it.duration_milliseconds * 100) )+' % in sql
';if(it.client_timings){out+=' ';var arr3=MiniProfiler.getClientTimings(it.client_timings);if(arr3){var value,i3=-1,l3=arr3.length-1;while(i3 ';} } out+='
client event duration (ms) from start (ms)
'+( value.name )+' ';if(value.duration >= 0){out+=' '+( MiniProfiler.formatDuration(value.duration) )+' ';}out+=' +'+( MiniProfiler.formatDuration(value.start) )+'
'+( MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) )+'
';}out+=' ';if(it.custom_fields && Object.keys(it.custom_fields).length > 0){out+='

Snapshot custom fields

';var arr4=Object.keys(it.custom_fields);if(arr4){var key,i4=-1,l4=arr4.length-1;while(i4 ';} } out+='
'+( key )+' '+( it.custom_fields[key] )+'
';}out+='
';if(it.has_sql_timings){out+='
';var arr5=MiniProfiler.getSqlTimings(it.root);if(arr5){var value,index=-1,l5=arr5.length-1;while(index "max-age:#{cache_control_value}") + rack_file = Rack::File.new(MiniProfiler.resources_root, 'Cache-Control' => "max-age=#{cache_control_value}") rack_file.call(resources_env) end diff --git a/lib/mini_profiler/storage/redis_store.rb b/lib/mini_profiler/storage/redis_store.rb index a4cd2197..1b93e655 100644 --- a/lib/mini_profiler/storage/redis_store.rb +++ b/lib/mini_profiler/storage/redis_store.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'digest' + module Rack class MiniProfiler class RedisStore < AbstractStore
step
time from start
query type
duration
call stack
query