diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs index fc9563576742c60235696c29ba7bf613dd66a71c..6158f89de9f3593bf640858810a54e65141982c7 100644 --- a/VectoConsole/Program.cs +++ b/VectoConsole/Program.cs @@ -41,6 +41,7 @@ using System.Xml.Linq; using NLog; using NLog.Config; using NLog.Targets; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -243,7 +244,6 @@ Examples: timings.Add("Reading input files", stopWatch.Elapsed.TotalMilliseconds); stopWatch.Reset(); - WriteLine(@"Starting simulation runs", ConsoleColor.White); if (_debugEnabled) { WriteLine(@"Debug-Output is enabled, executing simulation runs sequentially", ConsoleColor.Yellow); @@ -269,7 +269,7 @@ Examples: stopWatch.Stop(); timings.Add("Simulation runs", stopWatch.Elapsed.TotalMilliseconds); - PrintProgress(_jobContainer.GetProgress(), args.Contains("-t")); + PrintProgress(_jobContainer.GetProgress(), args.Contains("-t"), force: true); if (args.Contains("-t")) { PrintTimings(timings); @@ -343,46 +343,53 @@ Examples: } private static void PrintProgress(Dictionary<int, JobContainer.ProgressEntry> progessData, - bool showTiming = true) + bool showTiming = true, bool force = false) { - if (_quiet) { - return; - } + try { + if (_quiet || (Console.IsOutputRedirected && !force)) { + return; + } - Console.SetCursorPosition(0, Console.CursorTop - _numLines); - _numLines = 0; - var sumProgress = 0.0; - foreach (var progressEntry in progessData) { - if (progressEntry.Value.Success) { - Console.ForegroundColor = ConsoleColor.Green; - } else if (progressEntry.Value.Error != null) { - Console.ForegroundColor = ConsoleColor.Red; + if (!Console.IsOutputRedirected) { + Console.SetCursorPosition(0, Console.CursorTop - _numLines); + } + + _numLines = 0; + var sumProgress = 0.0; + foreach (var progressEntry in progessData) { + if (progressEntry.Value.Success) { + Console.ForegroundColor = ConsoleColor.Green; + } else if (progressEntry.Value.Error != null) { + Console.ForegroundColor = ConsoleColor.Red; + } + var timingString = ""; + if (showTiming && progressEntry.Value.ExecTime > 0) { + timingString = string.Format("{0,9:F2}s", progressEntry.Value.ExecTime / 1000.0); + } + var runName = string.Format("{0} {1} {2}", progressEntry.Value.RunName, progressEntry.Value.CycleName, + progressEntry.Value.RunSuffix); + Console.WriteLine(@"{0,-60} {1,8:P}{2}", runName, progressEntry.Value.Progress, timingString); + Console.ResetColor(); + sumProgress += progressEntry.Value.Progress; + _numLines++; } - var timingString = ""; - if (showTiming && progressEntry.Value.ExecTime > 0) { - timingString = string.Format("{0,9:F2}s", progressEntry.Value.ExecTime / 1000.0); + sumProgress /= _numLines; + var spinner = "/-\\|"[ProgessCounter++ % 4]; + var bar = new string('#', (int)(sumProgress * 100.0 / 2)); + Console.WriteLine(@" {2} [{1,-50}] [{0,7:P}]", sumProgress, bar, spinner); + + if (WarningMessages.Any()) { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(@"Warnings: {0,5}", WarningMessages.Count); + Console.ResetColor(); + } else { + Console.WriteLine(""); } - var runName = string.Format("{0} {1} {2}", progressEntry.Value.RunName, progressEntry.Value.CycleName, - progressEntry.Value.RunSuffix); - Console.WriteLine(@"{0,-60} {1,8:P}{2}", runName, progressEntry.Value.Progress, timingString); - Console.ResetColor(); - sumProgress += progressEntry.Value.Progress; - _numLines++; - } - sumProgress /= _numLines; - var spinner = "/-\\|"[ProgessCounter++ % 4]; - var bar = new string('#', (int)(sumProgress * 100.0 / 2)); - Console.WriteLine(@" {2} [{1,-50}] [{0,7:P}]", sumProgress, bar, spinner); - if (WarningMessages.Any()) { - Console.ForegroundColor = ConsoleColor.Yellow; - Console.WriteLine(@"Warnings: {0,5}", WarningMessages.Count); - Console.ResetColor(); - } else { - Console.WriteLine(""); + _numLines += 2; + } catch (Exception e) { + throw new VectoException("Error during writing progress to output: " + e.Message); } - - _numLines += 2; } private static void PrintTimings(Dictionary<string, double> timings)