Removes the abstraction on the profiler, no need for a resolver, it will work in unit tests and we can override the provider if needed.
Added better support for MVC profiling by using the built in ProfilingViewEngine and ProfilingActionFilter.
This commit is contained in:
@@ -187,9 +187,6 @@ namespace Umbraco.Core
|
||||
/// </summary>
|
||||
protected virtual void InitializeResolvers()
|
||||
{
|
||||
//By default we'll initialize the Log profiler (in the web project, we'll override with the web profiler)
|
||||
ProfilerResolver.Current = new ProfilerResolver(new LogProfiler());
|
||||
|
||||
//by default we'll use the standard configuration based sync
|
||||
ServerRegistrarResolver.Current = new ServerRegistrarResolver(
|
||||
new ConfigServerRegistrar());
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
using System;
|
||||
//using System;
|
||||
|
||||
namespace Umbraco.Core.Profiling
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines an object for use in the application to profile operations
|
||||
/// </summary>
|
||||
public interface IProfiler
|
||||
{
|
||||
//namespace Umbraco.Core.Profiling
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// Defines an object for use in the application to profile operations
|
||||
// /// </summary>
|
||||
// public interface IProfiler
|
||||
// {
|
||||
|
||||
/// <summary>
|
||||
/// Render the UI to display the profiler
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// Generally used for HTML displays
|
||||
/// </remarks>
|
||||
string Render();
|
||||
// /// <summary>
|
||||
// /// Render the UI to display the profiler
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// /// <remarks>
|
||||
// /// Generally used for HTML displays
|
||||
// /// </remarks>
|
||||
// string Render();
|
||||
|
||||
/// <summary>
|
||||
/// Profile a step
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// Use the 'using(' syntax
|
||||
/// </remarks>
|
||||
IDisposable Step(string name);
|
||||
// /// <summary>
|
||||
// /// Profile a step
|
||||
// /// </summary>
|
||||
// /// <param name="name"></param>
|
||||
// /// <returns></returns>
|
||||
// /// <remarks>
|
||||
// /// Use the 'using(' syntax
|
||||
// /// </remarks>
|
||||
// IDisposable Step(string name);
|
||||
|
||||
/// <summary>
|
||||
/// Start the profiler
|
||||
/// </summary>
|
||||
void Start();
|
||||
// /// <summary>
|
||||
// /// Start the profiler
|
||||
// /// </summary>
|
||||
// void Start();
|
||||
|
||||
/// <summary>
|
||||
/// Start the profiler
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// set discardResults to false when you want to abandon all profiling, this is useful for
|
||||
/// when someone is not authenticated or you want to clear the results based on some other mechanism.
|
||||
/// </remarks>
|
||||
void Stop(bool discardResults = false);
|
||||
}
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Start the profiler
|
||||
// /// </summary>
|
||||
// /// <remarks>
|
||||
// /// set discardResults to false when you want to abandon all profiling, this is useful for
|
||||
// /// when someone is not authenticated or you want to clear the results based on some other mechanism.
|
||||
// /// </remarks>
|
||||
// void Stop(bool discardResults = false);
|
||||
// }
|
||||
//}
|
||||
@@ -1,35 +1,35 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Umbraco.Core.Logging;
|
||||
//using System;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Linq;
|
||||
//using System.Text;
|
||||
//using Umbraco.Core.Logging;
|
||||
|
||||
namespace Umbraco.Core.Profiling
|
||||
{
|
||||
/// <summary>
|
||||
/// A profiler that outputs its results to the LogHelper
|
||||
/// </summary>
|
||||
public class LogProfiler : IProfiler
|
||||
{
|
||||
public string Render()
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
//namespace Umbraco.Core.Profiling
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// A profiler that outputs its results to the LogHelper
|
||||
// /// </summary>
|
||||
// public class LogProfiler : IProfiler
|
||||
// {
|
||||
// public string Render()
|
||||
// {
|
||||
// return string.Empty;
|
||||
// }
|
||||
|
||||
public IDisposable Step(string name)
|
||||
{
|
||||
LogHelper.Debug(typeof(LogProfiler), "Starting - " + name);
|
||||
return DisposableTimer.Start(l => LogHelper.Info(typeof (LogProfiler), () => name + " (took " + l + "ms)"));
|
||||
}
|
||||
// public IDisposable Step(string name)
|
||||
// {
|
||||
// LogHelper.Debug(typeof(LogProfiler), "Starting - " + name);
|
||||
// return DisposableTimer.Start(l => LogHelper.Info(typeof (LogProfiler), () => name + " (took " + l + "ms)"));
|
||||
// }
|
||||
|
||||
public void Start()
|
||||
{
|
||||
//the log will alwasy be started
|
||||
}
|
||||
// public void Start()
|
||||
// {
|
||||
// //the log will alwasy be started
|
||||
// }
|
||||
|
||||
public void Stop(bool discardResults = false)
|
||||
{
|
||||
//we don't need to do anything here
|
||||
}
|
||||
}
|
||||
}
|
||||
// public void Stop(bool discardResults = false)
|
||||
// {
|
||||
// //we don't need to do anything here
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using StackExchange.Profiling;
|
||||
|
||||
namespace Umbraco.Core.Profiling
|
||||
{
|
||||
public static class ProfilerExtensions
|
||||
public static class MiniProfilerExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Writes out a step prefixed with the type
|
||||
@@ -11,7 +12,7 @@ namespace Umbraco.Core.Profiling
|
||||
/// <param name="profiler"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
public static IDisposable Step<T>(this IProfiler profiler, string name)
|
||||
public static IDisposable Step<T>(this MiniProfiler profiler, string name)
|
||||
{
|
||||
return profiler.Step(string.Format("[" + typeof (T).Name + "] " + name));
|
||||
}
|
||||
@@ -1,37 +1,37 @@
|
||||
using Umbraco.Core.ObjectResolution;
|
||||
//using Umbraco.Core.ObjectResolution;
|
||||
|
||||
namespace Umbraco.Core.Profiling
|
||||
{
|
||||
/// <summary>
|
||||
/// A resolver exposing the current profiler
|
||||
/// </summary>
|
||||
public class ProfilerResolver : SingleObjectResolverBase<ProfilerResolver, IProfiler>
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="profiler"></param>
|
||||
public ProfilerResolver(IProfiler profiler)
|
||||
: base(profiler)
|
||||
{
|
||||
//namespace Umbraco.Core.Profiling
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// A resolver exposing the current profiler
|
||||
// /// </summary>
|
||||
// public class ProfilerResolver : SingleObjectResolverBase<ProfilerResolver, IProfiler>
|
||||
// {
|
||||
// /// <summary>
|
||||
// /// Constructor
|
||||
// /// </summary>
|
||||
// /// <param name="profiler"></param>
|
||||
// public ProfilerResolver(IProfiler profiler)
|
||||
// : base(profiler)
|
||||
// {
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Method allowing to change the profiler during startup
|
||||
/// </summary>
|
||||
/// <param name="profiler"></param>
|
||||
internal void SetProfiler(IProfiler profiler)
|
||||
{
|
||||
Value = profiler;
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Method allowing to change the profiler during startup
|
||||
// /// </summary>
|
||||
// /// <param name="profiler"></param>
|
||||
// internal void SetProfiler(IProfiler profiler)
|
||||
// {
|
||||
// Value = profiler;
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current profiler
|
||||
/// </summary>
|
||||
public IProfiler Profiler
|
||||
{
|
||||
get { return Value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Gets the current profiler
|
||||
// /// </summary>
|
||||
// public IProfiler Profiler
|
||||
// {
|
||||
// get { return Value; }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -1,161 +1,161 @@
|
||||
using System;
|
||||
using System.Web;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Logging;
|
||||
//using System;
|
||||
//using System.Web;
|
||||
//using StackExchange.Profiling;
|
||||
//using Umbraco.Core.Configuration;
|
||||
//using Umbraco.Core.Logging;
|
||||
|
||||
namespace Umbraco.Core.Profiling
|
||||
{
|
||||
/// <summary>
|
||||
/// A profiler used for web based activity based on the MiniProfiler framework
|
||||
/// </summary>
|
||||
public class WebProfiler : IProfiler
|
||||
{
|
||||
//namespace Umbraco.Core.Profiling
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// A profiler used for web based activity based on the MiniProfiler framework
|
||||
// /// </summary>
|
||||
// public class WebProfiler : IProfiler
|
||||
// {
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Binds to application events to enable the MiniProfiler
|
||||
/// </remarks>
|
||||
internal WebProfiler()
|
||||
{
|
||||
UmbracoApplicationBase.ApplicationInit += UmbracoApplicationApplicationInit;
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Constructor
|
||||
// /// </summary>
|
||||
// /// <remarks>
|
||||
// /// Binds to application events to enable the MiniProfiler
|
||||
// /// </remarks>
|
||||
// internal WebProfiler()
|
||||
// {
|
||||
// UmbracoApplicationBase.ApplicationInit += UmbracoApplicationApplicationInit;
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Handle the Init event o fthe UmbracoApplication which allows us to subscribe to the HttpApplication events
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
void UmbracoApplicationApplicationInit(object sender, EventArgs e)
|
||||
{
|
||||
var app = sender as HttpApplication;
|
||||
if (app == null) return;
|
||||
// /// <summary>
|
||||
// /// Handle the Init event o fthe UmbracoApplication which allows us to subscribe to the HttpApplication events
|
||||
// /// </summary>
|
||||
// /// <param name="sender"></param>
|
||||
// /// <param name="e"></param>
|
||||
// void UmbracoApplicationApplicationInit(object sender, EventArgs e)
|
||||
// {
|
||||
// var app = sender as HttpApplication;
|
||||
// if (app == null) return;
|
||||
|
||||
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High)
|
||||
{
|
||||
//If we don't have a high enough trust level we cannot bind to the events
|
||||
LogHelper.Info<WebProfiler>("Cannot start the WebProfiler since the application is running in Medium trust");
|
||||
}
|
||||
else
|
||||
{
|
||||
app.BeginRequest += UmbracoApplicationBeginRequest;
|
||||
app.EndRequest += UmbracoApplicationEndRequest;
|
||||
}
|
||||
}
|
||||
// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High)
|
||||
// {
|
||||
// //If we don't have a high enough trust level we cannot bind to the events
|
||||
// LogHelper.Info<WebProfiler>("Cannot start the WebProfiler since the application is running in Medium trust");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// app.BeginRequest += UmbracoApplicationBeginRequest;
|
||||
// app.EndRequest += UmbracoApplicationEndRequest;
|
||||
// }
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Handle the begin request event
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
void UmbracoApplicationEndRequest(object sender, EventArgs e)
|
||||
{
|
||||
if (GlobalSettings.DebugMode == false) return;
|
||||
var request = TryGetRequest(sender);
|
||||
if (request.Success == false) return;
|
||||
if (request.Result.Url.IsClientSideRequest()) return;
|
||||
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
|
||||
{
|
||||
//stop the profiler
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Handle the begin request event
|
||||
// /// </summary>
|
||||
// /// <param name="sender"></param>
|
||||
// /// <param name="e"></param>
|
||||
// void UmbracoApplicationEndRequest(object sender, EventArgs e)
|
||||
// {
|
||||
// if (GlobalSettings.DebugMode == false) return;
|
||||
// var request = TryGetRequest(sender);
|
||||
// if (request.Success == false) return;
|
||||
// if (request.Result.Url.IsClientSideRequest()) return;
|
||||
// if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
|
||||
// {
|
||||
// //stop the profiler
|
||||
// Stop();
|
||||
// }
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Handle the end request event
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
void UmbracoApplicationBeginRequest(object sender, EventArgs e)
|
||||
{
|
||||
if (GlobalSettings.DebugMode == false) return;
|
||||
var request = TryGetRequest(sender);
|
||||
if (request.Success == false) return;
|
||||
if (request.Result.Url.IsClientSideRequest()) return;
|
||||
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
|
||||
{
|
||||
//start the profiler
|
||||
Start();
|
||||
}
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Handle the end request event
|
||||
// /// </summary>
|
||||
// /// <param name="sender"></param>
|
||||
// /// <param name="e"></param>
|
||||
// void UmbracoApplicationBeginRequest(object sender, EventArgs e)
|
||||
// {
|
||||
// if (GlobalSettings.DebugMode == false) return;
|
||||
// var request = TryGetRequest(sender);
|
||||
// if (request.Success == false) return;
|
||||
// if (request.Result.Url.IsClientSideRequest()) return;
|
||||
// if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
|
||||
// {
|
||||
// //start the profiler
|
||||
// Start();
|
||||
// }
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Render the UI to display the profiler
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// Generally used for HTML displays
|
||||
/// </remarks>
|
||||
public string Render()
|
||||
{
|
||||
return MiniProfiler.RenderIncludes().ToString();
|
||||
}
|
||||
// /// <summary>
|
||||
// /// Render the UI to display the profiler
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// /// <remarks>
|
||||
// /// Generally used for HTML displays
|
||||
// /// </remarks>
|
||||
// public string Render()
|
||||
// {
|
||||
// return MiniProfiler.RenderIncludes().ToString();
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Profile a step
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// Use the 'using(' syntax
|
||||
/// </remarks>
|
||||
public IDisposable Step(string name)
|
||||
{
|
||||
if (GlobalSettings.DebugMode == false) return null;
|
||||
// /// <summary>
|
||||
// /// Profile a step
|
||||
// /// </summary>
|
||||
// /// <param name="name"></param>
|
||||
// /// <returns></returns>
|
||||
// /// <remarks>
|
||||
// /// Use the 'using(' syntax
|
||||
// /// </remarks>
|
||||
// public IDisposable Step(string name)
|
||||
// {
|
||||
// if (GlobalSettings.DebugMode == false) return null;
|
||||
|
||||
return MiniProfiler.Current.Step(name);
|
||||
}
|
||||
// return MiniProfiler.Current.Step(name);
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Start the profiler
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
if (GlobalSettings.DebugMode == false) return;
|
||||
//will not run in medium trust
|
||||
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
|
||||
// /// <summary>
|
||||
// /// Start the profiler
|
||||
// /// </summary>
|
||||
// public void Start()
|
||||
// {
|
||||
// if (GlobalSettings.DebugMode == false) return;
|
||||
// //will not run in medium trust
|
||||
// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
|
||||
|
||||
MiniProfiler.Start();
|
||||
}
|
||||
// MiniProfiler.Start();
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Start the profiler
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// set discardResults to false when you want to abandon all profiling, this is useful for
|
||||
/// when someone is not authenticated or you want to clear the results based on some other mechanism.
|
||||
/// </remarks>
|
||||
public void Stop(bool discardResults = false)
|
||||
{
|
||||
if (GlobalSettings.DebugMode == false) return;
|
||||
//will not run in medium trust
|
||||
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
|
||||
// /// <summary>
|
||||
// /// Start the profiler
|
||||
// /// </summary>
|
||||
// /// <remarks>
|
||||
// /// set discardResults to false when you want to abandon all profiling, this is useful for
|
||||
// /// when someone is not authenticated or you want to clear the results based on some other mechanism.
|
||||
// /// </remarks>
|
||||
// public void Stop(bool discardResults = false)
|
||||
// {
|
||||
// if (GlobalSettings.DebugMode == false) return;
|
||||
// //will not run in medium trust
|
||||
// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
|
||||
|
||||
MiniProfiler.Stop(discardResults);
|
||||
}
|
||||
// MiniProfiler.Stop(discardResults);
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the request object from the app instance if it is available
|
||||
/// </summary>
|
||||
/// <param name="sender">The application object</param>
|
||||
/// <returns></returns>
|
||||
private Attempt<HttpRequestBase> TryGetRequest(object sender)
|
||||
{
|
||||
var app = sender as HttpApplication;
|
||||
if (app == null) return Attempt<HttpRequestBase>.False;
|
||||
// /// <summary>
|
||||
// /// Gets the request object from the app instance if it is available
|
||||
// /// </summary>
|
||||
// /// <param name="sender">The application object</param>
|
||||
// /// <returns></returns>
|
||||
// private Attempt<HttpRequestBase> TryGetRequest(object sender)
|
||||
// {
|
||||
// var app = sender as HttpApplication;
|
||||
// if (app == null) return Attempt<HttpRequestBase>.False;
|
||||
|
||||
try
|
||||
{
|
||||
var req = app.Request;
|
||||
return new Attempt<HttpRequestBase>(true, new HttpRequestWrapper(req));
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
return new Attempt<HttpRequestBase>(ex);
|
||||
}
|
||||
}
|
||||
// try
|
||||
// {
|
||||
// var req = app.Request;
|
||||
// return new Attempt<HttpRequestBase>(true, new HttpRequestWrapper(req));
|
||||
// }
|
||||
// catch (HttpException ex)
|
||||
// {
|
||||
// return new Attempt<HttpRequestBase>(ex);
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
// }
|
||||
//}
|
||||
@@ -523,7 +523,7 @@
|
||||
<Compile Include="Persistence\UnitOfWork\PetaPocoUnitOfWorkProvider.cs" />
|
||||
<Compile Include="Profiling\IProfiler.cs" />
|
||||
<Compile Include="Profiling\LogProfiler.cs" />
|
||||
<Compile Include="Profiling\ProfilerExtensions.cs" />
|
||||
<Compile Include="Profiling\MiniProfilerExtensions.cs" />
|
||||
<Compile Include="Profiling\ProfilerResolver.cs" />
|
||||
<Compile Include="Profiling\WebProfiler.cs" />
|
||||
<Compile Include="PropertyEditors\Attributes\PropertyEditorAttribute.cs" />
|
||||
|
||||
@@ -25,11 +25,6 @@ namespace Umbraco.Core
|
||||
public static event EventHandler ApplicationStarting;
|
||||
public static event EventHandler ApplicationStarted;
|
||||
|
||||
/// <summary>
|
||||
/// Called when the HttpApplication.Init() is fired, allows developers to subscribe to the HttpApplication events
|
||||
/// </summary>
|
||||
public static event EventHandler ApplicationInit;
|
||||
|
||||
/// <summary>
|
||||
/// Boots up the Umbraco application
|
||||
/// </summary>
|
||||
@@ -53,17 +48,49 @@ namespace Umbraco.Core
|
||||
protected void Application_Start(object sender, EventArgs e)
|
||||
{
|
||||
StartApplication(sender, e);
|
||||
|
||||
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High)
|
||||
{
|
||||
//If we don't have a high enough trust level we cannot bind to the events
|
||||
LogHelper.Info<UmbracoApplicationBase>("Cannot use the MiniProfiler since the application is running in Medium trust");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Override init and raise the event
|
||||
/// Initializes the mini profiler for the request
|
||||
/// </summary>
|
||||
public override void Init()
|
||||
protected void Application_BeginRequest()
|
||||
{
|
||||
base.Init();
|
||||
OnApplicationInit(this, new EventArgs());
|
||||
if (GlobalSettings.DebugMode == false) return;
|
||||
var request = TryGetRequest();
|
||||
if (request.Success == false) return;
|
||||
if (request.Result.Url.IsClientSideRequest()) return;
|
||||
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
|
||||
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
|
||||
{
|
||||
//start the profiler
|
||||
MiniProfiler.Start();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Closes the mini profiler for the request
|
||||
/// </summary>
|
||||
protected void Application_EndRequest()
|
||||
{
|
||||
if (GlobalSettings.DebugMode == false) return;
|
||||
var request = TryGetRequest();
|
||||
if (request.Success == false) return;
|
||||
if (request.Result.Url.IsClientSideRequest()) return;
|
||||
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
|
||||
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
|
||||
{
|
||||
//stop the profiler
|
||||
MiniProfiler.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Developers can override this method to modify objects on startup
|
||||
/// </summary>
|
||||
@@ -85,18 +112,7 @@ namespace Umbraco.Core
|
||||
if (ApplicationStarted != null)
|
||||
ApplicationStarted(sender, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called to raise the ApplicationInit event
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void OnApplicationInit(object sender, EventArgs e)
|
||||
{
|
||||
if (ApplicationInit != null)
|
||||
ApplicationInit(sender, e);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A method that can be overridden to invoke code when the application has an error.
|
||||
/// </summary>
|
||||
@@ -146,5 +162,22 @@ namespace Umbraco.Core
|
||||
|
||||
protected abstract IBootManager GetBootManager();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the request object from the app instance if it is available
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private Attempt<HttpRequestBase> TryGetRequest()
|
||||
{
|
||||
try
|
||||
{
|
||||
var req = Request;
|
||||
return new Attempt<HttpRequestBase>(true, new HttpRequestWrapper(req));
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
return new Attempt<HttpRequestBase>(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +127,10 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MiniProfiler, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\MySql.Data.6.6.4\lib\net40\MySql.Data.dll</HintPath>
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
|
||||
<package id="Microsoft.Web.Helpers" version="1.0.0" targetFramework="net40" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
|
||||
<package id="MiniProfiler" version="2.1.0" targetFramework="net40" />
|
||||
<package id="MySql.Data" version="6.6.4" targetFramework="net40" />
|
||||
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
|
||||
<package id="SharpZipLib" version="0.86.0" targetFramework="net40" />
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<%@ Import Namespace="System.Web.Script.Serialization" %>
|
||||
|
||||
<%@ Register Src="controls/Tree/TreeControl.ascx" TagName="TreeControl" TagPrefix="umbraco" %>
|
||||
<%@ Import Namespace="StackExchange.Profiling" %>
|
||||
<%@ Import Namespace="Umbraco.Core.Profiling" %>
|
||||
<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %>
|
||||
<%@ Register TagPrefix="uc1" TagName="quickSearch" Src="Search/QuickSearch.ascx" %>
|
||||
@@ -391,7 +392,7 @@
|
||||
</script>
|
||||
<%if(string.IsNullOrEmpty(Request["umbDebug"]) == false && umbraco.GlobalSettings.DebugMode)
|
||||
{
|
||||
Response.Write(ProfilerResolver.Current.Profiler.Render());
|
||||
Response.Write(MiniProfiler.RenderIncludes());
|
||||
}%>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -22,6 +22,16 @@ namespace Umbraco.Web.Mvc
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the controller name from the controller instance
|
||||
/// </summary>
|
||||
/// <param name="controllerInstance"></param>
|
||||
/// <returns></returns>
|
||||
internal static string GetControllerName(this IController controllerInstance)
|
||||
{
|
||||
return GetControllerName(controllerInstance.GetType());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the controller name from the controller type
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Dictionary;
|
||||
@@ -94,7 +95,7 @@ namespace Umbraco.Web.Mvc
|
||||
}
|
||||
else
|
||||
{
|
||||
var profilerMarkup = ProfilerResolver.Current.Profiler.Render();
|
||||
var profilerMarkup = MiniProfiler.RenderIncludes();
|
||||
text = text.Substring(0, pos) + profilerMarkup + text.Substring(pos, text.Length - pos);
|
||||
}
|
||||
base.WriteLiteral(text);
|
||||
|
||||
@@ -126,6 +126,10 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MiniProfiler, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using StackExchange.Profiling.MVCHelpers;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Dictionary;
|
||||
@@ -72,13 +73,16 @@ namespace Umbraco.Web
|
||||
new MasterControllerFactory(FilteredControllerFactoriesResolver.Current));
|
||||
|
||||
//set the render view engine
|
||||
ViewEngines.Engines.Add(new RenderViewEngine());
|
||||
ViewEngines.Engines.Add(new ProfilingViewEngine(new RenderViewEngine()));
|
||||
//set the plugin view engine
|
||||
ViewEngines.Engines.Add(new PluginViewEngine());
|
||||
ViewEngines.Engines.Add(new ProfilingViewEngine(new PluginViewEngine()));
|
||||
|
||||
//set model binder
|
||||
ModelBinders.Binders.Add(new KeyValuePair<Type, IModelBinder>(typeof(RenderModel), new RenderModelBinder()));
|
||||
|
||||
//add the profiling action filter
|
||||
GlobalFilters.Filters.Add(new ProfilingActionFilter());
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -236,9 +240,6 @@ namespace Umbraco.Web
|
||||
{
|
||||
base.InitializeResolvers();
|
||||
|
||||
//Set the profiler to be the web profiler
|
||||
ProfilerResolver.Current.SetProfiler(new WebProfiler());
|
||||
|
||||
//set the default RenderMvcController
|
||||
DefaultRenderMvcControllerResolver.Current = new DefaultRenderMvcControllerResolver(typeof(RenderMvcController));
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<package id="Microsoft.AspNet.WebPages" version="2.0.20710.0" targetFramework="net40" />
|
||||
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
|
||||
<package id="MiniProfiler" version="2.1.0" targetFramework="net40" />
|
||||
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
|
||||
<package id="SharpZipLib" version="0.86.0" targetFramework="net40" />
|
||||
<package id="uGoLive" version="1.4.0" targetFramework="net40" />
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Web.UI;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Text.RegularExpressions;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Profiling;
|
||||
@@ -45,7 +46,7 @@ namespace umbraco
|
||||
protected override void OnPreInit(EventArgs e)
|
||||
{
|
||||
base.OnPreInit(e);
|
||||
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("PreInit"))
|
||||
using (MiniProfiler.Current.Step<UmbracoDefault>("PreInit"))
|
||||
{
|
||||
|
||||
// handle the infamous umbDebugShowTrace, etc
|
||||
@@ -82,7 +83,7 @@ namespace umbraco
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("Init"))
|
||||
using (MiniProfiler.Current.Step<UmbracoDefault>("Init"))
|
||||
{
|
||||
|
||||
base.OnInit(e);
|
||||
@@ -119,7 +120,7 @@ namespace umbraco
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
{
|
||||
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("Load"))
|
||||
using (MiniProfiler.Current.Step<UmbracoDefault>("Load"))
|
||||
{
|
||||
base.OnLoad(e);
|
||||
|
||||
@@ -133,7 +134,7 @@ namespace umbraco
|
||||
|
||||
protected override void Render(HtmlTextWriter writer)
|
||||
{
|
||||
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("Render"))
|
||||
using (MiniProfiler.Current.Step<UmbracoDefault>("Render"))
|
||||
{
|
||||
|
||||
// do the original rendering
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections;
|
||||
using System.Web;
|
||||
using System.Xml;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Profiling;
|
||||
@@ -98,7 +99,7 @@ namespace umbraco
|
||||
/// <returns></returns>
|
||||
private string GetRecursiveValueLegacy(IDictionary elements)
|
||||
{
|
||||
using (ProfilerResolver.Current.Profiler.Step<item>("Checking recusively"))
|
||||
using (MiniProfiler.Current.Step<item>("Checking recusively"))
|
||||
{
|
||||
var content = "";
|
||||
|
||||
@@ -130,7 +131,7 @@ namespace umbraco
|
||||
|
||||
private void ParseItem(IDictionary attributes)
|
||||
{
|
||||
using (ProfilerResolver.Current.Profiler.Step<item>("Start parsing " + _fieldName))
|
||||
using (MiniProfiler.Current.Step<item>("Start parsing " + _fieldName))
|
||||
{
|
||||
HttpContext.Current.Trace.Write("item", "Start parsing '" + _fieldName + "'");
|
||||
if (helper.FindAttribute(attributes, "textIfEmpty") != "" && _fieldContent == "")
|
||||
|
||||
@@ -17,6 +17,7 @@ using System.Web.UI.WebControls;
|
||||
using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
using System.Xml.Xsl;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Events;
|
||||
@@ -235,7 +236,7 @@ namespace umbraco
|
||||
? string.Format("Render Inline Macro, Cache: {0})", Model.CacheDuration)
|
||||
: string.Format("Render Macro: {0}, type: {1}, cache: {2})", Name, Model.MacroType, Model.CacheDuration);
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>(macroInfo))
|
||||
using (MiniProfiler.Current.Step<macro>(macroInfo))
|
||||
{
|
||||
TraceInfo("renderMacro", macroInfo);
|
||||
|
||||
@@ -281,7 +282,7 @@ namespace umbraco
|
||||
return GetControlForErrorBehavior("Error loading Partial View script (file: " + ScriptFile + ")", macroErrorEventArgs);
|
||||
};
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing Partial View: " + Model.TypeName))
|
||||
using (MiniProfiler.Current.Step<macro>("Executing Partial View: " + Model.TypeName))
|
||||
{
|
||||
TraceInfo("umbracoMacro", "Partial View added (" + Model.TypeName + ")");
|
||||
try
|
||||
@@ -317,7 +318,7 @@ namespace umbraco
|
||||
}
|
||||
case (int) MacroTypes.UserControl:
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing UserControl: " + Model.TypeName))
|
||||
using (MiniProfiler.Current.Step<macro>("Executing UserControl: " + Model.TypeName))
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -361,7 +362,7 @@ namespace umbraco
|
||||
|
||||
case (int) MacroTypes.CustomControl:
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing CustomControl: " + Model.TypeName + "." + Model.TypeAssembly))
|
||||
using (MiniProfiler.Current.Step<macro>("Executing CustomControl: " + Model.TypeName + "." + Model.TypeAssembly))
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -423,7 +424,7 @@ namespace umbraco
|
||||
return GetControlForErrorBehavior("Error loading MacroEngine script (file: " + ScriptFile + ")", macroErrorEventArgs);
|
||||
};
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing MacroEngineScript: " + ScriptFile))
|
||||
using (MiniProfiler.Current.Step<macro>("Executing MacroEngineScript: " + ScriptFile))
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -500,7 +501,7 @@ namespace umbraco
|
||||
{
|
||||
string dateAddedCacheKey;
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Saving MacroContent To Cache: " + Model.CacheIdentifier))
|
||||
using (MiniProfiler.Current.Step<macro>("Saving MacroContent To Cache: " + Model.CacheIdentifier))
|
||||
{
|
||||
|
||||
// NH: Scripts and XSLT can be generated as strings, but not controls as page events wouldn't be hit (such as Page_Load, etc)
|
||||
@@ -830,7 +831,7 @@ namespace umbraco
|
||||
return new LiteralControl(string.Empty);
|
||||
}
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing XSLT: " + XsltFile))
|
||||
using (MiniProfiler.Current.Step<macro>("Executing XSLT: " + XsltFile))
|
||||
{
|
||||
XmlDocument macroXml = null;
|
||||
|
||||
@@ -859,7 +860,7 @@ namespace umbraco
|
||||
{
|
||||
var xsltFile = getXslt(XsltFile);
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<macro>("Performing transformation"))
|
||||
using (MiniProfiler.Current.Step<macro>("Performing transformation"))
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -1681,8 +1682,8 @@ namespace umbraco
|
||||
//Trace out to profiling... doesn't actually profile, just for informational output.
|
||||
if (excludeProfiling == false)
|
||||
{
|
||||
//NOTE: we cannot even do this since it throws an exception, need to use using clause: ProfilerResolver.Current.Profiler.Step(message).Dispose();
|
||||
using (ProfilerResolver.Current.Profiler.Step(string.Format("{0}, Error: {1}", message, ex)))
|
||||
//NOTE: we cannot even do this since it throws an exception, need to use using clause: MiniProfiler.Current.Step(message).Dispose();
|
||||
using (MiniProfiler.Current.Step(string.Format("{0}, Error: {1}", message, ex)))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Web.UI;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core.Profiling;
|
||||
using umbraco.presentation.LiveEditing;
|
||||
using umbraco.presentation.LiveEditing.Controls;
|
||||
@@ -40,7 +41,7 @@ namespace umbraco.presentation.masterpages
|
||||
base.Render(new HtmlTextWriter(baseWriter));
|
||||
var baseOutput = baseWriter.ToString();
|
||||
|
||||
baseOutput = baseOutput.Replace("</body>", ProfilerResolver.Current.Profiler.Render() + "</body>");
|
||||
baseOutput = baseOutput.Replace("</body>", MiniProfiler.RenderIncludes() + "</body>");
|
||||
writer.Write(baseOutput);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Web.UI.WebControls;
|
||||
|
||||
//This is only in case an upgrade goes wrong and the the /masterpages/ files are not copied over
|
||||
//which would result in an error. so we have kept the old namespaces intact with references to new ones
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core.Profiling;
|
||||
using mp = umbraco.presentation.masterpages;
|
||||
namespace umbraco.presentation.umbraco.masterpages
|
||||
@@ -42,7 +43,7 @@ namespace umbraco.presentation.masterpages
|
||||
// profiling
|
||||
if (string.IsNullOrEmpty(Request.QueryString["umbDebug"]) == false && GlobalSettings.DebugMode)
|
||||
{
|
||||
baseOutput = baseOutput.Replace("</body>", ProfilerResolver.Current.Profiler.Render() + "</body>");
|
||||
baseOutput = baseOutput.Replace("</body>", MiniProfiler.RenderIncludes() + "</body>");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ using System.Web;
|
||||
using System.Web.Caching;
|
||||
using System.Web.UI;
|
||||
using System.Xml;
|
||||
using StackExchange.Profiling;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Macros;
|
||||
@@ -134,7 +135,7 @@ namespace umbraco.presentation.templateControls
|
||||
/// <param name="item">The item.</param>
|
||||
public virtual void Load(Item item)
|
||||
{
|
||||
using (ProfilerResolver.Current.Profiler.Step<ItemRenderer>(string.Format("Item: {0}", item.Field)))
|
||||
using (MiniProfiler.Current.Step<ItemRenderer>(string.Format("Item: {0}", item.Field)))
|
||||
{
|
||||
ParseMacros(item);
|
||||
}
|
||||
@@ -152,7 +153,7 @@ namespace umbraco.presentation.templateControls
|
||||
|
||||
string elementText = GetFieldContents(item);
|
||||
|
||||
using (ProfilerResolver.Current.Profiler.Step<ItemRenderer>("Parsing Macros"))
|
||||
using (MiniProfiler.Current.Step<ItemRenderer>("Parsing Macros"))
|
||||
{
|
||||
|
||||
MacroTagParser.ParseMacros(
|
||||
|
||||
Reference in New Issue
Block a user