< Summary

Information
Class: Elsa.Dashboard.Api.Services.DashboardRangeResolver
Assembly: Elsa.Dashboard.Api
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Dashboard.Api/Services/DashboardRangeResolver.cs
Line coverage
100%
Covered lines: 29
Uncovered lines: 0
Coverable lines: 29
Total lines: 47
Line coverage: 100%
Branch coverage
90%
Covered branches: 18
Total branches: 20
Branch coverage: 90%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Resolve(...)100%44100%
ResolveGranularity(...)100%66100%
GetBucketSize(...)50%44100%
Normalize(...)100%66100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Dashboard.Api/Services/DashboardRangeResolver.cs

#LineLine coverage
 1using Elsa.Common;
 2using Elsa.Dashboard.Api.Models;
 3
 4namespace Elsa.Dashboard.Api.Services;
 5
 196public class DashboardRangeResolver(ISystemClock clock)
 7{
 8    public DashboardRange Resolve(string? range)
 9    {
 1310        var key = Normalize(range);
 1311        var duration = key switch
 1312        {
 113            DashboardRangeKeys.OneHour => TimeSpan.FromHours(1),
 114            DashboardRangeKeys.SevenDays => TimeSpan.FromDays(7),
 1115            _ => TimeSpan.FromHours(24)
 1316        };
 1317        var to = clock.UtcNow;
 1318        return new(key, to.Subtract(duration), to);
 19    }
 20
 21    public string ResolveGranularity(string? granularity, string range) =>
 522        string.IsNullOrWhiteSpace(granularity)
 523            ? range switch
 524            {
 125                DashboardRangeKeys.OneHour => DashboardTrendGranularity.Minute,
 126                DashboardRangeKeys.SevenDays => DashboardTrendGranularity.Day,
 127                _ => DashboardTrendGranularity.Hour
 528            }
 529            : granularity;
 30
 31    public TimeSpan GetBucketSize(string granularity) =>
 132        granularity.Equals(DashboardTrendGranularity.Minute, StringComparison.OrdinalIgnoreCase)
 133            ? TimeSpan.FromMinutes(5)
 134            : granularity.Equals(DashboardTrendGranularity.Day, StringComparison.OrdinalIgnoreCase)
 135                ? TimeSpan.FromDays(1)
 136                : TimeSpan.FromHours(1);
 37
 38    private static string Normalize(string? range) =>
 1339        range?.Trim().ToLowerInvariant() switch
 1340        {
 141            DashboardRangeKeys.OneHour => DashboardRangeKeys.OneHour,
 142            DashboardRangeKeys.SevenDays => DashboardRangeKeys.SevenDays,
 1143            _ => DashboardRangeKeys.TwentyFourHours
 1344        };
 45}
 46
 47public record DashboardRange(string Key, DateTimeOffset From, DateTimeOffset To);