Added detailed XML documentation across multiple files to enhance code maintainability and readability. Key updates include: - Documented `AllowAllDashboardAuthorizationFilter` to clarify its development-only usage. - Added comments to `DtoExtensions` for Hangfire job ID generation and DTO-to-command conversion methods. - Enhanced `HealthCheckHtmlGenerator` with detailed descriptions of HTML generation methods and utility functions. - Documented `DependencyInjection` and `ProfileWorkerOptionsValidator` to explain service registration and configuration validation. - Updated `ProfileCache` with comments on thread-safe operations. - Added documentation to `ProfileWork` for profile synchronization logic and execution flow. - Enhanced `ProfileWorker` with health check logic and background service execution details. - Documented `ProfileWorkerOptions` configuration properties. These changes aim to improve developer understanding and ensure best practices are followed in production environments.
51 lines
2.2 KiB
C#
51 lines
2.2 KiB
C#
using ECMJobRunner.Application.Common.Dtos;
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace ECMJobRunner.WebCron.ProfileWorker;
|
|
|
|
/// <summary>
|
|
/// Thread-safe cache for storing active profile configurations.
|
|
/// Uses <see cref="ConcurrentDictionary{TKey, TValue}"/> to track profile state
|
|
/// and detect changes in schedule or removal.
|
|
/// </summary>
|
|
public class ProfileCache
|
|
{
|
|
private readonly ConcurrentDictionary<string, CfgProfileDto> _cache = new();
|
|
|
|
/// <summary>
|
|
/// Retrieves a profile from the cache by job identifier.
|
|
/// </summary>
|
|
/// <param name="jobId">The unique job identifier.</param>
|
|
/// <returns>The cached profile, or <c>null</c> if not found.</returns>
|
|
public CfgProfileDto? Get(string jobId) => _cache.TryGetValue(jobId, out var profile) ? profile : null;
|
|
|
|
/// <summary>
|
|
/// Adds a new profile or updates an existing profile in the cache.
|
|
/// </summary>
|
|
/// <param name="jobId">The unique job identifier.</param>
|
|
/// <param name="profile">The profile configuration to cache.</param>
|
|
public void AddOrUpdate(string jobId, CfgProfileDto profile) => _cache[jobId] = profile;
|
|
|
|
/// <summary>
|
|
/// Attempts to remove a profile from the cache.
|
|
/// </summary>
|
|
/// <param name="jobId">The unique job identifier.</param>
|
|
/// <param name="profile">The removed profile, or <c>null</c> if not found.</param>
|
|
/// <returns><c>true</c> if the profile was removed; otherwise, <c>false</c>.</returns>
|
|
public bool TryRemove(string jobId, out CfgProfileDto? profile) => _cache.TryRemove(jobId, out profile);
|
|
|
|
/// <summary>
|
|
/// Gets all job identifiers currently stored in the cache.
|
|
/// </summary>
|
|
/// <returns>A collection of job identifiers.</returns>
|
|
public IEnumerable<string> GetAllJobIds() => _cache.Keys;
|
|
|
|
/// <summary>
|
|
/// Attempts to retrieve a profile from the cache.
|
|
/// </summary>
|
|
/// <param name="jobId">The unique job identifier.</param>
|
|
/// <param name="profile">The cached profile, or <c>null</c> if not found.</param>
|
|
/// <returns><c>true</c> if the profile was found; otherwise, <c>false</c>.</returns>
|
|
public bool TryGetValue(string jobId, out CfgProfileDto? profile) => _cache.TryGetValue(jobId, out profile);
|
|
}
|