public async Task registers_html_formatter_for_MermaidMarkdown() { using CompositeKernel kernel = new CompositeKernel { new CSharpKernel().UseNugetDirective(), }; var extension = new MermaidKernelExtension(); await extension.OnLoadAsync(kernel); var markdown = @"graph TD A[Client] --> B[Load Balancer] B --> C[Server1] B --> D[Server2]"; var formatted = new MermaidMarkdown(markdown).ToDisplayString(HtmlFormatter.MimeType); var doc = new HtmlDocument(); doc.LoadHtml(formatted.FixedGuid()); var scriptNode = doc.DocumentNode.SelectSingleNode("//div/script"); var renderTarget = doc.DocumentNode.SelectSingleNode("//div[@id='00000000000000000000000000000000']"); using var _ = new AssertionScope(); scriptNode.Should().NotBeNull(); scriptNode.InnerText.Should() .Contain(markdown); scriptNode.InnerText.Should() .Contain("configureRequireFromExtension('Mermaid','1.0.0')(['Mermaid/mermaidapi'], (mermaid) => {"); renderTarget.Should().NotBeNull(); }
public Result Post([FromQuery] string callId, [FromBody] RowEvent[] rowEvents) { // var rowEvents = JsonConvert.DeserializeObject<List<RowEvent>>(rawData); MermaidMarkdown mermaidMarkdown = new MermaidMarkdown(); if (rowEvents.Any() == false) { Console.WriteLine("No event found"); return(null); } Console.WriteLine($"Found event{rowEvents.Count()}"); RowEventExport eventExport = new RowEventExport(); eventExport.SaveEventToFile(rowEvents, callId); var events = (new EventConvertor()).Convert(rowEvents); var orderManger = new OrderManger(); var serverAndClientEvents = orderManger.EnrichDataClientOrServerEvent(events); if (serverAndClientEvents.Any() == false) { if (rowEvents.Any() == false) { Console.WriteLine("No flow found"); return(null); } else { return(new Result { Events = events.ToList() , MermaidMarkdown = mermaidMarkdown.Draw(events.Where(e => e is RequestEventModel)), RequestTags = GetReqestTags(rowEvents).ToList() }); } } var orderClientAndServerOnly = orderManger.OrderClientAndServer(serverAndClientEvents); var orderEvents = orderManger.AddRequest(events.SingleOrDefault(e => e is RequestEventModel), orderClientAndServerOnly); var mermaidMarkdownResult = mermaidMarkdown.Draw(orderEvents); return(new Result { Events = events.ToList(), MermaidMarkdown = mermaidMarkdownResult , OrdererFlow = orderEvents.ToList() , RequestTags = GetReqestTags(rowEvents)?.ToList() }); }
public void test() { // string callID = args[0];// "0dd6e243c6854b3bbb1fe2988658cdae"; //"0dd6e243c6854b3bbb1fe2988658cdae"; string callID = "0dd6e243c6854b3bbb1fe2988658cdae"; //"0dd6e243c6854b3bbb1fe2988658cdae"; var rowEvents = JsonConvert.DeserializeObject <List <RowEvent> >( File.ReadAllText($@"C:\Users\I347253\Desktop\Ghrap\{callID}.json")); var convertEvent = (new EventConvertor()).Convert(rowEvents); var orderManger = new OrderManger(); var serverAndClientEvents = orderManger.EnrichDataClientOrServerEvent(convertEvent.ToArray()); var events = orderManger.OrderClientAndServer(serverAndClientEvents); var events1 = orderManger .AddRequest(convertEvent.SingleOrDefault(X => X.Type == "request"), events.ToArray()).ToList(); MermaidMarkdown mermaidMarkdown = new MermaidMarkdown(); var result = mermaidMarkdown.Draw(events1.ToArray()); }
private static IHtmlContent GenerateHtml(MermaidMarkdown markdown, Uri libraryUri, string libraryVersion, string cacheBuster) { var requireUri = new Uri("https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"); var divId = Guid.NewGuid().ToString("N"); var code = new StringBuilder(); var functionName = $"loadMermaid_{divId}"; code.AppendLine("<div style=\"background-color:white;\">"); code.AppendLine(@"<script type=""text/javascript"">"); code.AppendJsCode(divId, functionName, libraryUri, libraryVersion, cacheBuster, markdown.ToString()); code.AppendLine(JavascriptUtilities.GetCodeForEnsureRequireJs(requireUri, functionName)); code.AppendLine("</script>"); code.AppendLine($"<div id=\"{divId}\"></div>"); code.AppendLine("</div>"); var html = new HtmlString(code.ToString()); return(html); }
public static async Task Main(string[] args) { if (args.Length == 0 || args.Length > 2) { Console.WriteLine( "You mast pass callID as the first argument there is also option to filter actor like Hades,Sql"); Console.ReadLine(); return; } string filter = null; string callId = args[0]; if (args.Length == 2) { filter = args[1]; } ElasticsearchAdapter manger = new ElasticsearchAdapter(); IEnumerable <RowEvent> rowEvents = await manger.GetData(callId); if (rowEvents.Any() == false) { Console.WriteLine("No event found"); return; } Console.WriteLine($"Found event{rowEvents.Count()}"); RowEventExport eventExport = new RowEventExport(); eventExport.SaveEventToFile(rowEvents, callId); var events = (new EventConvertor()).Convert(rowEvents); var orderManger = new OrderManger(); var serverAndClientEvents = orderManger.EnrichDataClientOrServerEvent(events); if (serverAndClientEvents.Any() == false) { if (rowEvents.Any() == false) { Console.WriteLine("No flow found"); return; } } var orderClientAndServerOnly = orderManger.OrderClientAndServer(serverAndClientEvents); var orderEvents = orderManger.AddRequest(events.SingleOrDefault(e => e is RequestEventModel), orderClientAndServerOnly); MermaidMarkdown mermaidMarkdown = new MermaidMarkdown(); var result = mermaidMarkdown.Draw(orderEvents); if (filter != null) { if (filter.Contains(",")) { var filterBy = filter.Split(','); foreach (var f in filterBy) { result.RemoveAll(x => x.Contains(f)); } } else { result.RemoveAll(x => x.Contains(filter)); } } WebDraw.Draw(result, callId); var p = new Process { StartInfo = new ProcessStartInfo($@"{callId}.html") { UseShellExecute = true } }; p.Start(); Console.WriteLine("Done"); }