public void Traverse(IMLoggerScopeNode node) { var messageIndex = 0; var childIndex = 0; while (messageIndex < node.Messages.Count && childIndex < node.Children.Count) { if (node.Messages[messageIndex].Time < node.Children[childIndex].StartTime) { LogRow(node.Messages[messageIndex]); messageIndex++; } else { Traverse(node.Children[childIndex]); childIndex++; } } if (messageIndex < node.Messages.Count) { for (var i = messageIndex; i < node.Messages.Count; i++) { LogRow(node.Messages[i]); } } else { for (var i = childIndex; i < node.Children.Count; i++) { Traverse(node.Children[i]); } } }
public void Traverse(IMLoggerScopeNode node, int level, Dictionary <string, int> counts) { LogRow(new LogInfo() { Name = node.Name, Time = node.StartTime, Severity = LogLevel.Debug, Message = "Beginning " + node.State, }, level); var messageIndex = 0; var childIndex = 0; while (messageIndex < node.Messages.Count && childIndex < node.Children.Count) { if (node.Messages[messageIndex].Time < node.Children[childIndex].StartTime) { LogRow(node.Messages[messageIndex], level); counts[node.Messages[messageIndex].Severity.ToString()]++; messageIndex++; } else { Traverse(node.Children[childIndex], level + 1, counts); childIndex++; } } if (messageIndex < node.Messages.Count) { for (var i = messageIndex; i < node.Messages.Count; i++) { LogRow(node.Messages[i], level); counts[node.Messages[i].Severity.ToString()]++; } } else { for (var i = childIndex; i < node.Children.Count; i++) { Traverse(node.Children[i], level + 1, counts); } } // print end of scope LogRow(new LogInfo() { Name = node.Name, Time = node.EndTime, Severity = LogLevel.Debug, Message = string.Format("Completed {0} in {1}ms", node.State, node.EndTime - node.StartTime) }, level); }