Another two packages

This commit is contained in:
THE_KONDRAT 2026-03-03 22:22:34 +03:00
parent 1a9befea0f
commit 1e1b978749
4 changed files with 216 additions and 0 deletions

View File

@ -0,0 +1,15 @@
using System.Threading;
using System.Threading.Tasks;
using NodePipeline.Abstractions;
using NodePipeline.Abstractions.Exceptions;
namespace NodePipeline.Reporting.Abstractions
{
public interface IPipelineRegistrationReporter
{
void ReportSuccess(PipelineRegistrationResult result, string pipelineId);
Task ReportSuccessAsync(PipelineRegistrationResult result, string pipelineId, CancellationToken cancellationToken);
void ReportFailure(PipelineValidationException exception);
Task ReportFailureAsync(PipelineValidationException exception, CancellationToken cancellationToken);
}
}

View File

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NodePipeline.Abstractions" Version="0.2.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,177 @@
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;
}
}
}

View File

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NodePipeline.Reporting.Abstractions" Version="0.2.0" />
</ItemGroup>
</Project>