private void OnEventRead(object sender, EventRecordEventArgs e)
        {
            if (!this.canceled)
            {
                this.rwLock.EnterReadLock();
                RealTimeEventReader.hasProcessEventLock = true;
                try
                {
                    if (this.traceSession != null)
                    {
                        this.EventsLost = this.traceSession.EventsLost;

                        // Guaranteed non-null due to check in Start()
                        this.EventRead(this, e);
                    }
                }
                finally
                {
                    RealTimeEventReader.hasProcessEventLock = false;
                    this.rwLock.ExitReadLock();
                }

                this.StopIfCanceled(e.Cancel);
            }
        }
Beispiel #2
0
        private void OnEventRead(object sender, EventRecordEventArgs e)
        {
            string s = this.cache.FormatEvent(e.Record);

            if (s != null)
            {
                s = s.Replace("\n", "\t");
                this.traceDispatcher(s);
            }
        }
Beispiel #3
0
        private uint EventRecordCallback([In] ref EventRecord eventRecord)
        {
            uint returnValue = uint.MaxValue;

            if (eventRecord.EventHeader.ProviderId != EventTraceSystem)
            {
                var e = new EventRecordEventArgs(eventRecord);

                // Guaranteed non-null due to check in ReadEvents()
                this.EventRead(this, e);

                if (e.Cancel)
                {
                    // Return 'FALSE' to cancel
                    returnValue = 0;
                }
            }

            return(returnValue);
        }
Beispiel #4
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);
        }