diff --git a/.gitignore b/.gitignore
index d4c74d550..937cc5579 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,4 +51,5 @@ Help/
/source/Glimpse.Mvc4.MusicStore.Sample/App_Data/MvcMusicStore_log.ldf
-csx/
\ No newline at end of file
+csx/
+/.vs
diff --git a/source/Glimpse.AspNet/Display/EnvironmentDisplay.cs b/source/Glimpse.AspNet/Display/EnvironmentDisplay.cs
index 70660737d..1cfee6a3f 100644
--- a/source/Glimpse.AspNet/Display/EnvironmentDisplay.cs
+++ b/source/Glimpse.AspNet/Display/EnvironmentDisplay.cs
@@ -14,14 +14,14 @@ public string Name
get { return InternalName; }
}
- public string Key
+ public string Key
{
get { return InternalName; }
}
public object GetData(ITabContext context)
{
- var time = DateTime.Now;
+ var time = DateTimeOffset.Now;
var timeZoneInfo = TimeZoneInfo.Local;
var isDaylightSavingTime = timeZoneInfo.IsDaylightSavingTime(time);
@@ -29,8 +29,8 @@ public object GetData(ITabContext context)
{
serverName = Environment.MachineName,
user = Thread.CurrentPrincipal.Identity.Name,
- serverTime = time,
- serverTimezoneOffset = time.ToString("zz00"), // timeZoneInfo.BaseUtcOffset.Hours + (isDaylightSavingTime ? 1 : 0),
+ serverTime = time.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff"),
+ serverTimezoneOffset = time.ToString("zzz"),
serverDaylightSavingTime = isDaylightSavingTime
};
}
diff --git a/source/Glimpse.Core/glimpse.js b/source/Glimpse.Core/glimpse.js
index a2292acd4..223ea3a17 100644
--- a/source/Glimpse.Core/glimpse.js
+++ b/source/Glimpse.Core/glimpse.js
@@ -3745,7 +3745,7 @@ glimpse.tab = (function($, pubsub, data) {
controller: { title: 'Controller/Action', description: 'Name of the root Controller and Action', visible: function(details) { return details.mvc && details.mvc.data; }, size: 2, position: 0, align: 0, postfix: 'ms', getLayoutData: function(details) { return '' + details.mvc.data.controllerName + '.' + details.mvc.data.actionName + '(...)'; } },
queries: { title: 'DB Queries', description: 'Total query duration and number of all SQL queries', visible: function(details) { return details.sql && details.sql.data; }, size: 1, position: 0, align: 0, getLayoutData: function(details) { return '' + parseInt(details.sql.data.queryExecutionTime) + 'ms/' + details.sql.data.queryCount + ''; } },
connections: { title: 'DB Connections', description: 'Total connection open time and number of all SQL connections used', visible: function (details) { return details.sql && details.sql.data; }, size: 1, position: 1, align: 1, getLayoutData: function (details) { return '' + parseInt(details.sql.data.connectionOpenTime) + 'ms/' + details.sql.data.connectionCount + ''; } },
- time: { title: 'Server Time', description: 'Time on the server', visible: function (details) { return details.environment && details.environment.data; }, size: 4, position: 2, align: 1, getLayoutData: function (details) { var diff = parseInt((new Date(details.environment.data.serverTime + ' ' + details.environment.data.serverTimezoneOffset) - new Date()) / 1000 / 60 / 60); return '' + details.environment.data.serverTime + ' GMT' + details.environment.data.serverTimezoneOffset + ' ' + (details.environment.data.serverDaylightSavingTime ? ' (w/DLS)' : '') + (diff ? ' Δ' + (diff > 0 ? '+' : '') + diff + '' : ''); } },
+ time: { title: 'Server Time', description: 'Time on the server', visible: function (details) { return details.environment && details.environment.data; }, size: 4, position: 2, align: 1, getLayoutData: function (details) { var diff = parseInt((new Date(details.environment.data.serverTime + ' ' + details.environment.data.serverTimezoneOffset) - new Date()) / 1000 / 60 / 60); return '' + details.environment.data.serverTime + ' UTC' + details.environment.data.serverTimezoneOffset + ' ' + (details.environment.data.serverDaylightSavingTime ? ' (w/DLS)' : '') + (diff ? ' Δ' + (diff > 0 ? '+' : '') + diff + '' : ''); } },
viewStateSize: { title: 'ViewState', description: 'Size of your page ViewState', visible: function (details) { return details.webforms && details.webforms.data; }, size: 1, position: 0, align: 0, postfix: 'bytes', getData: function (details) { var viewstate; return (viewstate = $('#__VIEWSTATE').val()) ? viewstate.length : 0; } },
loading: { title: 'Load', description: 'Time between Begin PreLoad and End LoadComplete', visible: function (details) { return details.webforms && details.webforms.data && details.webforms.data.loadingTime != null; }, size: 1, position: 0, align: 0, postfix: 'ms', getData: function (details) { return parseInt(details.webforms.data.loadingTime); } },
rendering: { title: 'Render', description: 'Time between Begin PreRender and End Render (including SaveState events)', visible: function (details) { return details.webforms && details.webforms.data && details.webforms.data.renderingTime != null; }, size: 1, position: 0, align: 0, postfix: 'ms', getData: function (details) { return parseInt(details.webforms.data.renderingTime); } },