< Summary

Information
Class: Elsa.Diagnostics.ConsoleLogs.ShellFeatures.ConsoleLogsFeature
Assembly: Elsa.Diagnostics.ConsoleLogs
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.ConsoleLogs/ShellFeatures/ConsoleLogsFeature.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 28
Coverable lines: 28
Total lines: 63
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.ConsoleLogs/ShellFeatures/ConsoleLogsFeature.cs

#LineLine coverage
 1using CShells.AspNetCore.Features;
 2using CShells.FastEndpoints.Features;
 3using CShells.Features;
 4using ConsoleLogStreaming.Core.Options;
 5using Elsa.Diagnostics.ConsoleLogs.Extensions;
 6using JetBrains.Annotations;
 7using Microsoft.AspNetCore.Routing;
 8using Microsoft.Extensions.DependencyInjection;
 9using Microsoft.Extensions.Hosting;
 10
 11namespace Elsa.Diagnostics.ConsoleLogs.ShellFeatures;
 12
 13/// <summary>
 14/// Provides live raw console log streaming over REST and SignalR.
 15/// </summary>
 16[ShellFeature(
 17    DisplayName = "Console Logs",
 18    Description = "Provides live raw console log streaming over REST and SignalR",
 19    DependsOn = ["ElsaFastEndpoints", "Workflows"])]
 20[UsedImplicitly]
 21public class ConsoleLogsFeature : IFastEndpointsShellFeature, IWebShellFeature
 22{
 023    private static readonly ConsoleLogOptions DefaultOptions = new();
 24
 025    public int RecentLogCapacity { get; set; } = DefaultOptions.RecentCapacity;
 026    public int SubscriberChannelCapacity { get; set; } = DefaultOptions.SubscriberCapacity;
 027    public int MaxRecentQuerySize { get; set; } = DefaultOptions.MaxRecentQuerySize;
 028    public int MaxLineLength { get; set; } = DefaultOptions.MaxLineLength;
 029    public TimeSpan IdleFlushTimeout { get; set; } = DefaultOptions.IdleFlushTimeout;
 030    public bool StripAnsiEscapeSequences { get; set; } = !DefaultOptions.PreserveAnsi;
 031    public string RedactionReplacement { get; set; } = "[Redacted]";
 032    public ICollection<string> SensitiveTextPatterns { get; set; } = [..DefaultOptions.RedactionRules.Select(x => x.Patt
 33
 34    public void ConfigureServices(IServiceCollection services)
 35    {
 036        services.AddConsoleLogsServices(ConfigureOptions);
 037    }
 38
 39    public void MapEndpoints(IEndpointRouteBuilder endpoints, IHostEnvironment? environment)
 40    {
 041        endpoints.MapConsoleLogsHub();
 042    }
 43
 44    private void ConfigureOptions(ConsoleLogOptions options)
 45    {
 046        options.RecentCapacity = RecentLogCapacity;
 047        options.SubscriberCapacity = SubscriberChannelCapacity;
 048        options.MaxRecentQuerySize = MaxRecentQuerySize;
 049        options.MaxLineLength = MaxLineLength;
 050        options.IdleFlushTimeout = IdleFlushTimeout;
 051        options.PreserveAnsi = !StripAnsiEscapeSequences;
 052        options.RedactionRules.Clear();
 053        foreach (var pattern in SensitiveTextPatterns)
 54        {
 055            options.RedactionRules.Add(new()
 056            {
 057                Name = "Sensitive text",
 058                Pattern = pattern,
 059                Replacement = RedactionReplacement
 060            });
 61        }
 062    }
 63}