Пример #1
0
        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);
        }
Пример #3
0
        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)
            });
        }
Пример #4
0
 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;
 }
Пример #5
0
 public TimelineCapture(IExecutionTimer timer, IMessageBroker broker, string eventName, string appName)
 {
     _timer       = timer;
     _appName     = appName;
     _broker      = broker;
     _eventName   = eventName;
     _startOffset = _timer.Start();
 }
Пример #6
0
 private void Begin()
 {
     _timer = _timerStrategy.Invoke();
     if (_timer == null)
     {
         return;
     }
     _startOffset = _timer.Start();
 }
Пример #7
0
        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>()));
        }
Пример #9
0
        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>()));
        }
Пример #10
0
        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;
        }
Пример #11
0
            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
            }
Пример #12
0
        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);
        }
Пример #13
0
            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
            }
 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;
 }
Пример #15
0
 protected TimelineBase(IInspectorContext context)
 {
     _messageBroker = context.MessageBroker;
     _timer         = context.TimerStrategy();
     _offset        = _timer.Point().Offset;
 }
Пример #16
0
 public GlimpseDbTransaction(DbTransaction transaction, GlimpseDbConnection connection, IMessageBroker messageBroker, IExecutionTimer timerStrategy)
     : this(transaction, connection)
 {
     MessageBroker = messageBroker;
     TimerStrategy = timerStrategy;
 }
Пример #17
0
 public GlimpseDbCommand(DbCommand innerCommand, GlimpseDbConnection connection, IMessageBroker messageBroker, IExecutionTimer timerStrategy)
     : this(innerCommand, connection)
 {
     MessageBroker = messageBroker;
     TimerStrategy = timerStrategy;
 }
Пример #18
0
 public GlimpseDbCommand(DbCommand innerCommand, GlimpseDbConnection connection, IMessageBroker messageBroker, IExecutionTimer timerStrategy)
     : this(innerCommand, connection)
 {
     MessageBroker = messageBroker;
     TimerStrategy = timerStrategy;
 }
Пример #19
0
 public GlimpseDbConnection(DbConnection connection, DbProviderFactory providerFactory, Guid connectionId, IMessageBroker messageBroker, IExecutionTimer timerStrategy)
     : this(connection, providerFactory, connectionId)
 {
     MessageBroker = messageBroker;
     TimerStrategy = timerStrategy;
 }
Пример #20
0
 public FilterWrapper(IMessageBroker messageBroker, IExecutionTimer timer, LightNodeFilterAttribute originalFilter)
 {
     this.originalFilter = originalFilter;
     this.messageBroker  = messageBroker;
     this.timer          = timer;
 }
Пример #21
0
 public void Cleanup()
 {
     _timer = null;
     _stopWatch = null;
 }
Пример #22
0
 public GlimpseDbConnection(DbConnection connection, DbProviderFactory providerFactory, Guid connectionId, IMessageBroker messageBroker, IExecutionTimer timerStrategy)
     : this(connection, providerFactory, connectionId)
 {
     MessageBroker = messageBroker;
     TimerStrategy = timerStrategy;
 }
 /// <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);
        }
Пример #25
0
 public GlimpseDbTransaction(DbTransaction transaction, GlimpseDbConnection connection, IMessageBroker messageBroker, IExecutionTimer timerStrategy)
     : this(transaction, connection)
 {
     MessageBroker = messageBroker;
     TimerStrategy = timerStrategy;
 }
 public FilterWrapper(IMessageBroker messageBroker, IExecutionTimer timer, LightNodeFilterAttribute originalFilter)
 {
     this.originalFilter = originalFilter;
     this.messageBroker = messageBroker;
     this.timer = timer;
 }
Пример #27
0
 protected TimelineBase(IInspectorContext context)
 {
     _messageBroker = context.MessageBroker;
     _timer         = context.TimerStrategy();
     _offset        = _timer.Point().Offset;
 }