piko-sharp-kit 0.0.1

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 (86) hide show
  1. checksums.yaml +7 -0
  2. data/piko-sharp-kit.gemspec +11 -0
  3. data/rack-mini-profiler-4.0.1/CHANGELOG.md +424 -0
  4. data/rack-mini-profiler-4.0.1/README.md +542 -0
  5. data/rack-mini-profiler-4.0.1/lib/enable_rails_patches.rb +5 -0
  6. data/rack-mini-profiler-4.0.1/lib/generators/rack_mini_profiler/USAGE +9 -0
  7. data/rack-mini-profiler-4.0.1/lib/generators/rack_mini_profiler/install_generator.rb +13 -0
  8. data/rack-mini-profiler-4.0.1/lib/generators/rack_mini_profiler/templates/rack_mini_profiler.rb +8 -0
  9. data/rack-mini-profiler-4.0.1/lib/generators/rack_profiler/USAGE +2 -0
  10. data/rack-mini-profiler-4.0.1/lib/generators/rack_profiler/install_generator.rb +16 -0
  11. data/rack-mini-profiler-4.0.1/lib/html/dot.1.1.2.min.js +2 -0
  12. data/rack-mini-profiler-4.0.1/lib/html/includes.css +474 -0
  13. data/rack-mini-profiler-4.0.1/lib/html/includes.js +1520 -0
  14. data/rack-mini-profiler-4.0.1/lib/html/includes.scss +698 -0
  15. data/rack-mini-profiler-4.0.1/lib/html/includes.tmpl +333 -0
  16. data/rack-mini-profiler-4.0.1/lib/html/pretty-print.js +810 -0
  17. data/rack-mini-profiler-4.0.1/lib/html/profile_handler.js +1 -0
  18. data/rack-mini-profiler-4.0.1/lib/html/rack-mini-profiler.css +3 -0
  19. data/rack-mini-profiler-4.0.1/lib/html/rack-mini-profiler.js +2 -0
  20. data/rack-mini-profiler-4.0.1/lib/html/share.html +10 -0
  21. data/rack-mini-profiler-4.0.1/lib/html/speedscope/LICENSE +21 -0
  22. data/rack-mini-profiler-4.0.1/lib/html/speedscope/README.md +3 -0
  23. data/rack-mini-profiler-4.0.1/lib/html/speedscope/demangle-cpp.1768f4cc.js +4 -0
  24. data/rack-mini-profiler-4.0.1/lib/html/speedscope/favicon-16x16.f74b3187.png +0 -0
  25. data/rack-mini-profiler-4.0.1/lib/html/speedscope/favicon-32x32.bc503437.png +0 -0
  26. data/rack-mini-profiler-4.0.1/lib/html/speedscope/file-format-schema.json +324 -0
  27. data/rack-mini-profiler-4.0.1/lib/html/speedscope/fonts/source-code-pro-regular.css +8 -0
  28. data/rack-mini-profiler-4.0.1/lib/html/speedscope/fonts/source-code-pro-v13-regular.woff +0 -0
  29. data/rack-mini-profiler-4.0.1/lib/html/speedscope/fonts/source-code-pro-v13-regular.woff2 +0 -0
  30. data/rack-mini-profiler-4.0.1/lib/html/speedscope/import.8ae8aa3d.js +123 -0
  31. data/rack-mini-profiler-4.0.1/lib/html/speedscope/index.html +2 -0
  32. data/rack-mini-profiler-4.0.1/lib/html/speedscope/release.txt +3 -0
  33. data/rack-mini-profiler-4.0.1/lib/html/speedscope/reset.8c46b7a1.css +2 -0
  34. data/rack-mini-profiler-4.0.1/lib/html/speedscope/source-map.438fa06b.js +24 -0
  35. data/rack-mini-profiler-4.0.1/lib/html/speedscope/speedscope.f27db165.js +193 -0
  36. data/rack-mini-profiler-4.0.1/lib/html/vendor.js +848 -0
  37. data/rack-mini-profiler-4.0.1/lib/mini_profiler/actions.rb +157 -0
  38. data/rack-mini-profiler-4.0.1/lib/mini_profiler/asset_version.rb +6 -0
  39. data/rack-mini-profiler-4.0.1/lib/mini_profiler/client_settings.rb +127 -0
  40. data/rack-mini-profiler-4.0.1/lib/mini_profiler/config.rb +146 -0
  41. data/rack-mini-profiler-4.0.1/lib/mini_profiler/context.rb +14 -0
  42. data/rack-mini-profiler-4.0.1/lib/mini_profiler/gc_profiler.rb +158 -0
  43. data/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb +167 -0
  44. data/rack-mini-profiler-4.0.1/lib/mini_profiler/snapshots_transporter.rb +111 -0
  45. data/rack-mini-profiler-4.0.1/lib/mini_profiler/storage/abstract_store.rb +97 -0
  46. data/rack-mini-profiler-4.0.1/lib/mini_profiler/storage/file_store.rb +179 -0
  47. data/rack-mini-profiler-4.0.1/lib/mini_profiler/storage/memcache_store.rb +105 -0
  48. data/rack-mini-profiler-4.0.1/lib/mini_profiler/storage/memory_store.rb +233 -0
  49. data/rack-mini-profiler-4.0.1/lib/mini_profiler/storage/redis_store.rb +353 -0
  50. data/rack-mini-profiler-4.0.1/lib/mini_profiler/storage.rb +7 -0
  51. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct/base.rb +39 -0
  52. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct/client.rb +90 -0
  53. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct/custom.rb +25 -0
  54. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct/page.rb +146 -0
  55. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct/request.rb +186 -0
  56. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct/sql.rb +89 -0
  57. data/rack-mini-profiler-4.0.1/lib/mini_profiler/timer_struct.rb +8 -0
  58. data/rack-mini-profiler-4.0.1/lib/mini_profiler/version.rb +8 -0
  59. data/rack-mini-profiler-4.0.1/lib/mini_profiler/views.rb +198 -0
  60. data/rack-mini-profiler-4.0.1/lib/mini_profiler.rb +670 -0
  61. data/rack-mini-profiler-4.0.1/lib/mini_profiler_rails/railtie.rb +234 -0
  62. data/rack-mini-profiler-4.0.1/lib/mini_profiler_rails/railtie_methods.rb +61 -0
  63. data/rack-mini-profiler-4.0.1/lib/patches/db/activerecord.rb +44 -0
  64. data/rack-mini-profiler-4.0.1/lib/patches/db/mongo.rb +18 -0
  65. data/rack-mini-profiler-4.0.1/lib/patches/db/moped.rb +14 -0
  66. data/rack-mini-profiler-4.0.1/lib/patches/db/mysql2/alias_method.rb +30 -0
  67. data/rack-mini-profiler-4.0.1/lib/patches/db/mysql2/prepend.rb +34 -0
  68. data/rack-mini-profiler-4.0.1/lib/patches/db/mysql2.rb +7 -0
  69. data/rack-mini-profiler-4.0.1/lib/patches/db/neo4j.rb +16 -0
  70. data/rack-mini-profiler-4.0.1/lib/patches/db/nobrainer.rb +31 -0
  71. data/rack-mini-profiler-4.0.1/lib/patches/db/oracle_enhanced.rb +70 -0
  72. data/rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb +121 -0
  73. data/rack-mini-profiler-4.0.1/lib/patches/db/pg/prepend.rb +115 -0
  74. data/rack-mini-profiler-4.0.1/lib/patches/db/pg.rb +7 -0
  75. data/rack-mini-profiler-4.0.1/lib/patches/db/plucky.rb +49 -0
  76. data/rack-mini-profiler-4.0.1/lib/patches/db/riak.rb +105 -0
  77. data/rack-mini-profiler-4.0.1/lib/patches/db/rsolr.rb +26 -0
  78. data/rack-mini-profiler-4.0.1/lib/patches/db/sequel.rb +12 -0
  79. data/rack-mini-profiler-4.0.1/lib/patches/net_patches.rb +27 -0
  80. data/rack-mini-profiler-4.0.1/lib/patches/sql_patches.rb +74 -0
  81. data/rack-mini-profiler-4.0.1/lib/prepend_mysql2_patch.rb +5 -0
  82. data/rack-mini-profiler-4.0.1/lib/prepend_net_http_patch.rb +5 -0
  83. data/rack-mini-profiler-4.0.1/lib/prepend_pg_patch.rb +5 -0
  84. data/rack-mini-profiler-4.0.1/lib/rack-mini-profiler.rb +13 -0
  85. data/rack-mini-profiler-4.0.1/rack-mini-profiler.gemspec +49 -0
  86. metadata +124 -0
@@ -0,0 +1,333 @@
1
+ <script id="profilerTemplate" type="text/x-dot-tmpl">
2
+ <div class="profiler-result">
3
+ <div class="profiler-button {{? it.has_duplicate_sql_timings}}profiler-warning{{?}}">
4
+ {{? it.has_duplicate_sql_timings}}<span class="profiler-nuclear">!</span>{{?}}
5
+ <span class="profiler-number profiler-duration-milliseconds">
6
+ {{= MiniProfiler.formatDuration(it.duration_milliseconds)}} <span class="profiler-unit">ms</span>
7
+ </span>
8
+ {{? MiniProfiler.showTotalSqlCount()}}
9
+ <span class="profiler-number profiler-sql-count">
10
+ {{= it.sql_count}} <span class="profiler-unit">sql</span>
11
+ </span>
12
+ {{?}}
13
+ <span class="profiler-name">
14
+ {{? it.name.length >= 30 }}
15
+ {{= it.name.substring(0,15) + "..." + it.name.slice(-15) }}
16
+ {{??}}
17
+ {{= it.name}}
18
+ {{?}}
19
+ </span>
20
+ </div>
21
+
22
+ <div class="profiler-popup">
23
+ <div class="profiler-info">
24
+ <span class="profiler-name" title="{{= it.name}}">
25
+ {{= it.name }} <span class="profiler-overall-duration">({{= MiniProfiler.formatDuration(it.duration_milliseconds)}} ms)</span>
26
+ </span>
27
+ <span class="profiler-server-time">{{= it.machine_name}} on {{= MiniProfiler.renderDate(it.started_formatted)}}</span>
28
+ </div>
29
+ <div class="profiler-output">
30
+ <table class="profiler-timings">
31
+ <thead>
32
+ <tr>
33
+ <th>event</th>
34
+ <th>duration (ms)</th>
35
+ <th class="profiler-duration-with-children">with children (ms)</th>
36
+ <th class="time-from-start">from start (ms)</th>
37
+ {{? it.has_sql_timings}}
38
+ <th colspan="2">query time (ms)</th>
39
+ {{?}}
40
+ {{~ it.custom_timing_names :value}}
41
+ <th colspan="2">{{= value.toLowerCase() }} (ms)</th>
42
+ {{~}}
43
+ </tr>
44
+ </thead>
45
+ <tbody>
46
+ {{= MiniProfiler.templates.timingTemplate({timing: it.root, page: it}) }}
47
+ </tbody>
48
+ {{? it.has_sql_timings}}
49
+ <tfoot>
50
+ <tr>
51
+ <td colspan="1">
52
+ SQL Summary:
53
+ </td>
54
+ <td colspan="5" title="percent of total request time spent in SQL">
55
+ {{=it.sql_count}} {{? it.cached_sql_count > 0 }} ({{=it.cached_sql_count}} cached) {{?}}
56
+ <span class="profiler-unit" title="percent of total request time spent in SQL"> -
57
+ {{= MiniProfiler.formatDuration(it.duration_milliseconds_in_sql / it.duration_milliseconds * 100) }}% in sql
58
+ </span>
59
+ </td>
60
+ </tr>
61
+ </tfoot>
62
+ {{?}}
63
+ </table>
64
+
65
+ <div class="profiler-timings-summary">
66
+ <div>
67
+ {{? !it.client_timings}}
68
+ {{= MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) }}
69
+ {{?}}
70
+ <a class="profiler-toggle-duration-with-children" title="toggles column with aggregate child durations">show time with children</a>
71
+ <a
72
+ class="profiler-snapshots-page-link"
73
+ title="Go to snapshots page"
74
+ href="{{= MiniProfiler.options.path }}snapshots">snapshots</a>
75
+ </div>
76
+ {{~ it.custom_timing_names :value}}
77
+ <div class="profiler-number profiler-percentage-in-sql" title="{{= it.custom_timing_stats[value].count }} {{= value.toLowerCase() }} invocations spent {{= MiniProfiler.formatDuration(it.custom_timing_stats[value].duration) }} ms of total request time">
78
+ {{= MiniProfiler.formatDuration(it.custom_timing_stats[value].duration / it.duration_milliseconds * 100) }}
79
+ <span class="profiler-unit">% in {{= value.toLowerCase() }}</span>
80
+ </div>
81
+ {{~}}
82
+ </div>
83
+
84
+ {{? it.client_timings}}
85
+ <table class="profiler-timings profiler-client-timings">
86
+ <thead>
87
+ <tr>
88
+ <th>client event</th>
89
+ <th>duration (ms)</th>
90
+ <th>from start (ms)</th>
91
+ </tr>
92
+ </thead>
93
+ <tbody>
94
+ {{~ MiniProfiler.getClientTimings(it.client_timings) :value}}
95
+ <tr class="{{? value.isTrivial }}profiler-trivial{{?}}">
96
+ <td class="profiler-label">{{= value.name }}</td>
97
+ <td class="profiler-duration">
98
+ {{? value.duration >= 0}}
99
+ <span class="profiler-unit"></span>{{= MiniProfiler.formatDuration(value.duration) }}
100
+ {{?}}
101
+ </td>
102
+ <td class="profiler-duration time-from-start">
103
+ <span class="profiler-unit">+</span>{{= MiniProfiler.formatDuration(value.start) }}
104
+ </td>
105
+ </tr>
106
+ {{~}}
107
+ </tbody>
108
+ <tfoot>
109
+ <td colspan="3">
110
+ {{= MiniProfiler.templates.linksTemplate({timing: it.root, page: it}) }}
111
+ </td>
112
+ </tfoot>
113
+ </table>
114
+ {{?}}
115
+ {{? it.custom_fields && Object.keys(it.custom_fields).length > 0 }}
116
+ <p class="custom-fields-title">Snapshot custom fields</p>
117
+ <table class="profiler-timings">
118
+ <tbody>
119
+ {{~ Object.keys(it.custom_fields) :key }}
120
+ <tr>
121
+ <td class="profiler-label">{{= key }}</td>
122
+ <td class="profiler-label">{{= it.custom_fields[key] }}</td>
123
+ </tr>
124
+ {{~}}
125
+ </tbody>
126
+ </table>
127
+ {{?}}
128
+ </div>
129
+ </div>
130
+
131
+ {{? it.has_sql_timings}}
132
+ <div class="profiler-queries">
133
+ <table>
134
+ <thead>
135
+ <tr>
136
+ <th class="ta-right">step<br />time from start<br />query type<br />duration<br />records</th>
137
+ <th class="ta-left">call stack<br />query</th>
138
+ </tr>
139
+ </thead>
140
+ <tbody>
141
+ {{~ MiniProfiler.getSqlTimings(it.root) :value:index}}
142
+ {{= MiniProfiler.templates.sqlGapTemplate({g: value.prevGap}) }}
143
+ {{= MiniProfiler.templates.sqlTimingTemplate({i: index, s: value}) }}
144
+ {{? value.nextGap}}
145
+ {{= MiniProfiler.templates.sqlGapTemplate({g: value.nextGap}) }}
146
+ {{?}}
147
+ {{~}}
148
+ </tbody>
149
+ </table>
150
+ <p class="profiler-trivial-gap-container">
151
+ <a class="profiler-toggle-trivial-gaps">show trivial gaps</a>
152
+ </p>
153
+ </div>
154
+ {{?}}
155
+ </div>
156
+ </script>
157
+
158
+ <script id="linksTemplate" type="text/x-dot-tmpl">
159
+ <a href="{{= MiniProfiler.shareUrl(it.page.id) }}" class="profiler-share-profiler-results" target="_blank">share</a>
160
+ <a href="{{= MiniProfiler.moreUrl(it.page.name) }}" class="profiler-more-actions">more</a>
161
+ {{? it.page.has_flamegraph}}
162
+ <a href="{{= MiniProfiler.flamegraphUrl(it.page.id) }}" class="profiler-show-flamegraph" target="_blank">flamegraph</a>
163
+ {{?}}
164
+ {{? it.custom_link}}
165
+ <a href="{{= it.custom_link }}" class="profiler-custom-link" target="_blank">{{= it.custom_link_name }}</a>
166
+ {{?}}
167
+ {{? it.page.has_trivial_timings}}
168
+ <a class="profiler-toggle-trivial" data-show-on-load="{{= it.page.has_all_trivial_timings }}" title="toggles any rows with &lt; {{= it.page.trivial_duration_threshold_milliseconds }} ms">
169
+ show trivial
170
+ </a>
171
+ {{?}}
172
+ </script>
173
+
174
+ <script id="timingTemplate" type="text/x-dot-tmpl">
175
+ <tr class="{{? it.timing.is_trivial }}profiler-trivial{{?}}" data-timing-id="{{= it.timing.id }}">
176
+ <td class="profiler-label" title="{{? it.timing.name && it.timing.name.length > 45 }}{{= it.timing.name }}{{?}}">
177
+ <span class="profiler-indent">{{= MiniProfiler.renderIndent(it.timing.depth) }}</span> {{= it.timing.name.slice(0,45) }}{{? it.timing.name && it.timing.name.length > 45 }}...{{?}}
178
+ </td>
179
+ <td class="profiler-duration" title="duration of this step without any children's durations">
180
+ {{= MiniProfiler.formatDuration(it.timing.duration_without_children_milliseconds) }}
181
+ </td>
182
+ <td class="profiler-duration profiler-duration-with-children" title="duration of this step and its children">
183
+ {{= MiniProfiler.formatDuration(it.timing.duration_milliseconds) }}
184
+ </td>
185
+ <td class="profiler-duration time-from-start" title="time elapsed since profiling started">
186
+ <span class="profiler-unit">+</span>{{= MiniProfiler.formatDuration(it.timing.start_milliseconds) }}
187
+ </td>
188
+
189
+ {{? it.timing.has_sql_timings}}
190
+ <td class="profiler-duration {{? it.timing.has_duplicate_sql_timings}}profiler-warning{{?}}" title="{{? it.timing.has_duplicate_sql_timings}}duplicate queries detected - {{?}}{{? it.timing.executed_readers > 0 || it.timing.executed_scalars > 0 || it.timing.executed_non_queries > 0}}{{= it.timing.executed_readers }} reader, {{= it.timing.executed_scalars }} scalar, {{= it.timing.executed_non_queries }} non-query statements executed{{?}}">
191
+ <a class="profiler-queries-show">
192
+ {{? it.timing.has_duplicate_sql_timings}}<span class="profiler-nuclear">!</span>{{?}}
193
+ {{= it.timing.sql_timings.length }} <span class="profiler-unit">sql</span>
194
+ </a>
195
+ </td>
196
+ <td class="profiler-duration" title="aggregate duration of all queries in this step (excludes children)">
197
+ {{= MiniProfiler.formatDuration(it.timing.sql_timings_duration_milliseconds) }}
198
+ </td>
199
+ {{??}}
200
+ <td colspan="2"></td>
201
+ {{?}}
202
+
203
+ {{~ it.page.custom_timing_names :value}}
204
+ {{? it.timing.custom_timings && it.timing.custom_timings[value]}}
205
+ <td class="profiler-duration" title="aggregate number of all {{= value.toLowerCase() }} invocations in this step (excludes children)">
206
+ {{= it.timing.custom_timings[value].length }} {{= value.toLowerCase() }}
207
+ </td>
208
+ <td class="profiler-duration" title="aggregate duration of all {{= value.toLowerCase() }} invocations in this step (excludes children)">
209
+ {{= MiniProfiler.formatDuration(it.timing.custom_timing_stats[value].duration) }}
210
+ </td>
211
+ {{??}}
212
+ <td colspan="2"></td>
213
+ {{?}}
214
+ {{~}}
215
+
216
+ </tr>
217
+
218
+ {{? it.timing.has_children}}
219
+ {{~ it.timing.children :value}}
220
+ {{= MiniProfiler.templates.timingTemplate({timing: value, page: it.page}) }}
221
+ {{~}}
222
+ {{?}}
223
+ </script>
224
+
225
+ <script id="sqlTimingTemplate" type="text/x-dot-tmpl">
226
+ <tr class="{{= it.s.row_class || '' }}" data-timing-id="{{= it.s.parent_timing_id }}">
227
+ <td class="profiler-info">
228
+ <div>{{= it.s.parent_timing_name }}</div>
229
+ <div class="profiler-number"><span class="profiler-unit">T+</span>{{= MiniProfiler.formatDuration(it.s.start_milliseconds) }} <span class="profiler-unit">ms</span></div>
230
+ <div>
231
+ {{? it.s.is_duplicate}}<span class="profiler-warning">DUPLICATE</span>{{?}}
232
+ {{= MiniProfiler.renderExecuteType(it.s.execute_type) }}
233
+ </div>
234
+ <div title="{{? it.s.execute_type == 3}}first result fetched: {{= it.s.first_fetch_duration_milliseconds }}ms{{?}}">{{= MiniProfiler.formatDuration(it.s.duration_milliseconds) }} <span class="profiler-unit">ms</span></div>
235
+ {{? it.s.row_count > 0 }}
236
+ <div title="number and type of records instantiated by query">{{= it.s.class_name }}: {{= it.s.row_count }}</div>
237
+ {{?}}
238
+ </td>
239
+ <td>
240
+ <div class="query">
241
+ <pre class="profiler-stack-trace">{{= it.s.stack_trace_snippet }}</pre>
242
+ {{? it.s.cached }}
243
+ <span class="cached"> [CACHE] </span>
244
+ {{?}}
245
+ {{? it.s.formatted_command_string}}
246
+ <pre class="prettyprint lang-sql"><code>{{= it.s.formatted_command_string }}; {{= MiniProfiler.formatParameters(it.s.parameters) }}</code></pre>
247
+ {{??}}
248
+ <i>Query redacted</i>
249
+ {{?}}
250
+ </div>
251
+ </td>
252
+ </tr>
253
+ </script>
254
+
255
+ <script id="sqlGapTemplate" type="text/x-dot-tmpl">
256
+ <tr class="profiler-gap-info{{? it.g.duration < 4}} profiler-trivial-gaps{{?}}">
257
+ <td class="profiler-info">
258
+ {{= it.g.duration }} <span class="profiler-unit">ms</span>
259
+ </td>
260
+ <td class="query">
261
+ <div>{{= it.g.topReason.name }} &mdash; {{= it.g.topReason.duration.toFixed(2) }} <span class="profiler-unit">ms</span></div>
262
+ </td>
263
+ </tr>
264
+ </script>
265
+
266
+ <script id="snapshotsGroupsList" type="text/x-dot-tmpl">
267
+ {{? it.list && it.list.length }}
268
+ <table class="snapshots-table">
269
+ <thead>
270
+ <tr>
271
+ <th>Requests Group</th>
272
+ <th>Worst Time (ms)</th>
273
+ <th>Best Time (ms)</th>
274
+ <th>No. of Snapshots</th>
275
+ </tr>
276
+ </thead>
277
+ <tbody>
278
+ {{~ it.list :row}}
279
+ <tr>
280
+ <td class="request-group"><a href="{{= row.url }}">{{= row.name }}</a></td>
281
+ <td>{{= MiniProfiler.formatDuration(row.worst_score) }}</td>
282
+ <td>{{= MiniProfiler.formatDuration(row.best_score) }}</td>
283
+ <td>{{= row.snapshots_count }}</td>
284
+ </tr>
285
+ {{~}}
286
+ </tbody>
287
+ </table>
288
+ {{??}}
289
+ <h2>No snapshots exist</h2>
290
+ {{?}}
291
+ </script>
292
+
293
+ <script id="snapshotsList" type="text/x-dot-tmpl">
294
+ {{ var data = it.data; }}
295
+ {{ var customFieldsNames = it.allCustomFieldsNames; }}
296
+ {{? data.list && data.list.length }}
297
+ <h2>Snapshots for {{= data.group_name }}</h2>
298
+ <table class="snapshots-table">
299
+ <thead>
300
+ <tr>
301
+ <th>ID</th>
302
+ <th>Duration (ms)</th>
303
+ <th>SQL Count</th>
304
+ {{~ customFieldsNames :name }}
305
+ <th>{{= name }}</th>
306
+ {{~}}
307
+ <th>Age</th>
308
+ </tr>
309
+ </thead>
310
+ <tbody>
311
+ {{~ data.list :row}}
312
+ <tr>
313
+ <td><a href="{{= row.url }}">
314
+ {{= row.id }}
315
+ </a></td>
316
+ <td>{{= MiniProfiler.formatDuration(row.duration) }}</td>
317
+ <td>{{= row.sql_count }}</td>
318
+ {{~ customFieldsNames :name }}
319
+ <td>{{= row.custom_fields[name] || "" }}</td>
320
+ {{~}}
321
+ <td>
322
+ {{? row.timestamp }}
323
+ {{= MiniProfiler.timestampToRelative(row.timestamp) }}
324
+ {{?}}
325
+ </td>
326
+ </tr>
327
+ {{~}}
328
+ </tbody>
329
+ </table>
330
+ {{??}}
331
+ <h2>No snapshots for {{= data.group_name }}</h2>
332
+ {{?}}
333
+ </script>