From 67e8e3cbebf6d958223753541cafaf714e86cdb6 Mon Sep 17 00:00:00 2001
From: Dmytro Bogatov <dmytro@dbogatov.org>
Date: Tue, 8 Aug 2017 15:10:09 +0300
Subject: [PATCH] Add links from health reports and discrepancies.

---
 client/ts/modules/metric-page/health.ts               |  9 ++++++---
 src/shared/Extensions/DateTimeExtensions.cs           |  4 ++++
 src/web/Controllers/View/AccountController.cs         |  2 +-
 .../Shared/Components/DiscrepancyCard/Default.cshtml  | 11 +++++++++++
 4 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/client/ts/modules/metric-page/health.ts b/client/ts/modules/metric-page/health.ts
index 8424149..eca8997 100644
--- a/client/ts/modules/metric-page/health.ts
+++ b/client/ts/modules/metric-page/health.ts
@@ -207,7 +207,10 @@ export class HealthMetricPage extends MetricPage<Metric<HealthDataPoint>> {
 									<h4 class="modal-title">
 										Health report details | Health ${e.detail.health}% | ${timestamp}
 										<small>
-											Inspect metric labels at the moment report was generated
+											Inspect metric labels at the moment report was generated.
+											<a href="/home/metric/${this.metric.metricType}/${this.metric.source}/${new Date(timestamp.getTime() - 2 * 60 * 1000).getTime()}/${new Date(timestamp.getTime() + 2 * 60 * 1000).getTime()}">
+												View data at that moment.
+											</a>
 										</small>
 									</h4>
 								</div>
@@ -267,10 +270,10 @@ export class HealthMetricPage extends MetricPage<Metric<HealthDataPoint>> {
 				$(`#modal-details-${timestamp.getTime()}`).modal();
 
 				$(`#modal-details-${timestamp.getTime()}`).on(
-					"hidden.bs.modal", 
+					"hidden.bs.modal",
 					() => $(".health-details-modal").remove()
 				);
-				
+
 			},
 			false);
 
diff --git a/src/shared/Extensions/DateTimeExtensions.cs b/src/shared/Extensions/DateTimeExtensions.cs
index 41e0be2..95d166f 100644
--- a/src/shared/Extensions/DateTimeExtensions.cs
+++ b/src/shared/Extensions/DateTimeExtensions.cs
@@ -22,5 +22,9 @@ namespace StatusMonitor.Shared.Extensions
 				? value.ToString() 
 				: TimeZoneInfo.ConvertTime(value, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId)).ToString();
 		}
+
+		public static long TotalMilliseconds(this DateTime value) =>
+			Convert.ToInt64((value - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds);
+		
 	}
 }
diff --git a/src/web/Controllers/View/AccountController.cs b/src/web/Controllers/View/AccountController.cs
index f6cd84c..db7fb58 100644
--- a/src/web/Controllers/View/AccountController.cs
+++ b/src/web/Controllers/View/AccountController.cs
@@ -75,7 +75,7 @@ namespace StatusMonitor.Web.Controllers.View
 
 				TempData["MessageSeverity"] = "info";
 				TempData["MessageContent"] = $"You have logged in.";
-
+				
 				if (string.IsNullOrEmpty(Request.Query["returnurl"]))
 				{
 					return RedirectToAction("Index", "Home");
diff --git a/src/web/Views/Shared/Components/DiscrepancyCard/Default.cshtml b/src/web/Views/Shared/Components/DiscrepancyCard/Default.cshtml
index d246854..0ae5440 100644
--- a/src/web/Views/Shared/Components/DiscrepancyCard/Default.cshtml
+++ b/src/web/Views/Shared/Components/DiscrepancyCard/Default.cshtml
@@ -1,3 +1,5 @@
+@using StatusMonitor.Shared.Extensions
+
 <div 
 	class="list-group-item media discrepancy-card discrepancy-@(Model.Resolved ? "resolved" : "unresolved")" 
 	data-number="@ViewBag.Number" 
@@ -39,11 +41,20 @@
 	<div class="media-body">
 		<div class="lgi-heading">
 			Discrepancy of type <strong>@Model.Type</strong> from
+			@{
+				var start = Convert.ToInt64((Model.DateFirstOffense.AddMinutes(-2) - new DateTime(1970, 1, 1)).TotalMilliseconds);
+				var end =
+					Model.Resolved ?
+					Convert.ToInt64((Model.DateResolved.AddMinutes(2) - new DateTime(1970, 1, 1)).TotalMilliseconds) :
+					Convert.ToInt64((Model.DateFirstOffense.AddMinutes(15) - new DateTime(1970, 1, 1)).TotalMilliseconds);
+			}
 			<a 
 				asp-controller="Home" 
 				asp-action="Metric" 
 				asp-route-type="@Model.MetricType" 
 				asp-route-source="@Model.MetricSource"
+				asp-route-start="@start" 
+				asp-route-end="@end"
 			>
 				 <em>@Model.MetricType</em> of <em>@Model.MetricSource</em>
 			</a>
-- 
GitLab