Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions samples/Samples.AspNetCore2/Controllers/TestController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,41 @@ public IActionResult MinSaveMs()
return Content("All good");
}

public IActionResult Errored()
{
var profiler = MiniProfiler.Current;

using (profiler.StepIf("Stall step", 50))
{
Thread.Sleep(60);
}

using (profiler.StepIf("Show show up with children", 10, true))
{
Thread.Sleep(5);
using (profiler.Step("Step A"))
{
Thread.Sleep(10);
}
using (profiler.Step("Step B"))
{
Thread.Sleep(10);
}
using (profiler.StepIf("Should not show up", 15))
{
Thread.Sleep(10);
}
}

using (var step = profiler.CustomTimingIf("error", "Should show up as warning: some exception message", 5))
{
step.Errored = true;
Thread.Sleep(10);
}

return Content("All good...except the error!");
}

public IActionResult ParameterizedSqlWithEnums()
{
using (var conn = GetConnection())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<li><a asp-controller="Test" asp-action="MultipleRedirect">Multiple Redirects</a></li>
<li><a asp-controller="Test" asp-action="ViewProfiling">View Profiling</a></li>
<li><a asp-controller="Test" asp-action="EntityFrameworkCore">Entity Framework Core</a></li>
<li><a asp-controller="Test" asp-action="Errored">Error test</a></li>
<li><a asp-area="MySpace" asp-controller="Area" asp-action="Simple">Area Route</a></li>
</ul>
</div>
Expand Down
35 changes: 35 additions & 0 deletions samples/Samples.AspNetCore3/Controllers/TestController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,41 @@ public IActionResult MinSaveMs()
return Content("All good");
}

public IActionResult Errored()
{
var profiler = MiniProfiler.Current;

using (profiler.StepIf("Stall step", 50))
{
Thread.Sleep(60);
}

using (profiler.StepIf("Show show up with children", 10, true))
{
Thread.Sleep(5);
using (profiler.Step("Step A"))
{
Thread.Sleep(10);
}
using (profiler.Step("Step B"))
{
Thread.Sleep(10);
}
using (profiler.StepIf("Should not show up", 15))
{
Thread.Sleep(10);
}
}

using (var step = profiler.CustomTimingIf("error", "Should show up as warning: some exception message", 5))
{
step.Errored = true;
Thread.Sleep(10);
}

return Content("All good...except the error!");
}

public IActionResult ParameterizedSqlWithEnums()
{
using (var conn = GetConnection())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<li><a asp-controller="Test" asp-action="MultipleRedirect">Multiple Redirects</a></li>
<li><a asp-controller="Test" asp-action="ViewProfiling">View Profiling</a></li>
<li><a asp-controller="Test" asp-action="EntityFrameworkCore">Entity Framework Core</a></li>
<li><a asp-controller="Test" asp-action="Errored">Error test</a></li>
<li><a asp-area="MySpace" asp-controller="Area" asp-action="Simple">Area Route</a></li>
</ul>
</div>
Expand Down
11 changes: 11 additions & 0 deletions src/MiniProfiler.Shared/ui/includes.css
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@
.mp-result .mp-timings .mp-queries-show .mp-unit {
color: #0077cc;
}
.mp-result .mp-timings .mp-queries-show.mp-queries-warning {
color: #C91D2E;
font-weight: bold;
}
.mp-result .mp-timings .mp-queries-duration {
padding-left: 6px;
}
Expand Down Expand Up @@ -453,6 +457,13 @@
.mp-results .mp-button {
user-select: none;
}
.mp-results .mp-button.mp-button-warning {
font-weight: bold;
background-color: #E06C77;
}
.mp-results .mp-button.mp-button-warning .mp-unit {
color: #ddd;
}
.mp-results .mp-button .mp-warning {
font-weight: bold;
}
Expand Down
14 changes: 14 additions & 0 deletions src/MiniProfiler.Shared/ui/includes.less
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,11 @@
.mp-number, .mp-unit {
color: #0077cc;
}

&.mp-queries-warning {
color: #C91D2E;
font-weight: bold;
}
}

.mp-queries-duration {
Expand Down Expand Up @@ -529,6 +534,15 @@
.mp-button {
user-select: none;

&.mp-button-warning {
font-weight: bold;
background-color: #E06C77;

.mp-unit {
color: #ddd;
}
}

.mp-warning {
font-weight: bold;
}
Expand Down
2 changes: 1 addition & 1 deletion src/MiniProfiler.Shared/ui/includes.min.css

Large diffs are not rendered by default.

17 changes: 12 additions & 5 deletions src/MiniProfiler.Shared/ui/lib/MiniProfiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ namespace StackExchange.Profiling {
CustomTimingStats: { [id: string]: ICustomTimingStat };
HasCustomTimings: boolean;
HasDuplicateCustomTimings: boolean;
HasWarning: boolean;
HasTrivialTimings: boolean;
AllCustomTimings: ICustomTiming[];
}
Expand Down Expand Up @@ -53,6 +54,7 @@ namespace StackExchange.Profiling {
Depth: number;
HasCustomTimings: boolean;
HasDuplicateCustomTimings: { [id: string]: boolean };
HasWarnings: { [id: string]: boolean };
IsTrivial: boolean;
Parent: ITiming;
// added for gaps (TODO: change all this)
Expand Down Expand Up @@ -457,6 +459,7 @@ namespace StackExchange.Profiling {
timing.Parent = parent;
timing.Depth = depth;
timing.HasDuplicateCustomTimings = {};
timing.HasWarnings = {};

for (const child of timing.Children || []) {
processTiming(child, timing, depth + 1);
Expand Down Expand Up @@ -496,6 +499,10 @@ namespace StackExchange.Profiling {
if (!ignored) {
customStat.Count++;
}
if (customTiming.Errored) {
timing.HasWarnings[customType] = true;
result.HasWarning = true;
}

if (customTiming.CommandString && duplicates[customTiming.CommandString]) {
customTiming.IsDuplicate = true;
Expand Down Expand Up @@ -665,9 +672,9 @@ namespace StackExchange.Profiling {
</td>
${customTimingTypes.map((tk) => timing.CustomTimings[tk] ? `
<td class="mp-duration">
<a class="mp-queries-show" title="${duration(timing.CustomTimingStats[tk].Duration)} ms in ${timing.CustomTimingStats[tk].Count} ${encode(tk)} call(s)${timing.HasDuplicateCustomTimings[tk] ? '; duplicate calls detected!' : ''}">
<a class="mp-queries-show${(timing.HasWarnings[tk] ? ' mp-queries-warning' : '')}" title="${duration(timing.CustomTimingStats[tk].Duration)} ms in ${timing.CustomTimingStats[tk].Count} ${encode(tk)} call(s)${timing.HasDuplicateCustomTimings[tk] ? '; duplicate calls detected!' : ''}">
${duration(timing.CustomTimingStats[tk].Duration)}
(${timing.CustomTimingStats[tk].Count}${(timing.HasDuplicateCustomTimings[tk] ? '<span class="mp-warning">!</span>' : '')})
(${timing.CustomTimingStats[tk].Count}${((timing.HasDuplicateCustomTimings[tk] || timing.HasWarnings[tk]) ? '<span class="mp-warning">!</span>' : '')})
</a>
</td>` : '<td></td>').join('')}
</tr>`;
Expand Down Expand Up @@ -811,7 +818,7 @@ namespace StackExchange.Profiling {
${renderGap(ct.PrevGap)}
<tr class="${(index % 2 === 1 ? 'mp-odd' : '')}" data-timing-id="${ct.Parent.Id}">
<td>
<div class="mp-call-type">${encode(ct.CallType)}${encode(!ct.ExecuteType || ct.CallType === ct.ExecuteType ? '' : ' - ' + ct.ExecuteType)}${(ct.IsDuplicate ? ' <span class="mp-warning" title="Duplicate">!</span>' : '')}</div>
<div class="mp-call-type${(ct.Errored ? ' mp-warning' : '')}">${encode(ct.CallType)}${encode(!ct.ExecuteType || ct.CallType === ct.ExecuteType ? '' : ' - ' + ct.ExecuteType)}${((ct.IsDuplicate || ct.Errored) ? ' <span class="mp-warning" title="Duplicate">!</span>' : '')}</div>
<div>${encode(ct.Parent.Name)}</div>
<div class="mp-number">
${duration(ct.DurationMilliseconds)} <span class="mp-unit">ms (T+${duration(ct.StartMilliseconds)} ms)</span>
Expand All @@ -836,9 +843,9 @@ namespace StackExchange.Profiling {

return mp.jq(`
<div class="mp-result${(this.options.showTrivial ? ' show-trivial' : '')}${(this.options.showChildrenTime ? ' show-columns' : '')}">
<div class="mp-button" title="${encode(p.Name)}">
<div class="mp-button${(p.HasWarning ? ' mp-button-warning' : '')}" title="${encode(p.Name)}">
<span class="mp-number">${duration(p.DurationMilliseconds)} <span class="mp-unit">ms</span></span>
${(p.HasDuplicateCustomTimings ? '<span class="mp-warning">!</span>' : '')}
${((p.HasDuplicateCustomTimings || p.HasWarning) ? '<span class="mp-warning">!</span>' : '')}
</div>
<div class="mp-popup">
<div class="mp-info">
Expand Down