private bool IsInterestingTrace(TraceEvent data) { // vshub.exe internally uses ApplicationInsights if (data.PayloadNames.Length > 1 && data.PayloadString(1) == "vshub.exe") { return(false); } bool result = true; if (data.PayloadNames.Length > 0) { int id = (int)data.ID; // Not system event if ((id > 0) && (id < 65534)) { string domainName = data.PayloadString(data.PayloadNames.Length - 1); result = domainName.StartsWith("/LM/W3SVC") || domainName.StartsWith("ConsoleApp"); } } else { TraceAssert.IsTrue(false, "Trace must have at least 1 parameter - appDomain name"); this.FailureDetected = true; } return(result); }
public static string ToJson(this TraceEvent traceEvent) { var names = traceEvent.PayloadNames; var count = names.Length; using (var stringWriter = new StringWriter()) using (var jsonWriter = new TinyJsonWriter(stringWriter)) { jsonWriter.WriteStartObject(); for (var i = 0; i < count; i++) { var name = names[i]; var value = traceEvent.PayloadString(i); jsonWriter.WritePropertyName(name); jsonWriter.WriteValue(value); } jsonWriter.WriteEndObject(); stringWriter.Flush(); return(stringWriter.ToString()); } }
// Create 1 line that embodies the data in event 'data' private static string Parse(TraceEvent data) { StringBuilder sb = new StringBuilder(); sb.Append("EVENT "); sb.Append(data.TimeStampRelativeMSec.ToString("n3")).Append(": "); sb.Append(data.ProviderName).Append("/").Append(data.EventName).Append(" "); sb.Append("PID=").Append(data.ProcessID).Append("; "); sb.Append("TID=").Append(data.ThreadID).Append("; "); sb.Append("PName=").Append(data.ProcessName).Append("; "); sb.Append("ProceNum=").Append(data.ProcessorNumber).Append("; "); sb.Append("DataLen=").Append(data.EventDataLength).Append("; "); string[] payloadNames = data.PayloadNames; for (int i = 0; i < payloadNames.Length; i++) { // Keep the value size under control and remove newlines. string value = (data.PayloadString(i)); // To debug this set first chance exeption handing before calling PayloadString above. Assert.IsFalse(value.Contains("EXCEPTION_DURING_VALUE_LOOKUP"), "Exception during event Payload Processing"); if (value.Length > 20) { value = value.Substring(0, 20) + "..."; } value = value.Replace("\n", "\\n").Replace("\r", "\\r"); sb.Append(payloadNames[i]).Append('=').Append(value).Append("; "); } return(sb.ToString()); }
public static string DumpPayload(this TraceEvent traceEvent) { var names = traceEvent.PayloadNames; var stringBuilder = new StringBuilder(); stringBuilder.Append("{"); var count = names.Length; for (var i = 0; i < count; i++) { if (i != 0) { stringBuilder.Append(", "); } var name = names[i]; var value = traceEvent.PayloadString(i); stringBuilder.Append(name).Append(": ").Append(value); } stringBuilder.Append("}"); return(stringBuilder.ToString()); }
private void ServiceFabricTraceEvent(TraceEvent data) { var eventId = (ushort)data.ID; var eventIsRelevant = ( (data.Level <= TraceEventLevel.Error && data.Level >= TraceEventLevel.Critical) || ( ServiceFabricEtw.Operational.ClusterEventsFilter(eventId, data) || ServiceFabricEtw.Operational.NodeEventsFilter(eventId, data) )); if (!eventIsRelevant) { return; } var properties = data.PayloadNames .Select((name, index) => { if (data.PayloadValue(index) is DateTime dateTimeValue) { return(new KeyValuePair <string, string>(name, dateTimeValue.ToString("o"))); } return(new KeyValuePair <string, string>(name, data.PayloadString(index, Culture))); }) .ToDictionary(x => x.Key, x => x.Value); properties.Add("eventID", data.ID.ToString()); properties.Add("name", data.EventName); properties.Add("timeStamp", data.TimeStamp.ToString("o")); AppInsightsClient.TrackTrace(data.FormattedMessage, data.ToSeverityLevel(), properties); }
private IDictionary <string, string> GetPayload(TraceEvent data) { var payload = new Dictionary <string, string>(); foreach (var name in data.PayloadNames) { var index = data.PayloadIndex(name); payload.Add(name, data.PayloadString(index)); } return(payload); }
// Create 1 line that embodies the data in event 'data' internal static string Parse(TraceEvent data) { StringBuilder sb = new StringBuilder(); sb.Append("EVENT "); sb.Append(data.TimeStampRelativeMSec.ToString("n3")).Append(": "); sb.Append(data.ProviderName).Append("/").Append(data.EventName).Append(" "); sb.Append("PID=").Append(data.ProcessID).Append("; "); sb.Append("TID=").Append(data.ThreadID).Append("; "); sb.Append("PName=").Append(data.ProcessName).Append("; "); sb.Append("ProceNum=").Append(data.ProcessorNumber).Append("; "); sb.Append("DataLen=").Append(data.EventDataLength).Append("; "); string[] payloadNames = data.PayloadNames; for (int i = 0; i < payloadNames.Length; i++) { // Normalize DateTime to UTC so tests work in any timezone. object value = data.PayloadValue(i); string valueStr; if (value is DateTime) { valueStr = ((DateTime)value).ToUniversalTime().ToString("yy/MM/dd HH:mm:ss.ffffff"); } else { valueStr = (data.PayloadString(i)); } // To debug this set first chance exeption handing before calling PayloadString above. Assert.False(valueStr.Contains("EXCEPTION_DURING_VALUE_LOOKUP"), "Exception during event Payload Processing"); // Keep the value size under control and remove newlines. if (valueStr.Length > 20) { valueStr = valueStr.Substring(0, 20) + "..."; } valueStr = valueStr.Replace("\n", "\\n").Replace("\r", "\\r"); sb.Append(payloadNames[i]).Append('=').Append(valueStr).Append("; "); } if (data.ContainerID != null) { sb.Append("ContainerID=").Append(data.ContainerID).Append("; "); } return(sb.ToString()); }
private bool IsInterestingTrace(TraceEvent data) { // vshub.exe internally uses ApplicationInsights if (data.PayloadNames.Length > 1 && data.PayloadString(1) == "vshub.exe") { return(false); } bool result = false; if (data.PayloadNames.Length > 0) { int id = (int)data.ID; // Not system event if ((id > 0) && (id < 65534)) { string domainName = data.PayloadString(data.PayloadNames.Length - 1); result = domainName.StartsWith("/LM/W3SVC"); } } return(result); }
private void TestAppDomainNameIsTheLastPayloadParameter(TraceEvent data) { if (data.PayloadNames.Length > 0) { int id = (int)data.ID; // Not system event if ((id > 0) && (id < 65534)) { string domainName = data.PayloadString(data.PayloadNames.Length - 1); bool correctName = TraceAssert.IsTrue( domainName.StartsWith("/LM/W3SVC"), "Every message must have application name as the last parameter to enable StatusMonitor integration: " + domainName); this.FailureDetected = !correctName || this.FailureDetected; } } else { TraceAssert.IsTrue(false, "Trace must have at least 1 parameter - appDomain name"); this.FailureDetected = true; } }
internal ETWEventRecord(ETWEventSource source, TraceEvent data, Dictionary <string, int> columnOrder, int nonRestFields, double durationMSec) : base(nonRestFields) { m_source = source; m_name = data.ProviderName + "/" + data.EventName; m_processName = data.ProcessName; if (!m_processName.StartsWith("(")) { m_processName += " (" + data.ProcessID + ")"; } m_timeStampRelativeMSec = data.TimeStampRelativeMSec; m_idx = data.EventIndex; // Compute the data column var restString = new StringBuilder(); // Deal with the special HasStack, ThreadID and ActivityID, DataLength fields; var hasStack = data.CallStackIndex() != CallStackIndex.Invalid; if (hasStack) { AddField("HasStack", hasStack.ToString(), columnOrder, restString); } var asCSwitch = data as CSwitchTraceData; if (asCSwitch != null) { AddField("HasBlockingStack", (asCSwitch.BlockingStack() != CallStackIndex.Invalid).ToString(), columnOrder, restString); } AddField("ThreadID", data.ThreadID.ToString("n0"), columnOrder, restString); AddField("ProcessorNumber", data.ProcessorNumber.ToString(), columnOrder, restString); if (0 < durationMSec) { AddField("DURATION_MSEC", durationMSec.ToString("n3"), columnOrder, restString); } var payloadNames = data.PayloadNames; if (payloadNames.Length == 0 && data.EventDataLength != 0) { // WPP events look classic and use the EventID as their discriminator if (data.IsClassicProvider && data.ID != 0) { AddField("EventID", ((int)data.ID).ToString(), columnOrder, restString); } AddField("DataLength", data.EventDataLength.ToString(), columnOrder, restString); } try { for (int i = 0; i < payloadNames.Length; i++) { AddField(payloadNames[i], data.PayloadString(i), columnOrder, restString); } } catch (Exception e) { AddField("ErrorParsingFields", e.Message, columnOrder, restString); } var message = data.FormattedMessage; if (message != null) { AddField("FormattedMessage", message, columnOrder, restString); } if (source.m_needsComputers) { TraceThread thread = data.Thread(); if (thread != null) { TraceActivity activity = source.m_activityComputer.GetCurrentActivity(thread); if (activity != null) { string id = activity.ID; if (Math.Abs(activity.StartTimeRelativeMSec - m_timeStampRelativeMSec) < .0005) { id = "^" + id; // Indicates it is at the start of the task. } AddField("ActivityInfo", id, columnOrder, restString); } var startStopActivity = source.m_startStopActivityComputer.GetCurrentStartStopActivity(thread, data); if (startStopActivity != null) { string name = startStopActivity.Name; string parentName = "$"; if (startStopActivity.Creator != null) { parentName = startStopActivity.Creator.Name; } AddField("StartStopActivity", name + "/P=" + parentName, columnOrder, restString); } } } // We pass 0 as the process ID for creating the activityID because we want uniform syntax. if (data.ActivityID != Guid.Empty) { AddField("ActivityID", StartStopActivityComputer.ActivityPathString(data.ActivityID), columnOrder, restString); } Guid relatedActivityID = data.RelatedActivityID; if (relatedActivityID != Guid.Empty) { AddField("RelatedActivityID", StartStopActivityComputer.ActivityPathString(data.RelatedActivityID), columnOrder, restString); } if (data.ContainerID != null) { AddField("ContainerID", data.ContainerID, columnOrder, restString); } m_asText = restString.ToString(); }
private void LogMessage(TraceEvent data) { const int Message = 0; const int Context = Message + 1; const int Member = Context + 1; const int HttpRequest = Member + 1; const int HttpResponse = HttpRequest + 1; const int HttpClient = HttpResponse + 1; const int Socket = HttpClient + 1; const int SecureChannel = Socket + 1; var buffer = new StringBuilder(); var indexes = new int[SecureChannel + 1]; indexes[Message] = data.PayloadIndex("message"); indexes[Context] = data.PayloadIndex("thisOrContextObject"); indexes[Member] = data.PayloadIndex("memberName"); indexes[HttpRequest] = data.PayloadIndex("httpRequestHash"); indexes[HttpResponse] = data.PayloadIndex("httpResponseHash"); indexes[HttpClient] = data.PayloadIndex("httpClientHash"); indexes[Socket] = data.PayloadIndex("socketHash"); indexes[SecureChannel] = data.PayloadIndex("secureChannelHash"); if (indexes[Context] >= 0) { buffer.AppendFormat("[{0}", data.PayloadString(indexes[Context])); if (indexes[Member] >= 0) { buffer.AppendFormat("::{0}", data.PayloadString(indexes[Member])); } buffer.Append("] "); } else { if (indexes[HttpRequest] >= 0) { buffer.AppendFormat("[HttpRequest#{0}] ", data.PayloadValue(indexes[HttpRequest])); } if (indexes[HttpResponse] >= 0) { buffer.AppendFormat("[HttpResponse#{0}] ", data.PayloadValue(indexes[HttpResponse])); } if (indexes[HttpClient] >= 0) { buffer.AppendFormat("[HttpClient#{0}] ", data.PayloadValue(indexes[HttpClient])); } if (indexes[Socket] >= 0) { buffer.AppendFormat("[Socket#{0}] ", data.PayloadValue(indexes[Socket])); } if (indexes[SecureChannel] >= 0) { buffer.AppendFormat("[SecureChannel#{0}] ", data.PayloadValue(indexes[SecureChannel])); } } if (indexes[Message] >= 0) { buffer.AppendFormat("{0} ", data.PayloadString(indexes[Message])); } var braceOpened = false; for (var i = 0; i < data.PayloadNames.Length; i++) { if (Array.IndexOf(indexes, i) >= 0) { continue; // skip } if (!braceOpened) { buffer.Append("{"); braceOpened = true; } buffer.AppendFormat(" {0}:{1}", data.PayloadNames[i], data.PayloadValue(i)); } if (braceOpened) { buffer.Append(" }"); } traceOutput.Write(data.TimeStampRelativeMSec, data.ProcessID, data.ThreadID, data.EventName, buffer.ToString()); }
public QueuePacketWdatEntry(TraceEvent data) : base(data) { AddField("opcode", data.Opcode.ToString("d")); AddField("ctx", NormalizeBase(data.PayloadString(0))); AddField("ptype", data.PayloadString(1)); AddField("seq", NormalizeBase(data.PayloadString(2))); switch (data.Opcode) { case Microsoft.Diagnostics.Tracing.TraceEventOpcode.Start: int type = (int)data.PayloadValue(1); // not all events have these fields ? if (type == 100) { AddField("dmabufsize", NormalizeBase(data.PayloadString(3))); AddField("alloclistsize", NormalizeBase(data.PayloadString(4))); AddField("patchloclistsize", NormalizeBase(data.PayloadString(5))); AddField("present", data.PayloadString(6)); AddField("dmabuf", NormalizeBase(data.PayloadString(7))); AddField("packet", NormalizeBase(data.PayloadString(8))); AddField("afence", NormalizeBase(data.PayloadString(9))); } break; case Microsoft.Diagnostics.Tracing.TraceEventOpcode.Info: // No extra fields break; case Microsoft.Diagnostics.Tracing.TraceEventOpcode.Stop: AddField("preempted", data.PayloadString(3)); AddField("timedout", data.PayloadString(4)); AddField("packet", NormalizeBase(data.PayloadString(5))); break; } }
public VsyncWdatEntry(TraceEvent data) : base(data) { AddField("adapter", NormalizeBase(data.PayloadString(0))); AddField("display", NormalizeBase(data.PayloadString(1))); AddField("address", NormalizeBase(data.PayloadString(2))); }
public SteamVRWdatEntry(TraceEvent data) : base(data) { AddField("vrevent", data.PayloadString(0)); }