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); }
public void EtwObservableTest() { var observable = EtwObservable.FromFiles(FileName); int count = observable.Count().Wait(); Assert.AreEqual(2041, count); }
static void Main() { IObservable <EtwNativeEvent> etl = EtwObservable.FromFiles(@"HTTP_Server.etl"); IDisposable d = etl.Count().Subscribe(Console.WriteLine); Console.ReadLine(); d.Dispose(); }
public IObservable <EtwNativeEvent> GetRawEventsForTimeWindow() { Playback scope = new Playback(); foreach (var item in this.files) { scope.AddEtlFiles(item); } return(EtwObservable.FromFiles(this.files.ToArray())); }
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); }
public void OfType() { var count = EtwObservable.FromFiles(this.EtlFileName) .OfType <EtwNativeEvent, Parse>( new EtwManifestTypeMap(), new EtwClassicTypeMap(), new EtwTypeMap()) .Count() .Wait(); Assert.AreEqual(291, count); }
public void EtwObservableTest() { var observable = EtwObservable.FromFiles(FileName); int count = 0; observable.ForEach( x => { count++; }); Assert.AreEqual(2041, count); }
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); } }
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); }
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); }
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(); } }
public TraceReader(string fileName) { this.eventStream = EtwObservable.FromFiles(fileName); }
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); }