< Summary

Information
Class: Elsa.Diagnostics.OpenTelemetry.RealTime.OpenTelemetryHub
Assembly: Elsa.Diagnostics.OpenTelemetry
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.OpenTelemetry/RealTime/OpenTelemetryHub.cs
Line coverage
75%
Covered lines: 12
Uncovered lines: 4
Coverable lines: 16
Total lines: 50
Line coverage: 75%
Branch coverage
81%
Covered branches: 13
Total branches: 16
Branch coverage: 81.2%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.cctor()100%11100%
SubscribeAsync(...)100%11100%
UnsubscribeAsync()100%210%
OnDisconnectedAsync()100%210%
ValidateFilter(...)87.5%88100%
EnsureCanReadOpenTelemetry()75%88100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.OpenTelemetry/RealTime/OpenTelemetryHub.cs

#LineLine coverage
 1using Elsa.Diagnostics.OpenTelemetry.Contracts;
 2using Elsa.Diagnostics.OpenTelemetry.Models;
 3using Elsa.Diagnostics.OpenTelemetry.Permissions;
 4using FastEndpoints.Security;
 5using Microsoft.AspNetCore.Authorization;
 6using Microsoft.AspNetCore.SignalR;
 7
 8namespace Elsa.Diagnostics.OpenTelemetry.RealTime;
 9
 10[Authorize]
 511public class OpenTelemetryHub(OpenTelemetrySubscriptionManager subscriptionManager) : Hub<IOpenTelemetryClient>
 12{
 13    private const string ReadAllPermission = "read:*";
 114    private static readonly string[] ReadPermissions = [PermissionNames.All, ReadAllPermission, OpenTelemetryPermissions
 15
 16    public Task SubscribeAsync(OpenTelemetryTraceFilter? filter)
 17    {
 518        EnsureCanReadOpenTelemetry();
 419        return subscriptionManager.SubscribeAsync(Context.ConnectionId, ValidateFilter(filter), Context.ConnectionAborte
 20    }
 21
 22    public Task UnsubscribeAsync()
 23    {
 024        return subscriptionManager.UnsubscribeAsync(Context.ConnectionId);
 25    }
 26
 27    public override async Task OnDisconnectedAsync(Exception? exception)
 28    {
 029        await UnsubscribeAsync().ConfigureAwait(false);
 030        await base.OnDisconnectedAsync(exception).ConfigureAwait(false);
 031    }
 32
 33    private static OpenTelemetryTraceFilter ValidateFilter(OpenTelemetryTraceFilter? filter)
 34    {
 435        filter ??= new();
 36
 437        if (filter.From is { } from && filter.To is { } to && from > to)
 138            throw new HubException("The OpenTelemetry filter 'from' timestamp must be earlier than or equal to 'to'.");
 39
 340        return filter;
 41    }
 42
 43    private void EnsureCanReadOpenTelemetry()
 44    {
 545        var user = Context.User;
 46
 547        if (user?.Identity?.IsAuthenticated != true || !ReadPermissions.Any(user.HasPermission))
 148            throw new HubException("Access denied.");
 449    }
 50}