Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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));
                }
            }
        }
Esempio n. 6
0
        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"]);
            }
        }