/// <nodoc /> internal void RenderMarkdown(MarkDownWriter writer) { int cacheHitRate = 0; if (TotalProcessPips > 0) { cacheHitRate = (int)(100.0 * ProcessPipCacheHit / TotalProcessPips); } var caseRateMessage = $"Process pip cache hits: {cacheHitRate}% ({ProcessPipCacheHit}/{TotalProcessPips})"; if (Entries.Count == 0) { writer.WriteDetailedTableEntry("Cache rates", caseRateMessage); } else { writer.StartDetailedTableSummary( "Cache rates & Misses", caseRateMessage ); foreach (var entry in Entries) { writer.WritePreSection( entry.PipDescription + (entry.FromCacheLookup ? " (From Cachelookup)" : null), entry.Reason, 25); } writer.EndDetailedTableSummary(); } }
/// <nodoc /> internal void RenderMarkdown(MarkDownWriter writer) { writer.StartDetailedTableSummary( "Critical path", $"Pip Duration: {TotalCriticalPathRuntime.MakeFriendly()}, Exe Duration: {ExeDurationCriticalPath.MakeFriendly()}"); writer.StartTable( "Pip Duration", "Exe Duration", "Queue Duration", "Pip Result", "Scheduled Time", "Completed Time", "Pip"); writer.WriteTableRow( TotalCriticalPathRuntime.MakeFriendly(), ExeDurationCriticalPath.MakeFriendly(), TotalMasterQueueTime.MakeFriendly(), string.Empty, string.Empty, string.Empty, "*Total"); writer.WriteTableRow( "-", "-", "-", "-", "-", "-", "-"); foreach (var line in Lines) { writer.WriteTableRow( line.PipDuration.MakeFriendly(), line.ProcessExecuteTime.MakeFriendly(), line.PipQueueDuration.MakeFriendly(), line.Result, line.ScheduleTime.MakeFriendly(), line.Completed.MakeFriendly(), line.PipDescription ); } writer.EndTable(); writer.EndDetailedTableSummary(); }
/// <nodoc /> internal void RenderMarkdown(MarkDownWriter writer) { int cacheHitRate = 0; if (TotalProcessPips > 0) { cacheHitRate = (int)(100.0 * ProcessPipCacheHit / TotalProcessPips); } var caseRateMessage = $"Process pip cache hits: {cacheHitRate}% ({ProcessPipCacheHit}/{TotalProcessPips})"; if (Entries.Count == 0 && BatchEntries == null) { writer.WriteDetailedTableEntry("Cache rates", caseRateMessage); } else { writer.StartDetailedTableSummary( "Cache rates & Misses", caseRateMessage ); foreach (var entry in Entries) { writer.WritePreSection( entry.PipDescription + (entry.FromCacheLookup ? " (From Cachelookup)" : null), entry.Reason, 25); } for (var i = 0; i < BatchEntries.Count; i++) { if (writer.ExceedsTargetBytes) { writer.WritePreSection("Analysis Results Truncated", "Additional analysis results have been truncated to ensure browser responsiveness", 25); break; } writer.WritePreSection($"Batch #{i}", BatchEntries[i], 25); } writer.EndDetailedTableSummary(); } }
private void WriteKeyValuePair(MarkDownWriter writer, string key, string value, bool fixedFont) { writer.StartElement("tr"); writer.StartElement("td", "text-align:left;vertical-align: text-top;min-width:5em"); writer.WriteText(key); writer.EndElement("td"); writer.StartElement("td"); if (fixedFont) { writer.StartElement("span", "font-family:consolas;monospace"); } writer.WriteText(value); if (fixedFont) { writer.EndElement("span"); } writer.EndElement("td"); writer.EndElement("tr"); }
/// <nodoc /> internal void RenderMarkDown(MarkDownWriter writer) { writer.WriteRaw("### <span style=\"font - family:consolas; monospace\">"); writer.WriteText(PipDescription); writer.WriteRaw("</span> failed with exit code "); writer.WriteLineRaw(ExitCode.ToString(CultureInfo.InvariantCulture)); writer.StartDetails("Pip Details"); writer.StartTable(); WriteKeyValuePair(writer, "PipHash:", SemiStablePipId, true); WriteKeyValuePair(writer, "Pip:", PipDescription, true); WriteKeyValuePair(writer, "Spec:", SpecPath, true); WriteKeyValuePair(writer, "Tool:", ToolName, true); WriteKeyValuePair(writer, "Exit Code:", ExitCode.ToString(CultureInfo.InvariantCulture), true); writer.EndTable(); writer.EndDetails(); if (!string.IsNullOrEmpty(Output)) { writer.WritePre(Output); } }
/// <summary> /// This will render the markdown to the predetermined file. /// </summary> /// <remarks> /// Caller is responsible for exception handling /// </remarks> public string RenderMarkdown() { Directory.CreateDirectory(Path.GetDirectoryName(m_filePath)); using (var writer = new MarkDownWriter(m_filePath)) { writer.WriteHeader("Stats"); writer.StartTable(); if (DurationTree != null) { writer.StartDetailedTableSummary("Build Duration", DurationTree.Duration.MakeFriendly()); var builder = new StringBuilder(); DurationTree.Write(builder, 0, DurationTree.Duration); writer.WritePre(builder.ToString()); writer.EndDetailedTableSummary(); } CacheSummary.RenderMarkdown(writer); CriticalPathSummary.RenderMarkdown(writer); writer.EndTable(); if (PipErrors.Count > 0) { writer.WriteHeader("Pip Errors"); foreach (var error in PipErrors) { writer.WriteLineRaw(""); error.RenderMarkDown(writer); } } } return(m_filePath); }