177 lines
9.1 KiB
C#
177 lines
9.1 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using NodePipeline.Abstractions;
|
|
using NodePipeline.Abstractions.Exceptions;
|
|
using NodePipeline.Abstractions.Interfaces;
|
|
using NodePipeline.Abstractions.Models.Validation;
|
|
using NodePipeline.Reporting.Abstractions;
|
|
|
|
namespace NodePipeline.Reporting.Console
|
|
{
|
|
public class ConsolePipelineRegistrationReporter : IPipelineRegistrationReporter
|
|
{
|
|
|
|
private readonly IPipelineLocalizationProvider _validationLocalizationProvider;
|
|
|
|
public void ReportSuccess(PipelineRegistrationResult result)
|
|
{
|
|
// var backgroundColor = System.Console.BackgroundColor;
|
|
// var foregroundColor = System.Console.ForegroundColor;
|
|
// System.Console.Write($"Pipeline ");
|
|
// System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
// System.Console.Write($"[{pipelineId}] ");
|
|
// System.Console.ForegroundColor = ConsoleColor.Green;
|
|
// System.Console.WriteLine($"successfully registered");
|
|
// System.Console.ForegroundColor = foregroundColor;
|
|
|
|
|
|
var color = System.Console.ForegroundColor;
|
|
System.Console.ForegroundColor = ConsoleColor.DarkGray;
|
|
var warnings = result.NodeWarnings;
|
|
System.Console.ForegroundColor =
|
|
result.WarningsCount == 0 ? ConsoleColor.DarkGreen : ConsoleColor.DarkYellow;
|
|
System.Console.WriteLine(result.WarningsCount == 0
|
|
? _validationLocalizationProvider.GetLocalizedString("PipelineRegistered", CultureInfo.CurrentCulture,
|
|
result.PipelineId)
|
|
: _validationLocalizationProvider.GetLocalizedString("PipelineRegisteredWithWarnings",
|
|
CultureInfo.CurrentCulture, result.PipelineId, result.WarningsCount));
|
|
//TODO: add messages
|
|
//TODO: add method GetMessages to exceptions
|
|
|
|
if (result.WarningsCount > 0)
|
|
{
|
|
System.Console.WriteLine("Nodes:");
|
|
|
|
foreach (var nodeKvp in warnings.OrderBy(q => q.Key))
|
|
{
|
|
System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
System.Console.WriteLine($"\t[{nodeKvp.Key}]");
|
|
System.Console.ForegroundColor = color;
|
|
|
|
var warningParameters = nodeKvp.Value.ParameterResults
|
|
.Where(q => q.Value.Any(x => x.Result == ValidationResult.HasWarnings))
|
|
.ToDictionary(q => q.Key, q => q.Value);
|
|
var warningPorts = nodeKvp.Value.PortResults
|
|
.Where(q => q.Value.Any(x => x.Result == ValidationResult.HasWarnings))
|
|
.ToDictionary(q => q.Key, q => q.Value);
|
|
|
|
if (warningParameters.Count > 0)
|
|
{
|
|
System.Console.WriteLine("\t\tParameters:");
|
|
System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
foreach (var parameter in warningParameters.OrderBy(q => q.Key))
|
|
// foreach (var warning in parameter.Value.OrderBy(q => q.ErrorMessage))
|
|
foreach (var warning in parameter.Value)
|
|
System.Console.WriteLine(string.Concat("\t\t[WARN] ", parameter.Key, ": ", warning.ErrorMessage));
|
|
}
|
|
|
|
if (warningPorts.Count > 0)
|
|
{
|
|
System.Console.WriteLine("\t\tPorts:");
|
|
System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
foreach (var parameter in warningPorts.OrderBy(q => q.Key))
|
|
foreach (var warning in parameter.Value)
|
|
System.Console.WriteLine(string.Concat("\t\t[WARN] ", parameter.Key, ": ", warning.ErrorMessage));
|
|
}
|
|
}
|
|
}
|
|
|
|
System.Console.ForegroundColor = color;
|
|
}
|
|
|
|
public async Task ReportSuccessAsync(PipelineRegistrationResult result, CancellationToken cancellationToken)
|
|
{
|
|
ReportSuccess(result);
|
|
await Task.CompletedTask;
|
|
}
|
|
|
|
public void ReportFailure(PipelineValidationException exception)
|
|
{
|
|
var color = System.Console.ForegroundColor;
|
|
System.Console.ForegroundColor = ConsoleColor.DarkGray;
|
|
System.Console.WriteLine(_validationLocalizationProvider.GetLocalizedString(exception.Message, CultureInfo.CurrentCulture,
|
|
exception.PipelineId, exception.RegistrationResult.ErrorsCount, exception.RegistrationResult.WarningsCount));
|
|
System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
System.Console.Write($"Warnings: [{exception.RegistrationResult.WarningsCount}] | ");
|
|
System.Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
System.Console.WriteLine($"Errors: [{exception.RegistrationResult.ErrorsCount}]");
|
|
System.Console.ForegroundColor = color;
|
|
System.Console.WriteLine(new string('-', 30));
|
|
System.Console.WriteLine("Nodes:");
|
|
|
|
foreach (var nodeKvp in exception.RegistrationResult.GetNotValidNodes().OrderBy(q => q.Key))
|
|
{
|
|
System.Console.ForegroundColor = nodeKvp.Value.Result == ValidationResult.HasWarnings
|
|
? ConsoleColor.DarkYellow
|
|
: ConsoleColor.DarkRed;
|
|
System.Console.WriteLine($"\t[{nodeKvp.Key}]");
|
|
System.Console.ForegroundColor = color;
|
|
|
|
// var warningParameters = ex.WarningParameters.TryGetValue(nodeKvp.Key, out var value);
|
|
// var errorParameters = ex.ErrorParameters.TryGetValue(nodeKvp.Key);
|
|
// var warningPorts = ex.WarningPorts[nodeKvp.Key];
|
|
// var errorPorts = ex.ErrorPorts[nodeKvp.Key];
|
|
|
|
if ((exception.RegistrationResult.WarningParameters.TryGetValue(nodeKvp.Key, out var warningParameters) &&
|
|
warningParameters.Count > 0)
|
|
| (exception.RegistrationResult.ErrorParameters.TryGetValue(nodeKvp.Key, out var errorParameters) &&
|
|
errorParameters.Count > 0))
|
|
{
|
|
System.Console.WriteLine("\t\tParameters:");
|
|
if (warningParameters?.Count > 0)
|
|
{
|
|
System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
foreach (var parameter in warningParameters.OrderBy(q => q.Key))
|
|
// foreach (var warning in parameter.Value.OrderBy(q => q.ErrorMessage))
|
|
foreach (var warning in parameter.Value)
|
|
System.Console.WriteLine(string.Concat("\t\t[WARN] ", parameter.Key, ": ", warning.ErrorMessage));
|
|
}
|
|
|
|
if (errorParameters?.Count > 0)
|
|
{
|
|
System.Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
foreach (var parameter in errorParameters.OrderBy(q => q.Key))
|
|
// foreach (var error in parameter.Value.OrderBy(q => q.ErrorMessage))
|
|
foreach (var error in parameter.Value)
|
|
System.Console.WriteLine(string.Concat("\t\t[ERRO] ", parameter.Key, ": ", error.ErrorMessage));
|
|
}
|
|
}
|
|
|
|
if ((exception.RegistrationResult.WarningPorts.TryGetValue(nodeKvp.Key, out var warningPorts) &&
|
|
warningPorts.Count > 0)
|
|
| (exception.RegistrationResult.ErrorPorts.TryGetValue(nodeKvp.Key, out var errorPorts) &&
|
|
errorPorts.Count > 0))
|
|
{
|
|
System.Console.WriteLine("\t\tPorts:");
|
|
if (warningPorts?.Count > 0)
|
|
{
|
|
System.Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
foreach (var port in warningPorts.OrderBy(q => q.Key))
|
|
// foreach (var warning in parameter.Value.OrderBy(q => q.ErrorMessage))
|
|
foreach (var warning in port.Value)
|
|
System.Console.WriteLine(string.Concat("\t\t[WARN] ", port.Key, ": ", warning.ErrorMessage));
|
|
}
|
|
|
|
if (!(errorPorts?.Count > 0)) continue;
|
|
|
|
System.Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
foreach (var port in errorPorts.OrderBy(q => q.Key))
|
|
// foreach (var error in parameter.Value.OrderBy(q => q.ErrorMessage))
|
|
foreach (var error in port.Value)
|
|
System.Console.WriteLine(string.Concat("\t\t[ERRO] ", port.Key, ": ", error.ErrorMessage));
|
|
}
|
|
}
|
|
|
|
System.Console.ForegroundColor = color;
|
|
}
|
|
|
|
public async Task ReportFailureAsync(PipelineValidationException exception, CancellationToken cancellationToken)
|
|
{
|
|
ReportFailure(exception);
|
|
await Task.CompletedTask;
|
|
}
|
|
}
|
|
} |