public async Task End2EndTestAsync() { using (var scope = TimingScope.Create()) { scope.SetProperty("Prop1", "Val1") .SetProperty("Prop2", "Val2"); await WithTimingAsync("First", () => Task.Delay(100)); await Task.WhenAll(Task.Run(OtherMethodAsync), Task.Run(OneMoreMethodAsync)); var properties = scope.GetProperties(); var logEntries = scope.GetLogEntries(); Assert.AreEqual(3, properties.Count); Assert.AreEqual("Val1", properties["Prop1"]); Assert.AreEqual("Val2", properties["Prop2"]); Assert.AreEqual("Val3", properties["Prop3"]); Assert.AreEqual(4, logEntries.Count); Assert.AreEqual(1, logEntries.Count(x => x.Name == "First")); Assert.AreEqual(1, logEntries.Count(x => x.Name == "Second")); Assert.AreEqual(2, logEntries.Count(x => x.Name == "Third")); var logMessage = scope.ToString(); Console.WriteLine(logMessage); } }
public static IList <CodeSnippet> GetCodeSnippets(IEnumerable <string> codeFiles) { var codeSnippets = new List <CodeSnippet>(); foreach (var file in codeFiles) { var reading = string.Format("Reading '{0}'", file); string contents; using (TimingScope.Start(reading)) { contents = File.ReadAllText(file); if (Regex.Matches(contents, @".*?\s*start\s*code\s*", RegexOptions.Compiled).Count == 0) { continue; } } var lines = contents.Split(new[] { "\r\n", "\n " }, StringSplitOptions.None); var message = string.Format("Processing '{0}'", file); using (TimingScope.Start(message)) { var innerList = GetCodeSnippetsUsingArray(lines, file); codeSnippets.AddRange(innerList); } } return(codeSnippets); }
/// <summary> /// Creates a scoped logger that can be used in a using block /// </summary> /// <param name="logger">Extendee</param> /// <param name="scopeName">name of the scope</param> /// <param name="memberName">member name</param> /// <returns>scoped logger</returns> public static ITimingScope TimingScope(this ILogger logger, string scopeName, [CallerMemberName] string memberName = "") { var scope = new TimingScope(logger, scopeName, memberName); scope.Enter(); return(scope); }
public static UpdateResult Update(string codeFolder, string[] extensionsToSearch, string docsFolder) { var stopwatch = new Stopwatch(); stopwatch.Start(); var result = new UpdateResult(); var codeParser = new CodeFileParser(codeFolder); ICollection <CodeSnippet> snippets; using (TimingScope.Start("CodeParser.Parse")) snippets = codeParser.Parse(extensionsToSearch); var incompleteSnippets = snippets.Where(s => string.IsNullOrWhiteSpace(s.Value)).ToArray(); if (incompleteSnippets.Any()) { var messages = ErrorFormatter.FormatIncomplete(incompleteSnippets); result.Errors.AddRange(messages); return(result); } result.Snippets = snippets.Count; var processor = new DocumentFileProcessor(docsFolder); var processResult = processor.Apply(snippets); var snippetsNotUsed = snippets.Except(processResult.SnippetsUsed).ToArray(); var snippetsMissed = processResult.SnippetReferences; if (snippetsMissed.Any()) { var messages = ErrorFormatter.FormatNotFound(snippetsMissed); result.Errors.AddRange(messages); } if (snippetsNotUsed.Any()) { var messages = ErrorFormatter.FormatUnused(snippetsNotUsed); result.Warnings.AddRange(messages); } result.Files = processResult.Count; result.Completed = !result.Errors.Any(); stopwatch.Stop(); result.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; return(result); }
private void DoSomeWork(string key) { using (var scope = TimingScope.Create()) { int n = 10000; Parallel.For(0, n, (i) => { WithTiming(key + "_" + i, () => { //some work }); }); var logEntries = scope.GetLogEntries().ToDictionary(x => x.Name); Assert.AreEqual(n, logEntries.Count); for (int i = 0; i < n; i++) { Assert.IsTrue(logEntries.ContainsKey(key + "_" + i)); } } }
private void RootMethod(Guid id, string anotherParam) { //Arrange using (var scope = TimingScope.Create()) { //Set some context properties. May be helpful for future logging scope.SetProperty("ObjectId", id.ToString()) .SetProperty("AnotherParam", anotherParam); var startTime = DateTimeOffset.Now; int n = 100; //Act Parallel.For(0, n, (i) => { InnerMethod(i); }); TimingScope.Current.Log("RootMethod", startTime, DateTimeOffset.Now); //Assert var logEntries = TimingScope.Current.GetLogEntries(); var properties = TimingScope.Current.GetProperties(); for (int i = 0; i < n; i++) { Assert.AreEqual(1, logEntries.Count(x => x.Name == $"InnerMethod({i})")); } Assert.AreEqual(1, logEntries.Count(x => x.Name == "RootMethod")); Assert.AreEqual(2, properties.Count); Assert.AreEqual(id.ToString(), properties["ObjectId"]); Assert.AreEqual(anotherParam, properties["AnotherParam"]); } }