public override Task <object> GetValueAsync()
 {
     if (_parameter.ParameterType == typeof(TraceEvent))
     {
         return(Task.FromResult <object>(_value.GetEvents().Last()));
     }
     else if (_parameter.ParameterType == typeof(IEnumerable <TraceEvent>))
     {
         return(Task.FromResult <object>(_value.GetEvents().AsEnumerable()));
     }
     return(Task.FromResult <object>(_value));
 }
Example #2
0
        /// <summary>
        /// Process Web Job Function Invocation Exceptions
        /// </summary>
        /// <param name="filter">The <see cref="TraceFilter"/> containing information about the exception.</param>
        public void Process(TraceFilter filter)
        {
            // Get Web Job scm Host URI: yoursite.scm.azurewebsites.net
            var httpHost = Environment.GetEnvironmentVariable("HTTP_HOST");

            var events = filter.GetEvents().Where(e => e.Exception != null);

            foreach (var traceEvent in events)
            {
                var tags = new List <string>()
                {
                    "UnhandledException"
                };
                tags.AddRange(Tags);

                // Add all trace properties to custom data
                var customData = traceEvent.Properties.ToDictionary(traceEventProperty => traceEventProperty.Key, traceEventProperty => traceEventProperty.Value);

                // If the FunctionInvocationId is available to us, we can use it to build a clickable link using the http host
                if (traceEvent.Properties.ContainsKey("MS_FunctionInvocationId") && !string.IsNullOrEmpty(httpHost))
                {
                    var functionInvocationId = traceEvent.Properties["MS_FunctionInvocationId"];
                    customData["Dashboard URL"] = $"https://{httpHost}/azurejobs/#/functions/invocations/{functionInvocationId}";
                }

                // If the FunctionDescriptor is available to us, we can use it to tag the executed function in raygun
                if (traceEvent.Properties.ContainsKey("MS_FunctionDescriptor"))
                {
                    var functionDescriptor = (FunctionDescriptor)traceEvent.Properties["MS_FunctionDescriptor"];
                    tags.Add(functionDescriptor.ShortName);
                }

                _client.Send(traceEvent.Exception, tags.Distinct().ToList(), customData);
            }
        }
Example #3
0
        public void UnHandledException([ErrorTrigger("0:01:00", 4)] TraceFilter filter, TextWriter log)
        {
            foreach (var traceEvent in filter.GetEvents())
            {
                _telemetryClient.TrackException(traceEvent.Exception);
            }

            // log the last detailed errors to the Dashboard
            log.WriteLine(filter.GetDetailedMessage(1));
        }
Example #4
0
        public void Trace_AnonymousFilter_NotifiesAsExpected()
        {
            TraceFilter filter = null;

            var monitor = new TraceMonitor()
                          .Filter(p =>
            {
                return(true);
            }, "Custom Message")
                          .Subscribe(p =>
            {
                filter = p;
            });

            TraceEvent traceEvent = new TraceEvent(TraceLevel.Error, "Error!");

            monitor.Trace(traceEvent);

            Assert.Equal("Custom Message", filter.Message);
            Assert.Equal(1, filter.GetEvents().Count());
            Assert.Same(traceEvent, filter.GetEvents().Single());
        }
            public void ErrorHandler([ErrorTrigger] TraceFilter traceFilter)
            {
                TraceFilter = traceFilter;

                foreach (TraceEvent error in traceFilter.GetEvents())
                {
                    Errors.Add(error);
                }

                if (_fail)
                {
                    throw new Exception("Kaboom!");
                }
            }