Skip to content
This repository has been archived by the owner on Jan 15, 2021. It is now read-only.

Commit

Permalink
Updated the server to support HUD
Browse files Browse the repository at this point in the history
  • Loading branch information
nikmd23 committed Jun 7, 2013
1 parent 0550a11 commit 1d00d4c
Show file tree
Hide file tree
Showing 15 changed files with 337 additions and 258 deletions.
65 changes: 65 additions & 0 deletions source/Glimpse.Ado/Display/SqlDisplay.cs
@@ -0,0 +1,65 @@
using System;
using System.Linq;
using Glimpse.Ado.Message;
using Glimpse.Ado.Model;
using Glimpse.Core.Extensibility;
using Glimpse.Core.Extensions;

namespace Glimpse.Ado.Display
{
[Obsolete]
public class SqlDisplay : IDisplay, ITabSetup, IKey
{
private const string InternalName = "sql";

public string Name
{
get { return InternalName; }
}

public string Key
{
get { return InternalName; }
}

public object GetData(ITabContext context)
{
var messages = context.GetMessages<AdoMessage>().ToList();
var aggregator = new MessageAggregator(messages);
var queryData = aggregator.Aggregate();

var queryCount = queryData.Commands.Count;
var connectionCount = queryData.Connections.Count;
var transactionCount = queryData.Transactions.Count;

var queryExecutionTime = new TimeSpan();
var connectionOpenTime = new TimeSpan();

foreach (var command in queryData.Commands)
{
var commandMetadata = command.Value;
queryExecutionTime += commandMetadata.Duration;
}

foreach (var connection in queryData.Connections)
{
var connectionMetadata = connection.Value;
connectionOpenTime += connectionMetadata.Duration.GetValueOrDefault(TimeSpan.Zero);
}

return new
{
queryCount,
connectionCount,
transactionCount,
queryExecutionTime,
connectionOpenTime
};
}

public void Setup(ITabSetupContext context)
{
context.PersistMessages<AdoMessage>();
}
}
}
1 change: 1 addition & 0 deletions source/Glimpse.Ado/Glimpse.Ado.csproj
Expand Up @@ -43,6 +43,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AlternateType\Support.cs" />
<Compile Include="Display\SqlDisplay.cs" />
<Compile Include="Extensibility\ICommandParameterParser.cs" />
<Compile Include="Initialize.cs" />
<Compile Include="Inspector\AdoInspector.cs" />
Expand Down
31 changes: 31 additions & 0 deletions source/Glimpse.AspNet/Display/EnvironmentDisplay.cs
@@ -0,0 +1,31 @@
using System;
using System.Threading;
using Glimpse.Core.Extensibility;

namespace Glimpse.AspNet.Display
{
[Obsolete]
public class EnvironmentDisplay : IDisplay, IKey
{
private const string InternalName = "environment";

public string Name
{
get { return InternalName; }
}

public string Key
{
get { return InternalName; }
}

public object GetData(ITabContext context)
{
return new
{
serverName = Environment.MachineName,
user = Thread.CurrentPrincipal.Identity.Name
};
}
}
}
1 change: 1 addition & 0 deletions source/Glimpse.AspNet/Glimpse.AspNet.csproj
Expand Up @@ -55,6 +55,7 @@
<Compile Include="AspNetServiceLocator.cs" />
<Compile Include="Controls\Client.cs" />
<Compile Include="Constants.cs" />
<Compile Include="Display\EnvironmentDisplay.cs" />
<Compile Include="Extensibility\AspNetTab.cs" />
<Compile Include="Extensions\HttpContextExtensions.cs" />
<Compile Include="Extensions\RuntimePolicyContextExtensions.cs" />
Expand Down
38 changes: 38 additions & 0 deletions source/Glimpse.Core/Display/TimingsDisplay.cs
@@ -0,0 +1,38 @@
using System;
using System.Linq;
using Glimpse.Core.Extensibility;
using Glimpse.Core.Extensions;
using Glimpse.Core.Message;

namespace Glimpse.Core.Display
{
[Obsolete]
public class TimingsDisplay : IDisplay, ITabSetup, IKey
{
private const string InternalName = "Timings";

public string Name
{
get { return InternalName; }
}

public string Key
{
get { return InternalName; }
}

public object GetData(ITabContext context)
{
return context.GetMessages<ITimelineMessage>()
.Where(m =>
m.EventCategory.Name.Equals("Command") ||
m.EventCategory.Name.Equals("Controller") ||
m.EventCategory.Name.Equals("Render"));
}

public void Setup(ITabSetupContext context)
{
context.PersistMessages<ITimelineMessage>();
}
}
}
20 changes: 19 additions & 1 deletion source/Glimpse.Core/Framework/GlimpseRuntime.cs
Expand Up @@ -370,7 +370,24 @@ public bool Initialize()
if (!IsInitialized)
{
var messageBroker = Configuration.MessageBroker;


// TODO: Fix this to IDisplay no longer uses I*Tab*Setup
var displaysThatRequireSetup = Configuration.Displays.Where(display => display is ITabSetup).Select(display => display);
foreach (ITabSetup display in displaysThatRequireSetup)
{
var key = CreateKey(display);
try
{
var setupContext = new TabSetupContext(logger, messageBroker, () => GetTabStore(key));
display.Setup(setupContext);
}
catch (Exception exception)
{
logger.Error(Resources.InitializeTabError, exception, key);
}
}


var tabsThatRequireSetup = Configuration.Tabs.Where(tab => tab is ITabSetup).Select(tab => tab);
foreach (ITabSetup tab in tabsThatRequireSetup)
{
Expand Down Expand Up @@ -567,6 +584,7 @@ private void ExecuteDisplays()
}
}
}

private void PersistMetadata()
{
var metadata = new GlimpseMetadata { Version = Version };
Expand Down
2 changes: 2 additions & 0 deletions source/Glimpse.Core/Glimpse.Core.csproj
Expand Up @@ -81,6 +81,7 @@
<Compile Include="Configuration\TypeConverter.cs" />
<Compile Include="Configuration\TypeElement.cs" />
<Compile Include="Configuration\TypeElementCollection.cs" />
<Compile Include="Display\TimingsDisplay.cs" />
<Compile Include="Extensibility\AlternateType.cs" />
<Compile Include="Extensibility\AlternateTypeGenerationHook.cs" />
<Compile Include="Extensibility\AlternateTypeSelector.cs" />
Expand All @@ -106,6 +107,7 @@
<Compile Include="Extensions\EnumExtensions.cs" />
<Compile Include="Framework\Support\ExecutionBlockBase.cs" />
<Compile Include="Framework\Support\IExecutionTask.cs" />
<Compile Include="SerializationConverter\EnumerableOfITimelineMessageConverter.cs" />
<Compile Include="Setting\Initializer.cs" />
<Compile Include="Support\NuGetPackage.cs" />
<Compile Include="System.cs" />
Expand Down
@@ -0,0 +1,22 @@
using System.Collections.Generic;
using System.Linq;
using Glimpse.Core.Extensibility;
using Glimpse.Core.Message;

namespace Glimpse.Core.SerializationConverter
{
public class EnumerableOfITimelineMessageConverter : SerializationConverter<IEnumerable<ITimelineMessage>>
{
public override object Convert(IEnumerable<ITimelineMessage> obj)
{
return obj.Select(message => new
{
title = message.EventName,
startTime = message.StartTime,
duration = message.Duration,
startPoint = message.Offset,
category = message.EventCategory.Name
});
}
}
}
104 changes: 104 additions & 0 deletions source/Glimpse.Mvc/Display/MvcDisplay.cs
@@ -0,0 +1,104 @@
using System;
using Glimpse.AspNet.AlternateType;
using Glimpse.Core.Extensibility;
using Glimpse.Core.Extensions;
using Glimpse.Mvc.AlternateType;
using Glimpse.Mvc.Model;

namespace Glimpse.Mvc.Display
{
public class MvcDisplay : IDisplay, ITabSetup, IKey
{
private const string InternalName = "mvc";

public string Name
{
get { return InternalName; }
}

public string Key
{
get { return InternalName; }
}

public object GetData(ITabContext context)
{
var result = context.TabStore.Get<MvcDisplayModel>();

return result;
}

public void Setup(ITabSetupContext context)
{
var mb = context.MessageBroker;

mb.Subscribe<ActionInvoker.InvokeActionMethod.Message>(m => UpdateAction(m, context));
mb.Subscribe<ViewEngine.FindViews.Message>(m => UpdateView(m, context));
mb.Subscribe<View.Render.Message>(m => UpdateRender(m, context));
mb.Subscribe<RouteBase.GetRouteData.Message>(m => UpdateRoute(m, context));
}

private void UpdateRoute(RouteBase.GetRouteData.Message message, ITabSetupContext context)
{
var model = GetModel(context.GetTabStore());

// string.Empty is a valid routeName
if (message.IsMatch && model.MatchedRouteName == null)
{
// only update the first matched route
model.MatchedRouteName = message.RouteName;
}
}

private void UpdateRender(View.Render.Message message, ITabSetupContext context)
{
var model = GetModel(context.GetTabStore());

// Last message in is the first/primary view
model.ViewRenderTime = Math.Round(message.Duration.TotalMilliseconds, 2);
}

private void UpdateAction(ActionInvoker.InvokeActionMethod.Message message, ITabSetupContext context)
{
var model = GetModel(context.GetTabStore());

if (message.IsChildAction)
{
model.ChildActionCount++;
}
else
{
model.ActionName = message.ActionName;
model.ActionExecutionTime = Math.Round(message.Duration.TotalMilliseconds, 2);
model.ControllerName = message.ControllerName;
}
}

private void UpdateView(ViewEngine.FindViews.Message message, ITabSetupContext context)
{
if (message.IsFound)
{
var model = GetModel(context.GetTabStore());

model.ChildViewCount++;

if (model.ViewName == null)
{
model.ViewName = message.ViewName;
}
}
}

private MvcDisplayModel GetModel(IDataStore tabStore)
{
if (tabStore.Contains<MvcDisplayModel>())
{
return tabStore.Get<MvcDisplayModel>();
}

var model = new MvcDisplayModel();
tabStore.Set(model);
return model;
}
}
}
4 changes: 3 additions & 1 deletion source/Glimpse.Mvc/Glimpse.Mvc.csproj
Expand Up @@ -86,6 +86,7 @@
<Compile Include="AlternateType\View.cs" />
<Compile Include="AlternateType\ViewCorrelationMixin.cs" />
<Compile Include="AlternateType\ViewEngine.cs" />
<Compile Include="Display\MvcDisplay.cs" />
<Compile Include="Html\HtmlHelperExtension.cs" />
<Compile Include="Message\FilterBounds.cs" />
<Compile Include="Message\FilterCategory.cs" />
Expand All @@ -105,6 +106,7 @@
<Compile Include="Model\MetadataItemModel.cs" />
<Compile Include="Model\MetadataPropertyItemModel.cs" />
<Compile Include="Model\ModelBindingModel.cs" />
<Compile Include="Model\MvcDisplayModel.cs" />
<Compile Include="Model\ViewModelSummary.cs" />
<Compile Include="Model\ViewsModel.cs" />
<Compile Include="Inspector\DependencyInjectionInspector.cs" />
Expand All @@ -121,11 +123,11 @@
<Compile Include="SerializationConverter\ListOfExecutionModelConverter.cs" />
<Compile Include="SerializationConverter\ListOfMetadataItemModelConverter.cs" />
<Compile Include="SerializationConverter\ListOfViewsModelConverter.cs" />
<Compile Include="SerializationConverter\MvcDisplayModelConverter.cs" />
<Compile Include="SerializationConverter\UrlParameterConverter.cs" />
<Compile Include="Tab\Execution.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Tab\HudPoc.cs" />
<Compile Include="Tab\Metadata.cs" />
<Compile Include="Tab\ModelBinding.cs" />
<Compile Include="Tab\Views.cs" />
Expand Down
26 changes: 26 additions & 0 deletions source/Glimpse.Mvc/Model/MvcDisplayModel.cs
@@ -0,0 +1,26 @@
namespace Glimpse.Mvc.Model
{
public class MvcDisplayModel
{
public MvcDisplayModel()
{
ChildViewCount = -1;
}

public string ActionName { get; set; }

public double? ActionExecutionTime { get; set; }

public int ChildActionCount { get; set; }

public string ViewName { get; set; }

public double? ViewRenderTime { get; set; }

public int ChildViewCount { get; set; }

public string ControllerName { get; set; }

public string MatchedRouteName { get; set; }
}
}

0 comments on commit 1d00d4c

Please sign in to comment.