Ejemplo n.º 1
0
 public static extern LttngReaderStatusCode read_next_event(ref LTTngTraceHandle trace_handle, ref EventRecord evDesc, StringBuilder unstructured_event_text, [MarshalAs(UnmanagedType.LPStr)] StringBuilder taskname_eventname, ref ulong timestamp_unix_epoch_nano_s, ref bool is_unstructured);
Ejemplo n.º 2
0
 public EventRecordEventArgs(EventRecord record)
 {
     this.Record = record;
 }
Ejemplo n.º 3
0
 public static extern int TdhGetEventInformation(
     ref EventRecord Event,
     uint TdhContextCount,
     IntPtr TdhContext,
     [Out] IntPtr eventInfoPtr,
     ref int BufferSize);
Ejemplo n.º 4
0
 internal string FormatEvent(EventRecord eventRecord, ValueMaps valueMaps, out string eventType, out string eventText, int formatVersion)
 {
     return(this.description.FormatEvent(this.stack, eventRecord, valueMaps, out eventType, out eventText, formatVersion));
 }
Ejemplo n.º 5
0
 private uint EventRecordCallback([In] ref EventRecord eventRecord)
 {
     this.EventRead(this, new EventRecordEventArgs(eventRecord));
     return(uint.MaxValue);
 }
Ejemplo n.º 6
0
 public static bool IsStringEvent(EventRecord eventRecord)
 {
     return((eventRecord.EventHeader.Flags & ManifestCache.EventHeaderFlagStringOnly) == ManifestCache.EventHeaderFlagStringOnly);
 }
Ejemplo n.º 7
0
        private LttngReaderStatusCode ProcessTrace(DateTime startTime, DateTime endTime, ref LTTngTraceHandle traceHandle, out ulong eventReadFailureCount)
        {
            EventRecord eventRecord       = new EventRecord();
            ulong       lastReadTimestamp = 0;

            // needed for processing unstructured events in Linux
            bool          isUnstructured     = false;
            StringBuilder unstructuredRecord = new StringBuilder(LttngReaderBindings.MAX_LTTNG_UNSTRUCTURED_EVENT_LEN + 1);
            StringBuilder taskNameEventName  = new StringBuilder(LttngReaderBindings.MAX_LTTNG_TASK_EVENT_NAME_LEN + 1);

            ulong startTimeEpochNanoS = LttngTraceFolderEventReader.ConvertToUnixEpoch(startTime);
            ulong endTimeEpochNanoS   = LttngTraceFolderEventReader.ConvertToUnixEpoch(endTime);

            // set start and end time for reading traces
            LttngReaderStatusCode res = LttngReaderBindings.set_start_end_time(ref traceHandle, startTimeEpochNanoS, endTimeEpochNanoS);

            eventReadFailureCount = 0;

            if (res != LttngReaderStatusCode.SUCCESS)
            {
                return(res);
            }

            res = LttngReaderBindings.read_next_event(ref traceHandle, ref eventRecord, unstructuredRecord, taskNameEventName, ref lastReadTimestamp, ref isUnstructured);

            while (res == LttngReaderStatusCode.SUCCESS || res == LttngReaderStatusCode.FAILED_TO_READ_EVENT)
            {
                if (res == LttngReaderStatusCode.FAILED_TO_READ_EVENT)
                {
                    eventReadFailureCount++;
                    continue;
                }

                EventRecordEventArgs eventRecordEventArgs;
                this.lastEventReadTimestamp = lastReadTimestamp;

                if (isUnstructured)
                {
                    try
                    {
                        eventRecord.EventHeader.TimeStamp = LttngTraceFolderEventReader.ConvertFromUnixEpoch(lastReadTimestamp).ToFileTimeUtc();
                    }
                    catch (Exception)
                    {
                        // Flagging error with minimum timestamp so we can continue processing other events.
                        eventRecord.EventHeader.TimeStamp = 0;
                    }

                    eventRecordEventArgs = new EventRecordEventArgs(eventRecord);

                    eventRecordEventArgs.IsUnstructured     = isUnstructured;
                    eventRecordEventArgs.TaskNameEventName  = taskNameEventName.ToString();
                    eventRecordEventArgs.UnstructuredRecord = unstructuredRecord.ToString();
                }
                else
                {
                    eventRecordEventArgs = new EventRecordEventArgs(eventRecord);
                }

                this.EventRead(this, eventRecordEventArgs);

                if (eventRecordEventArgs.Cancel)
                {
                    return(LttngReaderStatusCode.SUCCESS);
                }

                res = LttngReaderBindings.read_next_event(ref traceHandle, ref eventRecord, unstructuredRecord, taskNameEventName, ref lastReadTimestamp, ref isUnstructured);
            }

            return(res);
        }
Ejemplo n.º 8
0
        internal static string FormatEvent(FormatVersion formatVersion, IFormatProvider provider, EventRecord eventRecord, string eventSourceName, string eventLevel, string eventTaskName, string opcodeName, string keywordsName, string type, string text)
        {
            switch (formatVersion)
            {
            case FormatVersion.TaskBasedFormatting:
            {
                return(string.Format(
                           provider,
                           "{0},{1},{2},{3},{4}.{5},{6}",
                           EventFormatter.FormatTimeStamp(provider, eventRecord.EventHeader.TimeStamp),
                           eventLevel,
                           eventRecord.EventHeader.ThreadId,
                           eventRecord.EventHeader.ProcessId,
                           eventTaskName,
                           type,
                           text));
            }

            case FormatVersion.EventSourceBasedFormatting:
            {
                return(string.Format(
                           provider,
                           "{0},{1},{2},{3},{4}.{5},{6}",
                           EventFormatter.FormatTimeStamp(provider, eventRecord.EventHeader.TimeStamp),
                           eventLevel,
                           eventRecord.EventHeader.ThreadId,
                           eventRecord.EventHeader.ProcessId,
                           eventSourceName,
                           type,
                           text));
            }

            default:
            {
                return(string.Format(
                           provider,
                           "{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}",
                           EventFormatter.FormatTimeStamp(provider, eventRecord.EventHeader.TimeStamp),
                           eventRecord.EventHeader.ThreadId,
                           eventRecord.EventHeader.ProcessId,
                           eventRecord.EventHeader.EventDescriptor.Id,
                           eventRecord.EventHeader.ActivityId,
                           GetRelatedActivityId(eventRecord),
                           eventLevel,
                           String.IsNullOrEmpty(eventTaskName) ?
                           eventRecord.EventHeader.EventDescriptor.Task.ToString(provider) :
                           eventTaskName,
                           String.IsNullOrEmpty(opcodeName) ?
                           eventRecord.EventHeader.EventDescriptor.Opcode.ToString(provider) :
                           opcodeName,
                           String.IsNullOrEmpty(keywordsName) ?
                           eventRecord.EventHeader.EventDescriptor.Keyword.ToString("X", provider) :
                           keywordsName,
                           type,
                           text));
            }
            }
        }
        internal string FormatEvent(EventStack stack, EventRecord eventRecord, ValueMaps valueMaps, out string eventType, out string eventText, int formatVersion)
        {
            try
            {
                // This inefficient code is only a placeholder
                // once we make it work on all primitive types this will be
                // pre-compiled Linq Expression EventRecord->String
                ApplicationDataReader reader = new ApplicationDataReader(eventRecord.UserData, eventRecord.UserDataLength);

                eventType = this.eventName;
                string type = this.originalEventName;
                string id   = string.Empty;

                string[] values = new string[fields.Count];
                for (int i = 0; i < this.fields.Count; i++)
                {
                    FieldDefinition fieldDef = this.fields[i];
                    values[i] = fieldDef.FormatField(CultureInfo.InvariantCulture, reader, valueMaps);
                }

                if (this.isParentEvent)
                {
                    for (int i = this.fields.Count - 1; i >= 0; i--)
                    {
                        if (this.fields[i].IsContextField)
                        {
                            values[i] = stack.Pop(eventRecord.EventHeader.ProcessId, eventRecord.EventHeader.ThreadId, values[i], this.firstContextFieldIndex == i);
                            if (values[i] == null)
                            {
                                values[i] = " !!!Context Data Not Found!!! ";
                            }
                        }
                    }
                }

                if (this.typeFieldIndex != -1)
                {
                    type = eventType = values[typeFieldIndex];
                }

                eventText = FormatWithFieldValues(values, out id);

                if (id.Length > 0)
                {
                    type += "@" + id;
                }

                if (this.isChildEvent)
                {
                    stack.Push(eventRecord.EventHeader.ProcessId, eventRecord.EventHeader.ThreadId, values[0], eventText);
                    return(null);
                }

                return(EventFormatter.FormatEvent(
                           string.IsNullOrEmpty(this.eventSourceName) ? (EventFormatter.FormatVersion)formatVersion : EventFormatter.FormatVersion.EventSourceBasedFormatting,
                           CultureInfo.InvariantCulture,
                           eventRecord,
                           this.eventSourceName,
                           this.level,
                           this.taskName,
                           this.opcodeName,
                           this.keywordsName,
                           type,
                           eventText));
            }
            catch (Exception e)
            {
                throw new InvalidDataException(
                          string.Format(CultureInfo.InvariantCulture, "Unable to parse event {0}.{1} id {2} eventsource {3}", this.TaskName, this.EventName, this.id, this.eventSourceName),
                          e);
            }
        }