From e3650480af05fa8e9ab47276543e05de131ade1a Mon Sep 17 00:00:00 2001 From: Nick Craver Date: Fri, 6 Sep 2019 12:00:58 -0400 Subject: [PATCH] Custom timing errors: make them stand out in the UI Also adds a test route for them to the ASP.NET Core sample projects. --- .../Controllers/TestController.cs | 35 +++++++++++++++++++ .../Views/Shared/Index.LeftPanel.cshtml | 1 + .../Controllers/TestController.cs | 35 +++++++++++++++++++ .../Views/Shared/Index.LeftPanel.cshtml | 1 + src/MiniProfiler.Shared/ui/includes.css | 11 ++++++ src/MiniProfiler.Shared/ui/includes.less | 14 ++++++++ src/MiniProfiler.Shared/ui/includes.min.css | 2 +- .../ui/lib/MiniProfiler.ts | 17 ++++++--- 8 files changed, 110 insertions(+), 6 deletions(-) diff --git a/samples/Samples.AspNetCore2/Controllers/TestController.cs b/samples/Samples.AspNetCore2/Controllers/TestController.cs index 84dc2b677..424b1dc65 100644 --- a/samples/Samples.AspNetCore2/Controllers/TestController.cs +++ b/samples/Samples.AspNetCore2/Controllers/TestController.cs @@ -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()) diff --git a/samples/Samples.AspNetCore2/Views/Shared/Index.LeftPanel.cshtml b/samples/Samples.AspNetCore2/Views/Shared/Index.LeftPanel.cshtml index fc3ffcb92..fe1448624 100644 --- a/samples/Samples.AspNetCore2/Views/Shared/Index.LeftPanel.cshtml +++ b/samples/Samples.AspNetCore2/Views/Shared/Index.LeftPanel.cshtml @@ -13,6 +13,7 @@
  • Multiple Redirects
  • View Profiling
  • Entity Framework Core
  • +
  • Error test
  • Area Route
  • diff --git a/samples/Samples.AspNetCore3/Controllers/TestController.cs b/samples/Samples.AspNetCore3/Controllers/TestController.cs index 84dc2b677..424b1dc65 100644 --- a/samples/Samples.AspNetCore3/Controllers/TestController.cs +++ b/samples/Samples.AspNetCore3/Controllers/TestController.cs @@ -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()) diff --git a/samples/Samples.AspNetCore3/Views/Shared/Index.LeftPanel.cshtml b/samples/Samples.AspNetCore3/Views/Shared/Index.LeftPanel.cshtml index fc3ffcb92..fe1448624 100644 --- a/samples/Samples.AspNetCore3/Views/Shared/Index.LeftPanel.cshtml +++ b/samples/Samples.AspNetCore3/Views/Shared/Index.LeftPanel.cshtml @@ -13,6 +13,7 @@
  • Multiple Redirects
  • View Profiling
  • Entity Framework Core
  • +
  • Error test
  • Area Route
  • diff --git a/src/MiniProfiler.Shared/ui/includes.css b/src/MiniProfiler.Shared/ui/includes.css index 401ca0c44..c77c49ee9 100644 --- a/src/MiniProfiler.Shared/ui/includes.css +++ b/src/MiniProfiler.Shared/ui/includes.css @@ -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; } @@ -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; } diff --git a/src/MiniProfiler.Shared/ui/includes.less b/src/MiniProfiler.Shared/ui/includes.less index 125d3e86c..dd61852ef 100644 --- a/src/MiniProfiler.Shared/ui/includes.less +++ b/src/MiniProfiler.Shared/ui/includes.less @@ -217,6 +217,11 @@ .mp-number, .mp-unit { color: #0077cc; } + + &.mp-queries-warning { + color: #C91D2E; + font-weight: bold; + } } .mp-queries-duration { @@ -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; } diff --git a/src/MiniProfiler.Shared/ui/includes.min.css b/src/MiniProfiler.Shared/ui/includes.min.css index 57e9f68d2..10772abd7 100644 --- a/src/MiniProfiler.Shared/ui/includes.min.css +++ b/src/MiniProfiler.Shared/ui/includes.min.css @@ -1 +1 @@ -.mp-result,.mp-queries{color:#555;line-height:1;font-size:12px;}.mp-result pre,.mp-queries pre,.mp-result code,.mp-queries code,.mp-result label,.mp-queries label,.mp-result table,.mp-queries table,.mp-result tbody,.mp-queries tbody,.mp-result thead,.mp-queries thead,.mp-result tfoot,.mp-queries tfoot,.mp-result tr,.mp-queries tr,.mp-result th,.mp-queries th,.mp-result td,.mp-queries td{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;background-color:transparent;overflow:visible;max-height:none;}.mp-result pre,.mp-queries pre,.mp-result code,.mp-queries code{font-family:Fira Code,Consolas,monospace,serif;font-variant-ligatures:none;}.mp-result table,.mp-queries table{border-collapse:collapse;border-spacing:0;width:100%;}.mp-result a,.mp-queries a{cursor:pointer;color:#07c;text-decoration:none;}.mp-result a:hover,.mp-queries a:hover{text-decoration:underline;}.mp-result{font-family:sans-serif;}.mp-result.show-columns th.mp-more-columns,.mp-result.show-columns td.mp-more-columns{display:table-cell !important;}.mp-result.show-columns a.mp-more-columns{display:inline-block;}.mp-result.show-columns .mp-links span a:nth-child(1){display:none;}.mp-result.show-trivial tr.mp-trivial{display:table-row !important;}.mp-result.show-trivial a.mp-trivial{display:inline-block;}.mp-result.show-trivial .mp-links span a:nth-child(3){display:none;}.mp-result table.mp-client-timings{margin-top:10px;}.mp-result table.mp-client-timings td:nth-child(2){width:100%;padding:0;}.mp-result table.mp-client-timings td div{height:13px;min-width:1px;}.mp-result table.mp-client-timings .t-point div{height:4px;border-radius:8px;margin-bottom:4px;box-shadow:0 0 2px;}.mp-result table.mp-client-timings .t-unknown div{background:#80ccda;}.mp-result table.mp-client-timings .t-dns div{background:#8baad1;}.mp-result table.mp-client-timings .t-connect div{background:#8cbb4e;}.mp-result table.mp-client-timings .t-ssl div{background:#795892;}.mp-result table.mp-client-timings .t-request div{background:#0099b2;}.mp-result table.mp-client-timings .t-response div{background:#d99d35;}.mp-result table.mp-client-timings .t-dom div{background:#bd4d32;}.mp-result table.mp-client-timings .t-domcontent div{background:#dd4678;}.mp-result table.mp-client-timings .t-load div{background:#1d72aa;}.mp-result table.mp-client-timings .t-paint div{background:#bc41e3;}.mp-result .mp-label{color:#555;overflow:hidden;text-overflow:ellipsis;}.mp-result .mp-unit{color:#aaa;}.mp-result .mp-more-columns{display:none;}.mp-result .mp-trivial{display:none;}.mp-result .mp-trivial td,.mp-result .mp-trivial td *{color:#aaa !important;}.mp-result .mp-number{color:#111;}.mp-result .mp-info>div{white-space:nowrap;overflow:hidden;}.mp-result .mp-info>div>div{display:inline-block;}.mp-result .mp-info .mp-name{display:inline-block;font-weight:bold;float:left;}.mp-result .mp-info .mp-machine-name,.mp-result .mp-info .mp-started{text-align:right;float:right;}.mp-result .mp-info .mp-server-time{white-space:nowrap;}.mp-result .mp-timings th{background-color:#fff;color:#aaa;text-align:right;}.mp-result .mp-timings th,.mp-result .mp-timings td{white-space:nowrap;}.mp-result .mp-timings .mp-show-more{display:none;}.mp-result .mp-timings .mp-duration{font-family:Consolas,monospace,serif;color:#111;text-align:right;}.mp-result .mp-timings .mp-indent{letter-spacing:4px;}.mp-result .mp-timings .mp-queries-show .mp-number,.mp-result .mp-timings .mp-queries-show .mp-unit{color:#07c;}.mp-result .mp-timings .mp-queries-duration{padding-left:6px;}.mp-result .mp-timings:not(.mp-client-timings) .mp-trivial:first-child{display:table-row;}.mp-result .mp-custom-timing-overview{float:right;margin:10px 0;width:auto;}.mp-result .mp-custom-timing-overview td{white-space:nowrap;text-align:right;}.mp-result .mp-custom-timing-overview td:last-child{padding-left:8px;}.mp-result .mp-links{margin-top:10px;clear:both;}.mp-result .mp-links span{float:right;}.mp-result .mp-links a{font-size:95%;margin-left:12px;}.mp-result .mp-links a:first-child{margin-left:0;}.mp-warning{color:#f00;}@keyframes mp-fadeIn{from{background-color:#ffb;}to{background-color:none;}}.mp-overlay{z-index:2147483642;}.mp-overlay .mp-overlay-bg{z-index:2147483643;background:#000;opacity:.5;top:0;left:0;min-width:100%;position:fixed;height:calc(100%);}.mp-overlay .mp-queries{display:block;z-index:2147483644;top:25px;left:25px;right:25px;position:fixed;max-height:calc(100vh - 50px);background-color:#fff;border-radius:2px;overflow-y:auto;overflow-x:auto;}.mp-queries{font-family:sans-serif;}.mp-queries pre{white-space:pre-wrap;}.mp-queries div{text-align:left;}.mp-queries table{table-layout:fixed;}.mp-queries td,.mp-queries th{padding:8px;border-bottom:solid 1px #efefef;}.mp-queries td:first-child,.mp-queries th:first-child{width:250px;text-align:right;}.mp-queries td:first-child div,.mp-queries th:first-child div{text-align:right;margin-bottom:5px;word-break:break-word;}.mp-queries td:last-child,.mp-queries th:last-child{text-align:left;padding-right:15px;}.mp-queries .highlight{animation:mp-fadeIn 2s 1;}.mp-queries .mp-odd{background-color:#f5f5f5;}.mp-queries .mp-stack-trace{padding-bottom:1px;color:#aab;margin-bottom:5px;}.mp-queries .mp-since-start,.mp-queries .mp-duration{text-align:right;}.mp-queries.show-trivial .mp-gap-info.mp-trivial-gap{display:table-row;}.mp-queries .mp-gap-info{background-color:#e1e5ed;opacity:.8;color:#444;}.mp-queries .mp-gap-info .query{word-break:break-all;}.mp-queries .mp-gap-info .mp-unit{color:#777;}.mp-queries .mp-gap-info.mp-trivial-gap{display:none;}.mp-queries .mp-trivial-gap-container{text-align:center;margin:8px 0;}.mp-queries .mp-call-type{font-weight:bold;}.mp-queries .hljs{display:block;overflow-x:auto;padding:.5em;}.mp-queries .hljs,.mp-queries .hljs-subst{color:#000;}.mp-queries .hljs-string,.mp-queries .hljs-meta,.mp-queries .hljs-symbol,.mp-queries .hljs-template-tag,.mp-queries .hljs-template-variable,.mp-queries .hljs-addition{color:#756bb1;}.mp-queries .hljs-comment,.mp-queries .hljs-quote{color:#636363;}.mp-queries .hljs-number,.mp-queries .hljs-regexp,.mp-queries .hljs-literal,.mp-queries .hljs-bullet,.mp-queries .hljs-link{color:#31a354;}.mp-queries .hljs-deletion,.mp-queries .hljs-variable{color:#88f;}.mp-queries .hljs-keyword,.mp-queries .hljs-selector-tag,.mp-queries .hljs-title,.mp-queries .hljs-section,.mp-queries .hljs-built_in,.mp-queries .hljs-doctag,.mp-queries .hljs-type,.mp-queries .hljs-tag,.mp-queries .hljs-name,.mp-queries .hljs-selector-id,.mp-queries .hljs-selector-class,.mp-queries .hljs-strong{color:#3182bd;}.mp-queries .hljs-emphasis{font-style:italic;}.mp-queries .hljs-attribute{color:#e6550d;}.mp-results{z-index:2147483641;position:fixed;top:0;}.mp-results.mp-left,.mp-results.mp-bottomleft{left:0;}.mp-results.mp-left .mp-controls,.mp-results.mp-left.mp-no-controls .mp-result:last-child .mp-button{border-bottom-right-radius:10px;}.mp-results.mp-left .mp-button,.mp-results.mp-left .mp-controls{border-right:solid .5px #ababab;}.mp-results.mp-right{right:0;}.mp-results.mp-right .mp-controls,.mp-results.mp-right.mp-no-controls .mp-result:last-child .mp-button{border-bottom-left-radius:10px;}.mp-results.mp-right .mp-button,.mp-results.mp-right .mp-controls{border-left:solid .5px #ababab;}.mp-results.mp-bottomleft{top:inherit;bottom:0;}.mp-results.mp-bottomleft .mp-result:first-child .mp-button{border-top-right-radius:10px;}.mp-results.mp-bottomleft .mp-button,.mp-results.mp-bottomleft .mp-controls{border-right:solid .5px #ababab;}.mp-results.mp-bottomleft .mp-result .mp-button,.mp-results.mp-bottomleft .mp-controls{border-bottom:0;border-top:solid .5px #ababab;}.mp-results.mp-bottomright{top:inherit;bottom:0;right:0;}.mp-results.mp-bottomright .mp-result:first-child .mp-button{border-top-left-radius:10px;}.mp-results.mp-bottomright .mp-button,.mp-results.mp-bottomright .mp-controls{border-left:solid .5px #ababab;}.mp-results.mp-bottomright .mp-result .mp-button,.mp-results.mp-bottomright .mp-controls{border-bottom:0;border-top:solid .5px #ababab;}.mp-results .mp-button{user-select:none;}.mp-results .mp-button .mp-warning{font-weight:bold;}.mp-results .mp-button>.mp-number{font-family:Consolas,monospace,serif;}.mp-results .mp-controls{display:none;}.mp-results .mp-button,.mp-results .mp-controls{z-index:2147483640;border-bottom:solid .5px #ababab;background-color:#fff;padding:4px 8px;text-align:right;cursor:pointer;}.mp-results .mp-result{position:relative;}.mp-results .mp-result.active .mp-button{background-color:#207ab7;animation:none;border-radius:0 !important;}.mp-results .mp-result.active .mp-button .mp-number,.mp-results .mp-result.active .mp-button .mp-warning{color:#fff;font-weight:bold;}.mp-results .mp-result.active .mp-button .mp-unit{color:#fff;font-weight:normal;}.mp-results .mp-result.active .mp-popup{display:block;}.mp-results.new .mp-button{animation:mp-fadeIn 2s 1;}.mp-results .mp-controls{display:block;font-size:12px;font-family:Consolas,monospace,serif;cursor:default;text-align:center;}.mp-results .mp-controls span{border-right:1px solid #aaa;padding-right:5px;margin-right:5px;cursor:pointer;}.mp-results .mp-controls span:last-child{border-right:none;}.mp-results .mp-popup{display:none;z-index:2147483641;position:absolute;background-color:#fff;padding:5px 10px;text-align:left;line-height:18px;overflow:auto;box-shadow:0 1px 10px #555;border-radius:2px;}.mp-results .mp-popup .mp-info{margin-bottom:3px;padding-bottom:2px;border-bottom:1px solid #ddd;}.mp-results .mp-popup .mp-info .mp-name{font-size:1.1em;}.mp-results .mp-popup .mp-info .mp-overall-duration{color:#aaa;}.mp-results .mp-popup .mp-timings th,.mp-results .mp-popup .mp-timings td{padding:0 6px;}.mp-results .mp-popup .mp-timings th{font-size:95%;padding-bottom:3px;}.mp-results .mp-popup .mp-timings .mp-label{max-width:275px;}.mp-results .mp-queries{display:none;}.mp-results.mp-min .mp-result{display:none;}.mp-results.mp-min .mp-controls span{display:none;}.mp-results.mp-min .mp-controls .mp-min-max{border-right:none;padding:0;margin:0;}.mp-result-full .mp-result{width:950px;margin:25px auto;}.mp-result-full .mp-result .mp-button{display:none;}.mp-result-full .mp-result .mp-popup .mp-info{font-size:18px;border-bottom:1px solid #aaa;padding-bottom:3px;margin-bottom:10px;}.mp-result-full .mp-result .mp-popup .mp-info .mp-name{margin-bottom:5px;}.mp-result-full .mp-result .mp-popup .mp-info .mp-overall-duration,.mp-result-full .mp-result .mp-popup .mp-info .mp-started{font-size:80%;color:#888;}.mp-result-full .mp-result .mp-popup .mp-info .mp-overall-duration{padding-right:20px;}.mp-result-full .mp-result .mp-popup .mp-timings td,.mp-result-full .mp-result .mp-popup .mp-timings th{font-size:13px;padding-left:8px;padding-right:8px;}.mp-result-full .mp-result .mp-popup .mp-timings th{padding-bottom:7px;}.mp-result-full .mp-result .mp-popup .mp-timings td{padding-bottom:4px;}.mp-result-full .mp-result .mp-popup .mp-timings td:first-child{padding-left:10px;}.mp-result-full .mp-result .mp-popup .mp-timings .mp-label{max-width:550px;}.mp-result-full .mp-result .mp-queries{margin:20px 0;}.mp-result-full .mp-result .mp-queries th{font-size:16px;color:#555;}.mp-result-full .mp-share-mp-results{display:none;}table.mp-results-index{border:0;border-spacing:0;font-size:12px;font-family:Arial;}table.mp-results-index tbody tr:nth-child(odd){background-color:#e5e5e5;}table.mp-results-index tbody tr:nth-child(even){background-color:#fff;}table.mp-results-index tbody td{text-align:center;}table.mp-results-index tbody td:first-child{text-align:left;}table.mp-results-index tbody td:nth-child(3){color:#666;}table.mp-results-index tbody td[colspan="3"]{color:#aaa;}table.mp-results-index thead tr{color:#444;}table.mp-results-index thead tr th{padding:5px 15px;}table.mp-results-index td{padding:8px;} \ No newline at end of file +.mp-result,.mp-queries{color:#555;line-height:1;font-size:12px;}.mp-result pre,.mp-queries pre,.mp-result code,.mp-queries code,.mp-result label,.mp-queries label,.mp-result table,.mp-queries table,.mp-result tbody,.mp-queries tbody,.mp-result thead,.mp-queries thead,.mp-result tfoot,.mp-queries tfoot,.mp-result tr,.mp-queries tr,.mp-result th,.mp-queries th,.mp-result td,.mp-queries td{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;background-color:transparent;overflow:visible;max-height:none;}.mp-result pre,.mp-queries pre,.mp-result code,.mp-queries code{font-family:Fira Code,Consolas,monospace,serif;font-variant-ligatures:none;}.mp-result table,.mp-queries table{border-collapse:collapse;border-spacing:0;width:100%;}.mp-result a,.mp-queries a{cursor:pointer;color:#07c;text-decoration:none;}.mp-result a:hover,.mp-queries a:hover{text-decoration:underline;}.mp-result{font-family:sans-serif;}.mp-result.show-columns th.mp-more-columns,.mp-result.show-columns td.mp-more-columns{display:table-cell !important;}.mp-result.show-columns a.mp-more-columns{display:inline-block;}.mp-result.show-columns .mp-links span a:nth-child(1){display:none;}.mp-result.show-trivial tr.mp-trivial{display:table-row !important;}.mp-result.show-trivial a.mp-trivial{display:inline-block;}.mp-result.show-trivial .mp-links span a:nth-child(3){display:none;}.mp-result table.mp-client-timings{margin-top:10px;}.mp-result table.mp-client-timings td:nth-child(2){width:100%;padding:0;}.mp-result table.mp-client-timings td div{height:13px;min-width:1px;}.mp-result table.mp-client-timings .t-point div{height:4px;border-radius:8px;margin-bottom:4px;box-shadow:0 0 2px;}.mp-result table.mp-client-timings .t-unknown div{background:#80ccda;}.mp-result table.mp-client-timings .t-dns div{background:#8baad1;}.mp-result table.mp-client-timings .t-connect div{background:#8cbb4e;}.mp-result table.mp-client-timings .t-ssl div{background:#795892;}.mp-result table.mp-client-timings .t-request div{background:#0099b2;}.mp-result table.mp-client-timings .t-response div{background:#d99d35;}.mp-result table.mp-client-timings .t-dom div{background:#bd4d32;}.mp-result table.mp-client-timings .t-domcontent div{background:#dd4678;}.mp-result table.mp-client-timings .t-load div{background:#1d72aa;}.mp-result table.mp-client-timings .t-paint div{background:#bc41e3;}.mp-result .mp-label{color:#555;overflow:hidden;text-overflow:ellipsis;}.mp-result .mp-unit{color:#aaa;}.mp-result .mp-more-columns{display:none;}.mp-result .mp-trivial{display:none;}.mp-result .mp-trivial td,.mp-result .mp-trivial td *{color:#aaa !important;}.mp-result .mp-number{color:#111;}.mp-result .mp-info>div{white-space:nowrap;overflow:hidden;}.mp-result .mp-info>div>div{display:inline-block;}.mp-result .mp-info .mp-name{display:inline-block;font-weight:bold;float:left;}.mp-result .mp-info .mp-machine-name,.mp-result .mp-info .mp-started{text-align:right;float:right;}.mp-result .mp-info .mp-server-time{white-space:nowrap;}.mp-result .mp-timings th{background-color:#fff;color:#aaa;text-align:right;}.mp-result .mp-timings th,.mp-result .mp-timings td{white-space:nowrap;}.mp-result .mp-timings .mp-show-more{display:none;}.mp-result .mp-timings .mp-duration{font-family:Consolas,monospace,serif;color:#111;text-align:right;}.mp-result .mp-timings .mp-indent{letter-spacing:4px;}.mp-result .mp-timings .mp-queries-show .mp-number,.mp-result .mp-timings .mp-queries-show .mp-unit{color:#07c;}.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;}.mp-result .mp-timings:not(.mp-client-timings) .mp-trivial:first-child{display:table-row;}.mp-result .mp-custom-timing-overview{float:right;margin:10px 0;width:auto;}.mp-result .mp-custom-timing-overview td{white-space:nowrap;text-align:right;}.mp-result .mp-custom-timing-overview td:last-child{padding-left:8px;}.mp-result .mp-links{margin-top:10px;clear:both;}.mp-result .mp-links span{float:right;}.mp-result .mp-links a{font-size:95%;margin-left:12px;}.mp-result .mp-links a:first-child{margin-left:0;}.mp-warning{color:#f00;}@keyframes mp-fadeIn{from{background-color:#ffb;}to{background-color:none;}}.mp-overlay{z-index:2147483642;}.mp-overlay .mp-overlay-bg{z-index:2147483643;background:#000;opacity:.5;top:0;left:0;min-width:100%;position:fixed;height:calc(100%);}.mp-overlay .mp-queries{display:block;z-index:2147483644;top:25px;left:25px;right:25px;position:fixed;max-height:calc(100vh - 50px);background-color:#fff;border-radius:2px;overflow-y:auto;overflow-x:auto;}.mp-queries{font-family:sans-serif;}.mp-queries pre{white-space:pre-wrap;}.mp-queries div{text-align:left;}.mp-queries table{table-layout:fixed;}.mp-queries td,.mp-queries th{padding:8px;border-bottom:solid 1px #efefef;}.mp-queries td:first-child,.mp-queries th:first-child{width:250px;text-align:right;}.mp-queries td:first-child div,.mp-queries th:first-child div{text-align:right;margin-bottom:5px;word-break:break-word;}.mp-queries td:last-child,.mp-queries th:last-child{text-align:left;padding-right:15px;}.mp-queries .highlight{animation:mp-fadeIn 2s 1;}.mp-queries .mp-odd{background-color:#f5f5f5;}.mp-queries .mp-stack-trace{padding-bottom:1px;color:#aab;margin-bottom:5px;}.mp-queries .mp-since-start,.mp-queries .mp-duration{text-align:right;}.mp-queries.show-trivial .mp-gap-info.mp-trivial-gap{display:table-row;}.mp-queries .mp-gap-info{background-color:#e1e5ed;opacity:.8;color:#444;}.mp-queries .mp-gap-info .query{word-break:break-all;}.mp-queries .mp-gap-info .mp-unit{color:#777;}.mp-queries .mp-gap-info.mp-trivial-gap{display:none;}.mp-queries .mp-trivial-gap-container{text-align:center;margin:8px 0;}.mp-queries .mp-call-type{font-weight:bold;}.mp-queries .hljs{display:block;overflow-x:auto;padding:.5em;}.mp-queries .hljs,.mp-queries .hljs-subst{color:#000;}.mp-queries .hljs-string,.mp-queries .hljs-meta,.mp-queries .hljs-symbol,.mp-queries .hljs-template-tag,.mp-queries .hljs-template-variable,.mp-queries .hljs-addition{color:#756bb1;}.mp-queries .hljs-comment,.mp-queries .hljs-quote{color:#636363;}.mp-queries .hljs-number,.mp-queries .hljs-regexp,.mp-queries .hljs-literal,.mp-queries .hljs-bullet,.mp-queries .hljs-link{color:#31a354;}.mp-queries .hljs-deletion,.mp-queries .hljs-variable{color:#88f;}.mp-queries .hljs-keyword,.mp-queries .hljs-selector-tag,.mp-queries .hljs-title,.mp-queries .hljs-section,.mp-queries .hljs-built_in,.mp-queries .hljs-doctag,.mp-queries .hljs-type,.mp-queries .hljs-tag,.mp-queries .hljs-name,.mp-queries .hljs-selector-id,.mp-queries .hljs-selector-class,.mp-queries .hljs-strong{color:#3182bd;}.mp-queries .hljs-emphasis{font-style:italic;}.mp-queries .hljs-attribute{color:#e6550d;}.mp-results{z-index:2147483641;position:fixed;top:0;}.mp-results.mp-left,.mp-results.mp-bottomleft{left:0;}.mp-results.mp-left .mp-controls,.mp-results.mp-left.mp-no-controls .mp-result:last-child .mp-button{border-bottom-right-radius:10px;}.mp-results.mp-left .mp-button,.mp-results.mp-left .mp-controls{border-right:solid .5px #ababab;}.mp-results.mp-right{right:0;}.mp-results.mp-right .mp-controls,.mp-results.mp-right.mp-no-controls .mp-result:last-child .mp-button{border-bottom-left-radius:10px;}.mp-results.mp-right .mp-button,.mp-results.mp-right .mp-controls{border-left:solid .5px #ababab;}.mp-results.mp-bottomleft{top:inherit;bottom:0;}.mp-results.mp-bottomleft .mp-result:first-child .mp-button{border-top-right-radius:10px;}.mp-results.mp-bottomleft .mp-button,.mp-results.mp-bottomleft .mp-controls{border-right:solid .5px #ababab;}.mp-results.mp-bottomleft .mp-result .mp-button,.mp-results.mp-bottomleft .mp-controls{border-bottom:0;border-top:solid .5px #ababab;}.mp-results.mp-bottomright{top:inherit;bottom:0;right:0;}.mp-results.mp-bottomright .mp-result:first-child .mp-button{border-top-left-radius:10px;}.mp-results.mp-bottomright .mp-button,.mp-results.mp-bottomright .mp-controls{border-left:solid .5px #ababab;}.mp-results.mp-bottomright .mp-result .mp-button,.mp-results.mp-bottomright .mp-controls{border-bottom:0;border-top:solid .5px #ababab;}.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;}.mp-results .mp-button>.mp-number{font-family:Consolas,monospace,serif;}.mp-results .mp-controls{display:none;}.mp-results .mp-button,.mp-results .mp-controls{z-index:2147483640;border-bottom:solid .5px #ababab;background-color:#fff;padding:4px 8px;text-align:right;cursor:pointer;}.mp-results .mp-result{position:relative;}.mp-results .mp-result.active .mp-button{background-color:#207ab7;animation:none;border-radius:0 !important;}.mp-results .mp-result.active .mp-button .mp-number,.mp-results .mp-result.active .mp-button .mp-warning{color:#fff;font-weight:bold;}.mp-results .mp-result.active .mp-button .mp-unit{color:#fff;font-weight:normal;}.mp-results .mp-result.active .mp-popup{display:block;}.mp-results.new .mp-button{animation:mp-fadeIn 2s 1;}.mp-results .mp-controls{display:block;font-size:12px;font-family:Consolas,monospace,serif;cursor:default;text-align:center;}.mp-results .mp-controls span{border-right:1px solid #aaa;padding-right:5px;margin-right:5px;cursor:pointer;}.mp-results .mp-controls span:last-child{border-right:none;}.mp-results .mp-popup{display:none;z-index:2147483641;position:absolute;background-color:#fff;padding:5px 10px;text-align:left;line-height:18px;overflow:auto;box-shadow:0 1px 10px #555;border-radius:2px;}.mp-results .mp-popup .mp-info{margin-bottom:3px;padding-bottom:2px;border-bottom:1px solid #ddd;}.mp-results .mp-popup .mp-info .mp-name{font-size:1.1em;}.mp-results .mp-popup .mp-info .mp-overall-duration{color:#aaa;}.mp-results .mp-popup .mp-timings th,.mp-results .mp-popup .mp-timings td{padding:0 6px;}.mp-results .mp-popup .mp-timings th{font-size:95%;padding-bottom:3px;}.mp-results .mp-popup .mp-timings .mp-label{max-width:275px;}.mp-results .mp-queries{display:none;}.mp-results.mp-min .mp-result{display:none;}.mp-results.mp-min .mp-controls span{display:none;}.mp-results.mp-min .mp-controls .mp-min-max{border-right:none;padding:0;margin:0;}.mp-result-full .mp-result{width:950px;margin:25px auto;}.mp-result-full .mp-result .mp-button{display:none;}.mp-result-full .mp-result .mp-popup .mp-info{font-size:18px;border-bottom:1px solid #aaa;padding-bottom:3px;margin-bottom:10px;}.mp-result-full .mp-result .mp-popup .mp-info .mp-name{margin-bottom:5px;}.mp-result-full .mp-result .mp-popup .mp-info .mp-overall-duration,.mp-result-full .mp-result .mp-popup .mp-info .mp-started{font-size:80%;color:#888;}.mp-result-full .mp-result .mp-popup .mp-info .mp-overall-duration{padding-right:20px;}.mp-result-full .mp-result .mp-popup .mp-timings td,.mp-result-full .mp-result .mp-popup .mp-timings th{font-size:13px;padding-left:8px;padding-right:8px;}.mp-result-full .mp-result .mp-popup .mp-timings th{padding-bottom:7px;}.mp-result-full .mp-result .mp-popup .mp-timings td{padding-bottom:4px;}.mp-result-full .mp-result .mp-popup .mp-timings td:first-child{padding-left:10px;}.mp-result-full .mp-result .mp-popup .mp-timings .mp-label{max-width:550px;}.mp-result-full .mp-result .mp-queries{margin:20px 0;}.mp-result-full .mp-result .mp-queries th{font-size:16px;color:#555;}.mp-result-full .mp-share-mp-results{display:none;}table.mp-results-index{border:0;border-spacing:0;font-size:12px;font-family:Arial;}table.mp-results-index tbody tr:nth-child(odd){background-color:#e5e5e5;}table.mp-results-index tbody tr:nth-child(even){background-color:#fff;}table.mp-results-index tbody td{text-align:center;}table.mp-results-index tbody td:first-child{text-align:left;}table.mp-results-index tbody td:nth-child(3){color:#666;}table.mp-results-index tbody td[colspan="3"]{color:#aaa;}table.mp-results-index thead tr{color:#444;}table.mp-results-index thead tr th{padding:5px 15px;}table.mp-results-index td{padding:8px;} \ No newline at end of file diff --git a/src/MiniProfiler.Shared/ui/lib/MiniProfiler.ts b/src/MiniProfiler.Shared/ui/lib/MiniProfiler.ts index e5e19f7ab..9cf2f4fb9 100644 --- a/src/MiniProfiler.Shared/ui/lib/MiniProfiler.ts +++ b/src/MiniProfiler.Shared/ui/lib/MiniProfiler.ts @@ -20,6 +20,7 @@ namespace StackExchange.Profiling { CustomTimingStats: { [id: string]: ICustomTimingStat }; HasCustomTimings: boolean; HasDuplicateCustomTimings: boolean; + HasWarning: boolean; HasTrivialTimings: boolean; AllCustomTimings: ICustomTiming[]; } @@ -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) @@ -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); @@ -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; @@ -665,9 +672,9 @@ namespace StackExchange.Profiling { ${customTimingTypes.map((tk) => timing.CustomTimings[tk] ? ` - + ${duration(timing.CustomTimingStats[tk].Duration)} - (${timing.CustomTimingStats[tk].Count}${(timing.HasDuplicateCustomTimings[tk] ? '!' : '')}) + (${timing.CustomTimingStats[tk].Count}${((timing.HasDuplicateCustomTimings[tk] || timing.HasWarnings[tk]) ? '!' : '')}) ` : '').join('')} `; @@ -811,7 +818,7 @@ namespace StackExchange.Profiling { ${renderGap(ct.PrevGap)} -
    ${encode(ct.CallType)}${encode(!ct.ExecuteType || ct.CallType === ct.ExecuteType ? '' : ' - ' + ct.ExecuteType)}${(ct.IsDuplicate ? ' !' : '')}
    +
    ${encode(ct.CallType)}${encode(!ct.ExecuteType || ct.CallType === ct.ExecuteType ? '' : ' - ' + ct.ExecuteType)}${((ct.IsDuplicate || ct.Errored) ? ' !' : '')}
    ${encode(ct.Parent.Name)}
    ${duration(ct.DurationMilliseconds)} ms (T+${duration(ct.StartMilliseconds)} ms) @@ -836,9 +843,9 @@ namespace StackExchange.Profiling { return mp.jq(`
    -
    +
    ${duration(p.DurationMilliseconds)} ms - ${(p.HasDuplicateCustomTimings ? '!' : '')} + ${((p.HasDuplicateCustomTimings || p.HasWarning) ? '!' : '')}