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); } },