private void ProcessServicePackageInactiveEvent( EventRecord eventRecord, string taskName, string eventName, EtwEventTimestamp eventTimestamp, bool implicitlyInactive) { ApplicationDataReader reader = new ApplicationDataReader( eventRecord.UserData, eventRecord.UserDataLength); // Verify event version int eventVersion = reader.ReadInt32(); if (eventVersion > MaxServicePackageDeactivatedEventVersion) { Utility.TraceSource.WriteError( TraceType, "Unexpected version {0} encountered for event name {1}. Event will be ignored.", eventVersion, eventName); return; } // Get the node name string nodeName = reader.ReadUnicodeString(); // Get the application instance ID string appInstanceId = reader.ReadUnicodeString(); // Get the service package name string servicePackageName = reader.ReadUnicodeString(); Utility.TraceSource.WriteInfo( TraceType, "ETW event received. Task {0}, event {1}, node name: {2}, application instance ID: {3}, service package name: {4}.", taskName, eventName, nodeName, appInstanceId, servicePackageName); // Delete record from service package table this.RemoveServicePackageHandler(nodeName, appInstanceId, servicePackageName, eventTimestamp, true, implicitlyInactive); }
private Dictionary <string, string> ConvertEventToKvp(EventRecord eventRecord, EventDefinition eventDefinition) { var keyValueDictionary = new Dictionary <string, string>(); try { var dataReader = new ApplicationDataReader(eventRecord.UserData, eventRecord.UserDataLength); foreach (FieldDefinition fieldDef in eventDefinition.Fields) { string propertyValue = null; switch (fieldDef.Type) { case FieldDefinition.FieldType.UnicodeString: { propertyValue = dataReader.ReadUnicodeString(); break; } case FieldDefinition.FieldType.AnsiString: { propertyValue = dataReader.ReadAnsiString(); break; } case FieldDefinition.FieldType.Boolean: { propertyValue = dataReader.ReadBoolean().ToString(); break; } case FieldDefinition.FieldType.UInt8: { propertyValue = dataReader.ReadUInt8().ToString(); break; } case FieldDefinition.FieldType.UInt16: { propertyValue = dataReader.ReadUInt16().ToString(); break; } case FieldDefinition.FieldType.UInt32: { unchecked { propertyValue = dataReader.ReadUInt32().ToString(); } break; } case FieldDefinition.FieldType.UInt64: { unchecked { propertyValue = dataReader.ReadUInt64().ToString(); } break; } case FieldDefinition.FieldType.Int8: { propertyValue = dataReader.ReadInt8().ToString(); break; } case FieldDefinition.FieldType.Int16: { propertyValue = dataReader.ReadInt16().ToString(); break; } case FieldDefinition.FieldType.Int32: { propertyValue = dataReader.ReadInt32().ToString(); break; } case FieldDefinition.FieldType.Int64: { propertyValue = dataReader.ReadInt64().ToString(); break; } case FieldDefinition.FieldType.HexInt32: { unchecked { propertyValue = dataReader.ReadUInt32().ToString(); } break; } case FieldDefinition.FieldType.HexInt64: { unchecked { propertyValue = dataReader.ReadUInt64().ToString(); } break; } case FieldDefinition.FieldType.Float: { propertyValue = dataReader.ReadFloat().ToString(); break; } case FieldDefinition.FieldType.Double: { propertyValue = dataReader.ReadDouble().ToString(); break; } case FieldDefinition.FieldType.DateTime: { propertyValue = dataReader.ReadFileTime().ToString("yyyy-dd-M--HH-mm-ss"); break; } case FieldDefinition.FieldType.Guid: { propertyValue = dataReader.ReadGuid().ToString(); break; } default: { this.traceSource.WriteError( logSourceId, "Event of type {0}.{1} has an unsupported field of type {2}.", eventDefinition.TaskName, eventDefinition.EventName, fieldDef.Type); break; } } if (propertyValue != null) { keyValueDictionary[fieldDef.Name] = propertyValue; } } } catch (Exception e) { this.traceSource.WriteError( logSourceId, "Failed to get all the fields of event of type {0}.{1}. Exception info: {2}.", eventDefinition.TaskName, eventDefinition.EventName, e); return(null); } // our Platform event can't have a field names TimeStamp today. Still keeping this check till we add a unit test for that. if (!keyValueDictionary.ContainsKey(TimeStampFieldName)) { keyValueDictionary.Add(TimeStampFieldName, DateTime.FromFileTimeUtc(eventRecord.EventHeader.TimeStamp).ToString(TimeStampFormat)); } return(keyValueDictionary); }
private void ProcessServicePackageActiveEvent(EventRecord eventRecord, string taskName, string eventName, EtwEventTimestamp eventTimestamp, int maxVersion) { ApplicationDataReader reader = new ApplicationDataReader( eventRecord.UserData, eventRecord.UserDataLength); // Verify event version int eventVersion = reader.ReadInt32(); if (eventVersion > maxVersion) { Utility.TraceSource.WriteError( TraceType, "Unexpected version {0} encountered for event name {1}. Event will be ignored.", eventVersion, eventName); return; } // Get the node name string nodeName = reader.ReadUnicodeString(); // Get the root directory for the run layout string runLayoutRoot = reader.ReadUnicodeString(); // Get the application instance ID string appInstanceId = reader.ReadUnicodeString(); // Get the application rollout version string appRolloutVersion = reader.ReadUnicodeString(); // Get the service package name string servicePackageName = reader.ReadUnicodeString(); // Get the service package rollout version string serviceRolloutVersion = reader.ReadUnicodeString(); // Create a record for the application data table ServicePackageTableRecord record = new ServicePackageTableRecord( nodeName, appInstanceId, appRolloutVersion, servicePackageName, serviceRolloutVersion, runLayoutRoot, default(DateTime)); Utility.TraceSource.WriteInfo( TraceType, "ETW event received. Task {0}, event {1}, node name: {2}, application instance ID: {3}, application rollout version: {4}, service package name: {5}, service rollout version: {6}.", taskName, eventName, nodeName, record.ApplicationInstanceId, record.ApplicationRolloutVersion, record.ServicePackageName, record.ServiceRolloutVersion); // Add or update record in service package table this.AddOrUpdateServicePackageHandler( nodeName, appInstanceId, eventTimestamp.Timestamp, servicePackageName, record, eventTimestamp, true); }
// returns an object that would be either a string or a double, or null if failed private static object GetEtwEventRecordValue(ApplicationDataReader reader, FieldDefinition fieldDef, string logSourceId) { object value = null; switch (fieldDef.Type) { case FieldDefinition.FieldType.UnicodeString: value = reader.ReadUnicodeString(); break; case FieldDefinition.FieldType.AnsiString: value = reader.ReadAnsiString(); break; case FieldDefinition.FieldType.Boolean: value = reader.ReadBoolean() ? "true" : "false"; break; case FieldDefinition.FieldType.UInt8: value = (double)reader.ReadUInt8(); break; case FieldDefinition.FieldType.UInt16: value = (double)reader.ReadUInt16(); break; case FieldDefinition.FieldType.UInt32: value = (double)reader.ReadUInt32(); break; case FieldDefinition.FieldType.UInt64: value = (double)reader.ReadUInt64(); break; case FieldDefinition.FieldType.Int8: value = (double)reader.ReadInt8(); break; case FieldDefinition.FieldType.Int16: value = (double)reader.ReadInt16(); break; case FieldDefinition.FieldType.Int32: value = (double)reader.ReadInt32(); break; case FieldDefinition.FieldType.Int64: value = (double)reader.ReadInt64(); break; case FieldDefinition.FieldType.HexInt32: value = (double)reader.ReadUInt32(); break; case FieldDefinition.FieldType.HexInt64: value = (double)reader.ReadUInt64(); break; case FieldDefinition.FieldType.Float: value = (double)reader.ReadFloat(); break; case FieldDefinition.FieldType.Double: value = (double)reader.ReadDouble(); break; case FieldDefinition.FieldType.DateTime: value = reader.ReadFileTime().ToString(); break; case FieldDefinition.FieldType.Guid: value = reader.ReadGuid().ToString(); break; default: Utility.TraceSource.WriteError( logSourceId, "Unsupported field of type {0}.", fieldDef.Type); break; } return(value); }