< 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: 67
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 Elsa.ShellFeatures;
 7using Elsa.Workflows.ShellFeatures;
 8using Elsa.Platform.PackageManifest.Generator.Hints;
 9using JetBrains.Annotations;
 10using Microsoft.AspNetCore.Routing;
 11using Microsoft.Extensions.DependencyInjection;
 12using Microsoft.Extensions.Hosting;
 13
 14namespace Elsa.Diagnostics.ConsoleLogs.ShellFeatures;
 15
 16/// <summary>
 17/// Provides live raw console log streaming over REST and SignalR.
 18/// </summary>
 19[ManifestFeatureCategory("Diagnostics")]
 20[ShellFeature(
 21    DisplayName = "Console Logs",
 22    Description = "Provides live raw console log streaming over REST and SignalR",
 23    DependsOn = [typeof(ElsaFastEndpointsFeature), typeof(WorkflowsFeature)])]
 24[UsedImplicitly]
 25public class ConsoleLogsFeature : IFastEndpointsShellFeature, IWebShellFeature
 26{
 027    private static readonly ConsoleLogOptions DefaultOptions = new();
 28
 029    public int RecentLogCapacity { get; set; } = DefaultOptions.RecentCapacity;
 030    public int SubscriberChannelCapacity { get; set; } = DefaultOptions.SubscriberCapacity;
 031    public int MaxRecentQuerySize { get; set; } = DefaultOptions.MaxRecentQuerySize;
 032    public int MaxLineLength { get; set; } = DefaultOptions.MaxLineLength;
 033    public TimeSpan IdleFlushTimeout { get; set; } = DefaultOptions.IdleFlushTimeout;
 034    public bool StripAnsiEscapeSequences { get; set; } = !DefaultOptions.PreserveAnsi;
 035    public string RedactionReplacement { get; set; } = "[Redacted]";
 036    public ICollection<string> SensitiveTextPatterns { get; set; } = [..DefaultOptions.RedactionRules.Select(x => x.Patt
 37
 38    public void ConfigureServices(IServiceCollection services)
 39    {
 040        services.AddConsoleLogsServices(ConfigureOptions);
 041    }
 42
 43    public void MapEndpoints(IEndpointRouteBuilder endpoints, IHostEnvironment? environment)
 44    {
 045        endpoints.MapConsoleLogsHub();
 046    }
 47
 48    private void ConfigureOptions(ConsoleLogOptions options)
 49    {
 050        options.RecentCapacity = RecentLogCapacity;
 051        options.SubscriberCapacity = SubscriberChannelCapacity;
 052        options.MaxRecentQuerySize = MaxRecentQuerySize;
 053        options.MaxLineLength = MaxLineLength;
 054        options.IdleFlushTimeout = IdleFlushTimeout;
 055        options.PreserveAnsi = !StripAnsiEscapeSequences;
 056        options.RedactionRules.Clear();
 057        foreach (var pattern in SensitiveTextPatterns)
 58        {
 059            options.RedactionRules.Add(new()
 060            {
 061                Name = "Sensitive text",
 062                Pattern = pattern,
 063                Replacement = RedactionReplacement
 064            });
 65        }
 066    }
 67}