Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        // 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);
        }