Пример #1
0
        public void EtwFileSourceTest()
        {
            var observable = EtwObservable.FromFiles(FileName);
            var source     = new TimeSource <EtwNativeEvent>(observable, e => e.TimeStamp);

            var parsed = from p in source
                         where p.Id == 2
                         select p.TimeStamp;

            var buf = parsed.Take(13).Buffer(TimeSpan.FromSeconds(1), source.Scheduler);

            var list = new List <IList <DateTimeOffset> >();
            ManualResetEvent completed = new ManualResetEvent(false);

            buf.Subscribe(
                t => list.Add(t),
                () => completed.Set());

            source.Connect();
            completed.WaitOne();

            Assert.AreEqual(2, list.Count());
            Assert.AreEqual(7, list.First().Count);
            Assert.AreEqual(6, list.Skip(1).First().Count);
        }
Пример #2
0
        public void EtwObservableTest()
        {
            var observable = EtwObservable.FromFiles(FileName);

            int count = observable.Count().Wait();

            Assert.AreEqual(2041, count);
        }
Пример #3
0
        static void Main()
        {
            IObservable <EtwNativeEvent> etl = EtwObservable.FromFiles(@"HTTP_Server.etl");
            IDisposable d = etl.Count().Subscribe(Console.WriteLine);

            Console.ReadLine();
            d.Dispose();
        }
Пример #4
0
        public IObservable <EtwNativeEvent> GetRawEventsForTimeWindow()
        {
            Playback scope = new Playback();

            foreach (var item in this.files)
            {
                scope.AddEtlFiles(item);
            }

            return(EtwObservable.FromFiles(this.files.ToArray()));
        }
Пример #5
0
        private static IObservable <EtwNativeEvent> CreateEtwObservable(
            bool useSequentialReader,
            DateTime?startTime,
            DateTime?endTime,
            params string[] files)
        {
            if (startTime.HasValue != endTime.HasValue)
            {
                throw new ArgumentException("Specify both start and end times or leave both of them null.");
            }

            if (startTime.HasValue && startTime.Value >= endTime.Value)
            {
                throw new ArgumentException("Start time should be less than end time.");
            }

            if (files == null)
            {
                throw new ArgumentNullException(nameof(files));
            }

            if (files.Length == 0)
            {
                throw new ArgumentException("The Files parameter should contain at least one element.");
            }

            IObservable <EtwNativeEvent> etwObservable;

            if (useSequentialReader)
            {
                if (startTime.HasValue)
                {
                    etwObservable = EtwObservable.FromSequentialFiles(startTime.Value, endTime.Value, files);
                }
                else
                {
                    etwObservable = EtwObservable.FromSequentialFiles(files);
                }
            }
            else
            {
                if (startTime.HasValue)
                {
                    etwObservable = EtwObservable.FromFiles(startTime.Value, endTime.Value, files);
                }
                else
                {
                    etwObservable = EtwObservable.FromFiles(files);
                }
            }

            return(etwObservable);
        }
Пример #6
0
        public void OfType()
        {
            var count = EtwObservable.FromFiles(this.EtlFileName)
                        .OfType <EtwNativeEvent, Parse>(
                new EtwManifestTypeMap(),
                new EtwClassicTypeMap(),
                new EtwTypeMap())
                        .Count()
                        .Wait();

            Assert.AreEqual(291, count);
        }
Пример #7
0
        public void EtwObservableTest()
        {
            var observable = EtwObservable.FromFiles(FileName);

            int count = 0;

            observable.ForEach(
                x =>
            {
                count++;
            });

            Assert.AreEqual(2041, count);
        }
Пример #8
0
        public void EtwObservableFirst()
        {
            var observable = EtwObservable.FromFiles(FileName);

            string failureMessage = null;

            observable
            .Take(1)
            .Do(
                nativeEvent =>
            {
                try
                {
                    Assert.AreEqual(new Guid("00000100-0000-0003-193d-42fb30bbcb01"), nativeEvent.ActivityId);
                    Assert.AreEqual(16, nativeEvent.Channel);
                    Assert.AreEqual(0, nativeEvent.EventProperty);
                    Assert.IsNotNull(nativeEvent.ExtendedData);
                    Assert.AreEqual(0, nativeEvent.ExtendedDataCount);
                    Assert.AreEqual(576, nativeEvent.Flags);
                    Assert.AreEqual(0, nativeEvent.HeaderType);
                    Assert.AreEqual(21, nativeEvent.Id);
                    Assert.AreEqual(9223372036854775824L, nativeEvent.Keyword);
                    Assert.AreEqual(4, nativeEvent.Level);
                    Assert.AreEqual(28, nativeEvent.Opcode);
                    Assert.AreEqual((uint)0, nativeEvent.ProcessId);
                    Assert.AreEqual((uint)677443, nativeEvent.ProcessorTime);
                    Assert.AreEqual((ushort)152, nativeEvent.Size);
                    Assert.AreEqual((ushort)4, nativeEvent.Task);
                    Assert.AreEqual(new Guid("dd5ef90a-6398-47a4-ad34-4dcecdef795f"), nativeEvent.ProviderId);
                    Assert.AreEqual((uint)0, nativeEvent.ThreadId);
                    Assert.AreEqual(DateTimeOffset.FromFileTime(129402940472257591L), nativeEvent.TimeStamp);
                    Assert.AreEqual(129402940472257591L, nativeEvent.TimeStampRaw);
                    Assert.IsNotNull(nativeEvent.UserContext);
                    Assert.IsNotNull(nativeEvent.UserData);
                    Assert.AreEqual((ushort)72, nativeEvent.UserDataLength);
                    Assert.AreEqual(0, nativeEvent.Version);
                }
                catch (AssertFailedException assertError)
                {
                    failureMessage = assertError.Message;
                }
            })
            .Wait();

            if (failureMessage != null)
            {
                Assert.Fail(failureMessage);
            }
        }
Пример #9
0
        public void EtwParser()
        {
            var parser = EtwObservable.FromFiles(FileName);

            int count = 0;
            ManualResetEvent completed = new ManualResetEvent(false);

            parser.Count().Subscribe(
                x => count = x,
                () => completed.Set());

            completed.WaitOne();

            Assert.AreEqual(2041, count);
        }
Пример #10
0
        public TimeSpan  RunTestcase(MethodInfo method)
        {
            var observable = EtwObservable.FromFiles(_files);

            // the testcase should set the callback
            method.Invoke(this, new object[] {});

            Stopwatch stopwatch = Stopwatch.StartNew();

            observable.Subscribe(EtwCallback, OnCompleted);
            _completed.WaitOne();
            stopwatch.Stop();

            return(stopwatch.Elapsed);
        }
Пример #11
0
        static void Main()
        {
            IObservable <EtwNativeEvent> etl = EtwObservable.FromFiles(@"HTTP_Server.etl");

            var timeSource = new TimeSource <EtwNativeEvent>(etl, e => e.TimeStamp);

            var countPerWindow = from window in timeSource.Window(TimeSpan.FromSeconds(5), timeSource.Scheduler)
                                 from Count in window.Count()
                                 select Count;

            var withTime = countPerWindow.Timestamp(timeSource.Scheduler);

            using (withTime.Subscribe(ts => Console.WriteLine("{0} {1}", ts.Timestamp, ts.Value)))
            {
                timeSource.Connect();

                Console.ReadLine();
            }
        }
Пример #12
0
 public TraceReader(string fileName)
 {
     this.eventStream = EtwObservable.FromFiles(fileName);
 }
Пример #13
0
        public bool TxEtl(FileObject fileObject, string outputFile)
        {
            // this forces blg output timestamps to use local capture timezone which is utc for azure
            // Tx module is not able to determine with PDH api blg source timezone
            // todo: verify if needed for etl...
            //TimeUtil.DateTimeKind = DateTimeKind.Unspecified;

            DateTime startTime = DateTime.Now;
            IObservable <EtwNativeEvent>   observable   = default(IObservable <EtwNativeEvent>);
            TraceObserver <EtwNativeEvent> traceSession = default(TraceObserver <EtwNativeEvent>);
            //List<EtwNativeEvent> records = new List<EtwNativeEvent>();
            List <DtrTraceRecord> csvRecords = new List <DtrTraceRecord>();

            // todo: verify if needed for etl...testing pdh found invalid data when using concurrently
            // lock (_lockObj)
            // {
            Log.Debug($"observable creating: {fileObject.FileUri}");
            observable = EtwObservable.FromFiles(fileObject.FileUri);

            Log.Debug($"observable created: {fileObject.FileUri}");
            traceSession = ReadTraceRecords(observable);
            Log.Debug($"finished total ms: {DateTime.Now.Subtract(startTime).TotalMilliseconds} reading: {fileObject.FileUri}");
            //    records = traceSession.Records;
            // }

            //foreach (EtwNativeEvent record in records)
            foreach (EtwNativeEvent record in traceSession.Records)
            {
                //Log.Info("record", record);
                //if (!string.IsNullOrEmpty(record.Value.ToString()))
                //{
                //    string counterValue = record.Value.ToString() == "NaN" ? "0" : record.Value.ToString();

                //    try
                //    {
                //        csvRecords.Add(new CsvCounterRecord()
                //        {
                //            Timestamp = record.Timestamp,
                //            CounterName = record.CounterPath.Replace("\"", "").Trim(),
                //            CounterValue = Decimal.Parse(counterValue, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint),
                //            Object = record.CounterSet?.Replace("\"", "").Trim(),
                //            Counter = record.CounterName.Replace("\"", "").Trim(),
                //            Instance = record.Instance?.Replace("\"", "").Trim(),
                //            NodeName = fileObject.NodeName,
                //            FileType = fileObject.FileDataType.ToString(),
                //            RelativeUri = fileObject.RelativeUri
                //        });
                //    }
                //    catch (Exception ex)
                //    {
                //        Log.Exception($"stringValue:{counterValue} exception:{ex}", record);
                //    }
                //}
                //else
                //{
                //    Log.Warning($"empty counter value:", record);
                //}
            }

            fileObject.Stream.Write(csvRecords);
            Log.Info($"records: {traceSession.Records.Count()} {csvRecords.Count}");
            traceSession.Dispose();
            return(true);
        }