protected override void Write(LogEventInfo logEvent) { IExecutionTimer timer = null; try { timer = _timerStrategy(); } catch (Exception e) { Trace.Write(e.ToString()); } // Execution in on thread without access to RequestStore if (timer == null || _messageBroker == null) { return; } _messageBroker.Publish(new NLogEventInfoMessage { Level = logEvent.Level, Logger = logEvent.LoggerName, Message = logEvent.FormattedMessage, FromFirst = timer.Point().Offset, FromLast = CalculateFromLast(timer), LogEvent = logEvent, LevelNumber = NumberFromLevel(logEvent.Level) }); }
public void ProxyFiltersWithRuntimePolicyOn([Frozen] IExecutionTimer timer, ActionInvoker.GetFilters <T> sut, IAlternateMethodContext context) { sut.NewImplementation(context); timer.Verify(t => t.Time(It.IsAny <Action>())); context.Verify(c => c.ReturnValue); }
protected override void Write(LogEventInfo logEvent) { IExecutionTimer timer = null; try { timer = _timerStrategy(); } catch (Exception e) { // Cannot trace here as there may be an nlog listener causing a stack overflow, see https://github.com/rho24/Glimpse.NLog/issues/23#issuecomment-288949309 // Trace.Write(e.ToString()); } // Execution in on thread without access to RequestStore if (timer == null || _messageBroker == null) { return; } _messageBroker.Publish(new NLogEventInfoMessage { Level = logEvent.Level, Logger = logEvent.LoggerName, Message = logEvent.FormattedMessage, FromFirst = timer.Point().Offset, FromLast = CalculateFromLast(timer), LogEvent = logEvent, LevelNumber = NumberFromLevel(logEvent.Level) }); }
public OngoingCapture(IExecutionTimer executionTimer, IMessageBroker messageBroker, string eventName, string eventSubText, TimelineCategoryItem category, ITimelineMessage message) { Offset = executionTimer.Start(); ExecutionTimer = executionTimer; Message = message.AsTimelineMessage(eventName, category, eventSubText); MessageBroker = messageBroker; }
public TimelineCapture(IExecutionTimer timer, IMessageBroker broker, string eventName, string appName) { _timer = timer; _appName = appName; _broker = broker; _eventName = eventName; _startOffset = _timer.Start(); }
private void Begin() { _timer = _timerStrategy.Invoke(); if (_timer == null) { return; } _startOffset = _timer.Start(); }
public void PublishMessageWhenExecuted([Frozen] IExecutionTimer timer, ActionExecutedContext argument, IAlternateMethodContext context) { context.Setup(c => c.Arguments).Returns(new object[] { argument }); var impl = new ActionFilter.OnActionExecuted(); impl.NewImplementation(context); timer.Verify(t => t.Time(It.IsAny <Action>())); context.MessageBroker.Verify(mb => mb.Publish(It.IsAny <ActionFilter.OnActionExecuted.Message>())); }
public void PublishMessageWhenExecuted([Frozen] IExecutionTimer timer, IAlternateMethodContext context) { context.Setup(c => c.Arguments).Returns(new object[] { (System.Web.HttpContextBase)null, new object(), (string)null, (System.Web.Routing.RouteValueDictionary)null, System.Web.Routing.RouteDirection.IncomingRequest }); context.Setup(c => c.ReturnValue).Returns(true); context.Setup(c => c.InvocationTarget).Returns(new System.Web.Routing.Route("Test", null)); var impl = new RouteBase.ProcessConstraint(); impl.NewImplementation(context); timer.Verify(t => t.Time(It.IsAny <Action>())); context.MessageBroker.Verify(mb => mb.Publish(It.IsAny <RouteBase.ProcessConstraint.Message>())); }
public void PublishMessageWhenExecuted([Frozen] IExecutionTimer timer, IAlternateMethodContext context, IRouteNameMixin mixin) { context.Setup(c => c.Arguments).Returns(new object[5]); context.Setup(c => c.ReturnValue).Returns(new System.Web.Routing.RouteData()); context.Setup(c => c.InvocationTarget).Returns(new System.Web.Routing.Route("Test", null)); context.Setup(c => c.Proxy).Returns(mixin); var impl = new Route.GetRouteData(typeof(T)); impl.NewImplementation(context); timer.Verify(t => t.Time(It.IsAny <Action>())); context.MessageBroker.Verify(mb => mb.Publish(It.IsAny <Route.GetRouteData.Message>())); }
private TimeSpan CalculateFromLast(IExecutionTimer timer) { if (_fromLastWatch == null) { _fromLastWatch = Stopwatch.StartNew(); return TimeSpan.FromMilliseconds(0); } // Timer started before this request, reset it if (DateTime.Now - _fromLastWatch.Elapsed < timer.RequestStart) { _fromLastWatch = Stopwatch.StartNew(); return TimeSpan.FromMilliseconds(0); } var result = _fromLastWatch.Elapsed; _fromLastWatch = Stopwatch.StartNew(); return result; }
internal TimelineRegion(IMessageBroker messageBroker, Func<IExecutionTimer> timerStrategy, string command, string key) { this.command = command; this.key = key; if (messageBroker == null || timerStrategy == null) return; this.messageBroker = messageBroker; timer = timerStrategy(); if (timer == null) return; offset = timer.Point().Offset; context = SynchronizationContext.Current; // capture context }
private TimeSpan CalculateFromLast(IExecutionTimer timer) { if (_fromLastWatch == null) { _fromLastWatch = Stopwatch.StartNew(); return(TimeSpan.FromMilliseconds(0)); } // Timer started before this request, reset it if (DateTime.Now - _fromLastWatch.Elapsed < timer.RequestStart) { _fromLastWatch = Stopwatch.StartNew(); return(TimeSpan.FromMilliseconds(0)); } var result = _fromLastWatch.Elapsed; _fromLastWatch = Stopwatch.StartNew(); return(result); }
internal TimelineRegion(IMessageBroker messageBroker, Func <IExecutionTimer> timerStrategy, string command, string key) { this.command = command; this.key = key; if (messageBroker == null || timerStrategy == null) { return; } this.messageBroker = messageBroker; timer = timerStrategy(); if (timer == null) { return; } offset = timer.Point().Offset; context = SynchronizationContext.Current; // capture context }
protected TimelineBase(IInspectorContext context) { _messageBroker = context.MessageBroker; _timer = context.TimerStrategy(); _offset = _timer.Point().Offset; }
public GlimpseDbTransaction(DbTransaction transaction, GlimpseDbConnection connection, IMessageBroker messageBroker, IExecutionTimer timerStrategy) : this(transaction, connection) { MessageBroker = messageBroker; TimerStrategy = timerStrategy; }
public GlimpseDbCommand(DbCommand innerCommand, GlimpseDbConnection connection, IMessageBroker messageBroker, IExecutionTimer timerStrategy) : this(innerCommand, connection) { MessageBroker = messageBroker; TimerStrategy = timerStrategy; }
public GlimpseDbConnection(DbConnection connection, DbProviderFactory providerFactory, Guid connectionId, IMessageBroker messageBroker, IExecutionTimer timerStrategy) : this(connection, providerFactory, connectionId) { MessageBroker = messageBroker; TimerStrategy = timerStrategy; }
public FilterWrapper(IMessageBroker messageBroker, IExecutionTimer timer, LightNodeFilterAttribute originalFilter) { this.originalFilter = originalFilter; this.messageBroker = messageBroker; this.timer = timer; }
public void Cleanup() { _timer = null; _stopWatch = null; }
/// <summary> /// Initializes a new instance of the <see cref="TimedMessagePublisher"/> class. /// </summary> /// <param name="messageBroker">The message broker.</param> /// <param name="executionTimer">The execution timer.</param> public TimedMessagePublisher(IMessageBroker messageBroker, IExecutionTimer executionTimer) { _messageBroker = messageBroker; _executionTimer = executionTimer; }
public void Trace(TraceLevel level, string message, Exception ex) { // write to any existing trace writer if (_innerTraceWriter != null && level <= _innerTraceWriter.LevelFilter) { _innerTraceWriter.Trace(level, message, ex); } IExecutionTimer timer = _timerStrategy(); if (_traceMessages.Count > 0) { // check message to see if serialization is complete if (message.StartsWith("Serialized JSON:", StringComparison.Ordinal) || message.StartsWith("Deserialized JSON:", StringComparison.Ordinal)) { TimerResult timeResult = null; if (timer != null) { timeResult = timer.Stop(_start); _timelineMessage.AsTimedMessage(timeResult); } // set final JSON onto previous message JsonTraceMessage lastMessage = _traceMessages.Last(); lastMessage.JsonText = message.Substring(message.IndexOf(Environment.NewLine, StringComparison.Ordinal)).Trim(); lastMessage.Duration = (timeResult != null) ? (TimeSpan?)timeResult.Duration : null; _traceMessages.Clear(); return; } } JsonAction action = JsonAction.Unknown; string type = null; string json = null; if (_traceMessages.Count == 0) { Match match = Regex.Match(message, @"^Started serializing ([^\s]+)", RegexOptions.Compiled | RegexOptions.CultureInvariant); if (match.Success) { type = match.Groups[1].Value.TrimEnd('.'); action = JsonAction.Serialize; } else { match = Regex.Match(message, @"^Started deserializing ([^\s]+)", RegexOptions.Compiled | RegexOptions.CultureInvariant); if (match.Success) { type = match.Groups[1].Value.TrimEnd('.'); action = JsonAction.Deserialize; } else { if (message.StartsWith("Serialized JSON:", StringComparison.Ordinal)) { action = JsonAction.Serialize; } else if (message.StartsWith("Deserialized JSON:", StringComparison.Ordinal)) { action = JsonAction.Deserialize; } if (action != JsonAction.Unknown) { json = message.Substring(message.IndexOf(Environment.NewLine, StringComparison.Ordinal)).Trim(); message = null; } } } // create timeline message // will be updated each trace with new duration _timelineMessage = CreateJsonTimelineMessage(action, type); _messageBroker.Publish(_timelineMessage); if (timer != null) { _start = timer.Start(); } } else { JsonTraceMessage previous = _traceMessages.Last(); previous.Duration = null; action = previous.Action; type = previous.Type; } TimerResult result = null; if (timer != null) { result = timer.Stop(_start); _timelineMessage.AsTimedMessage(result); } JsonTraceMessage traceMessage = new JsonTraceMessage { Ordinal = _traceMessages.Count, MessageDate = DateTime.Now, Level = level, Message = message, Exception = ex, JsonText = json, Action = action, Type = (type != null) ? RemoveAssemblyDetails(type) : null, Duration = (result != null) ? (TimeSpan?)result.Duration : null }; _messageBroker.Publish(traceMessage); _traceMessages.Add(traceMessage); }