コード例 #1
0
        public bool WriteScriptErrors()
        {
            foreach (var error in this.InstallScript.Errors)
            {
                var message = $"[{error.Level.ToString().ToLowerInvariant()}] {error.Message} (at line #{error.LineNumber})";
                if (error.Level == ScriptErrorLevel.Warning)
                {
                    RompConsoleMessenger.WriteDirect(message, ConsoleColor.Yellow);
                }
                else
                {
                    RompConsoleMessenger.WriteDirect(message, ConsoleColor.Red);
                }
            }

            return(this.InstallScript.Errors.Any(e => e.Level == ScriptErrorLevel.Error));
        }
コード例 #2
0
        public void WriteText(int level, TextWriter writer)
        {
            var text = new string(' ', level) + this.ToString();

            if (writer == Console.Out)
            {
                RompConsoleMessenger.WriteDirect(
                    text,
                    this.Level == MessageLevel.Warning ? (ConsoleColor?)ConsoleColor.Yellow :
                    this.Level == MessageLevel.Error ? (ConsoleColor?)ConsoleColor.Red :
                    null
                    );
            }
            else
            {
                writer.WriteLine(text);
            }
        }
コード例 #3
0
 public void WriteErrors(TextWriter writer)
 {
     if (this.Level >= MessageLevel.Warning)
     {
         if (writer == Console.Out)
         {
             RompConsoleMessenger.WriteDirect(
                 this.ToString(),
                 this.Level == MessageLevel.Warning ? (ConsoleColor?)ConsoleColor.Yellow :
                 this.Level == MessageLevel.Error ? (ConsoleColor?)ConsoleColor.Red :
                 null
                 );
         }
         else
         {
             writer.WriteLine(this.ToString());
         }
     }
 }
コード例 #4
0
        public void WriteText(int level, TextWriter writer)
        {
            var title = new string(' ', level) + "** " + AH.CoalesceString(this.Title, "(unnamed scope)") + " **";

            if (writer == Console.Out)
            {
                RompConsoleMessenger.WriteDirect(title, ConsoleColor.White);
            }
            else
            {
                writer.WriteLine(title);
            }

            foreach (var node in this.nodes)
            {
                node.WriteText(level + 1, writer);
            }

            writer.WriteLine();
        }
コード例 #5
0
        private static async Task RunPlanAsync(ScopedStatementBlock script, bool simulate)
        {
            if (simulate)
            {
                Console.WriteLine("Running as simulation");
            }

            Console.WriteLine();

            var executer = new RompExecutionEnvironment(script, simulate);

            if (!Console.IsOutputRedirected)
            {
                RompConsoleMessenger.ShowProgress = true;
                using (var done = new CancellationTokenSource())
                {
                    Task consoleTask = null;
                    try
                    {
                        consoleTask = Task.Run(() => RompConsoleMessenger.MonitorStatus(executer, done.Token));
                        await executer.ExecuteAsync();
                    }
                    finally
                    {
                        done.Cancel();
                        try
                        {
                            if (consoleTask != null)
                            {
                                await consoleTask;
                            }
                        }
                        catch
                        {
                        }
                    }
                }
            }
            else
            {
                RompConsoleMessenger.ShowProgress = false;
                await executer.ExecuteAsync();
            }

            var exec = RompDb.GetExecutions()
                       .FirstOrDefault(e => e.ExecutionId == executer.ExecutionId);

            if (exec != null)
            {
                var logs = RompDb.GetExecutionLogs(exec.ExecutionId);
                foreach (var log in logs)
                {
                    log.WriteErrors(Console.Out);
                }

                if (exec.StatusCode == Domains.ExecutionStatus.Normal)
                {
                    RompConsoleMessenger.WriteDirect($"Job #{executer.ExecutionId} completed successfully.", ConsoleColor.White);
                }
                else if (exec.StatusCode == Domains.ExecutionStatus.Warning)
                {
                    RompConsoleMessenger.WriteDirect($"Job #{executer.ExecutionId} completed with warnings.", ConsoleColor.Yellow);
                }
                else
                {
                    RompConsoleMessenger.WriteDirect($"Job #{executer.ExecutionId} encountered an error.", ConsoleColor.Red);
                    throw new RompException("Job execution failed.");
                }

                Console.WriteLine();
            }
            else
            {
                throw new RompException("Execution could not be created.");
            }
        }