Пример #1
0
        static int Execute(int maxLogsPerGraph, bool writeGraphviz, List <string> excludeVariants)
        {
            if (!Helper.TryFindRoot(out var rootDir))
            {
                return(1);
            }

            if (maxLogsPerGraph == int.MaxValue)
            {
                Console.WriteLine($"The first {maxLogsPerGraph} restore logs will be used per request graph.");
            }
            else
            {
                Console.WriteLine($"No limit will be applied to the number of restore logs per request graph.");
            }

            var logDir       = Path.Combine(rootDir, "out", "logs");
            var graphs       = RestoreLogParser.ParseAndMergeGraphs(logDir, excludeVariants.ToHashSet(), maxLogsPerGraph);
            var writtenNames = new HashSet <string>();

            for (int index = 0; index < graphs.Count; index++)
            {
                var graph = graphs[index];

                string fileName = Helper.GetGraphFileName(RequestGraph.Type, graph.VariantName, graph.SolutionName);

                if (writtenNames.Contains(fileName))
                {
                    Console.WriteLine($" WARNING: The output file {fileName} has already been written.");
                    Console.WriteLine($" Consider including a variant name in the restore log file name to differentiate variants.");
                    Console.WriteLine($" Output data is grouped by variant name, solution name, and set of package sources.");
                }

                Console.WriteLine($"Preparing {fileName}...");
                GraphOperations.LazyTransitiveReduction(graph.Graph);

                var filePath = Path.Combine(rootDir, "out", "graphs", fileName);
                var outDir   = Path.GetDirectoryName(filePath);
                Directory.CreateDirectory(outDir);

                if (writeGraphviz)
                {
                    var gvPath = $"{filePath}.gv";
                    Console.WriteLine($"  Writing {gvPath}...");
                    RequestGraphSerializer.WriteToGraphvizFile(gvPath, graph.Graph);
                }

                var jsonGzPath = $"{filePath}.json.gz";
                Console.WriteLine($"  Writing {jsonGzPath}...");
                RequestGraphSerializer.WriteToFile(jsonGzPath, graph.Graph);

                writtenNames.Add(fileName);
            }

            return(0);
        }
        private static async Task <int> ExecuteAsync(Context ctx)
        {
            using (var writer = new BackgroundCsvWriter <RequestDurationRecord>(ctx.OutputPath, gzip: true))
            {
                foreach (var graph in RestoreLogParser.ParseGraphs(ctx.InputDir, ctx.ExcludeVariants, ctx.StringToString))
                {
                    await UpdateSources(ctx, graph.Graph.Sources);

                    WriteGraph(ctx, writer, graph);
                }

                foreach (var replayLogPath in Directory.EnumerateFiles(ctx.InputDir, $"{ReplayRequestGraph.ReplayLogPrefix}-*-*.csv"))
                {
                    WriteReplayLog(ctx, writer, replayLogPath);
                }
            }

            return(ctx.WarningsAsErrors && ctx.WarningCount > 0 ? 1 : 0);
        }