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();
        }
Пример #2
0
        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()
            });
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
        }
Пример #5
0
        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");
        }