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)); }
/// <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); } }
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)); }
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!"); } }