Beispiel #1
0
        public static D3SankeyDescription GetActualExecutionPlanD3Sankey(this ExecutionStatus executionStatus)
        {
            var nameToIdDictionary = executionStatus.JobDefinitionStructure.Nodes.Select((Structure, Idx) => new { Structure.Name, Idx }).ToDictionary(i => i.Name, i => i.Idx);

            return(new D3SankeyDescription
            {
                links = executionStatus.JobDefinitionStructure.StreamToNodeLinks.GroupJoin(
                    executionStatus.StreamStatisticCounters,
                    i => i.SourceNodeName,
                    i => i.SourceNodeName,
                    (link, stat) => new D3SankeyStatisticsLink
                {
                    source = nameToIdDictionary[link.SourceNodeName],
                    target = nameToIdDictionary[link.TargetNodeName],
                    value = stat.DefaultIfEmpty(new StreamStatisticCounter {
                        Counter = 0
                    }).Sum(i => i.Counter)
                }
                    ).ToList(),
                nodes = executionStatus.JobDefinitionStructure.Nodes.Select(i =>
                {
                    string color = "blue";
                    if (executionStatus.StreamStatisticErrors.Any(e => e.NodeName == i.Name))
                    {
                        color = "red";
                    }
                    return new D3SankeyStatisticsNode
                    {
                        id = nameToIdDictionary[i.Name],
                        name = i.Name,
                        color = color
                    };
                }).ToList()
            });
        }
Beispiel #2
0
        public static PlotlySankeyDescription GetActualExecutionPlanPlotlySankey(this ExecutionStatus executionStatus)
        {
            var nameToIdDictionary = executionStatus.JobDefinitionStructure.Nodes.Select((Structure, Idx) => new { Structure.Name, Idx }).ToDictionary(i => i.Name, i => i.Idx);
            var links = executionStatus.JobDefinitionStructure.StreamToNodeLinks.GroupJoin(
                executionStatus.StreamStatisticCounters,
                i => i.SourceNodeName,
                i => i.SourceNodeName,
                (link, stat) => new
            {
                source = nameToIdDictionary[link.SourceNodeName],
                target = nameToIdDictionary[link.TargetNodeName],
                value  = stat.DefaultIfEmpty(new StreamStatisticCounter {
                    Counter = 0
                }).Sum(i => i.Counter)
            }
                ).ToList();

            return(new PlotlySankeyDescription
            {
                NodeColors = executionStatus.JobDefinitionStructure.Nodes.OrderBy(i => nameToIdDictionary[i.Name]).Select(i =>
                {
                    if (executionStatus.StreamStatisticErrors.Any(e => e.NodeName == i.Name))
                    {
                        return "red";
                    }
                    return "blue";
                }).ToList(),
                NodeNames = executionStatus.JobDefinitionStructure.Nodes.OrderBy(i => nameToIdDictionary[i.Name]).Select(i => i.Name).ToList(),
                LinkSources = links.Select(i => i.source).ToList(),
                LinkTargets = links.Select(i => i.target).ToList(),
                LinkValues = links.Select(i => i.value).ToList()
            });
        }
Beispiel #3
0
        public static string GetActualExecutionPlanHtmlD3Sankey(this ExecutionStatus executionStatus)
        {
            var    json = executionStatus.GetActualExecutionPlanJsonD3Sankey();
            string file;

            var assembly = typeof(ExecutionStatusEx).Assembly;

            using (var stream = assembly.GetManifestResourceStream("Paillave.Etl.ExecutionPlan.ActualExecutionPlan.D3Sankey.html"))
                using (var reader = new StreamReader(stream))
                    file = reader.ReadToEnd();

            string html = file.Replace("'<<SANKEY_STATISTICS>>'", json);

            return(html);
        }
Beispiel #4
0
        //public static async Task<string> GetJsonActualExecutionPlanPlotlySankeyAsync<T>(this ExecutionContext<T> executionStatus)
        //{
        //    return JsonConvert.SerializeObject(await executionStatus.GetActualExecutionPlanPlotlySankeyAsync());
        //}
        public static string GetActualExecutionPlanHtmlPlotlySankey(this ExecutionStatus executionStatus)
        {
            var    stats = executionStatus.GetActualExecutionPlanPlotlySankey();
            string file;

            var assembly = typeof(ExecutionStatusEx).Assembly;

            using (var stream = assembly.GetManifestResourceStream("Paillave.Etl.ExecutionPlan.ActualExecutionPlan.PlotySankey.html"))
                using (var reader = new StreamReader(stream))
                    file = reader.ReadToEnd();

            string html = file.Replace("'<<NODE_NAMES>>'", JsonConvert.SerializeObject(stats.NodeNames));

            html = html.Replace("'<<NODE_COLORS>>'", JsonConvert.SerializeObject(stats.NodeColors));
            html = html.Replace("'<<LINK_SOURCES>>'", JsonConvert.SerializeObject(stats.LinkSources));
            html = html.Replace("'<<LINK_TARGETS>>'", JsonConvert.SerializeObject(stats.LinkTargets));
            html = html.Replace("'<<LINK_VALUES>>'", JsonConvert.SerializeObject(stats.LinkValues));
            return(html);
        }
Beispiel #5
0
        public static VisNetworkDescription GetActualExecutionPlan(this ExecutionStatus executionStatus)
        {
            var nameToIdDictionary = executionStatus.JobDefinitionStructure.Nodes.Select((Structure, Idx) => new { Structure.Name, Idx }).ToDictionary(i => i.Name, i => i.Idx);

            return(new VisNetworkDescription
            {
                edges = executionStatus.JobDefinitionStructure.StreamToNodeLinks.GroupJoin(
                    executionStatus.StreamStatisticCounters,
                    i => i.SourceNodeName,
                    i => i.SourceNodeName,
                    (link, stat) => new VisNetworkStatisticEdge
                {
                    from = nameToIdDictionary[link.SourceNodeName],
                    to = nameToIdDictionary[link.TargetNodeName],
                    value = stat.DefaultIfEmpty(new StreamStatisticCounter {
                        Counter = 0
                    }).Sum(i => i.Counter),
                    color = new VisNetworkStatisticColorEdge {
                        color = "#ccd5e2", inherit = false
                    }
                }
                    ).ToList(),
                nodes = executionStatus.JobDefinitionStructure.Nodes.GroupJoin(
                    executionStatus.StreamStatisticErrors,
                    i => i.Name,
                    i => i.NodeName,
                    (node, errors) =>
                {
                    var icon = GetNodeIcon(node);
                    bool onError = errors.Any();
                    return new VisNetworkStatisticNode
                    {
                        borderWidth = GetNodeBorderWidth(node, onError),
                        id = nameToIdDictionary[node.Name],
                        label = node.Name,
                        shape = icon != null ? "icon" : null,
                        icon = icon,
                        color = GetNodeColor(node, onError)
                    };
                }).ToList()
            });
        }
Beispiel #6
0
 public static void OpenActualExecutionPlanD3Sankey(this ExecutionStatus executionStatus)
 {
     Tools.OpenFile(executionStatus.GetActualExecutionPlanHtmlD3Sankey(), "html");
 }
Beispiel #7
0
 public static string GetActualExecutionPlanJsonD3Sankey(this ExecutionStatus executionStatus)
 {
     return(JsonConvert.SerializeObject(executionStatus.GetActualExecutionPlanD3Sankey()));
 }
Beispiel #8
0
 public static void OpenActualExecutionPlanVisNetwork(this ExecutionStatus executionStatus)
 {
     Tools.OpenFile(executionStatus.GetActualExecutionPlanHtmlVisNetwork(), "html");
 }
Beispiel #9
0
 public static string GetActualExecutionPlanJsonVisNetwork(this ExecutionStatus executionStatus)
 {
     return(JsonConvert.SerializeObject(executionStatus.GetActualExecutionPlan()).Replace(@"""\\u", @"""\u"));
 }