| File: Commands\CleanCacheCommand.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.AI.Evaluation.Console\Microsoft.Extensions.AI.Evaluation.Console.csproj (Microsoft.Extensions.AI.Evaluation.Console) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; using Azure.Identity; using Azure.Storage.Files.DataLake; using Microsoft.Extensions.AI.Evaluation.Console.Telemetry; using Microsoft.Extensions.AI.Evaluation.Console.Utilities; using Microsoft.Extensions.AI.Evaluation.Reporting; using Microsoft.Extensions.AI.Evaluation.Reporting.Storage; using Microsoft.Extensions.Logging; using static Microsoft.Extensions.AI.Evaluation.Console.Telemetry.TelemetryConstants; namespace Microsoft.Extensions.AI.Evaluation.Console.Commands; internal sealed class CleanCacheCommand(ILogger logger, TelemetryHelper telemetryHelper) { internal async Task<int> InvokeAsync( DirectoryInfo? storageRootDir, Uri? endpointUri, CancellationToken cancellationToken = default) { var telemetryProperties = new Dictionary<string, string>(); await logger.ExecuteWithCatchAsync( operation: () => telemetryHelper.ReportOperationAsync( operationName: EventNames.CleanCacheCommand, operation: () => { IEvaluationResponseCacheProvider cacheProvider; if (storageRootDir is not null) { string storageRootPath = storageRootDir.FullName; logger.LogInformation("Storage root path: {StorageRootPath}", storageRootPath); logger.LogInformation("Deleting expired cache entries..."); cacheProvider = new DiskBasedResponseCacheProvider(storageRootPath); telemetryProperties[PropertyNames.StorageType] = PropertyValues.StorageTypeDisk; } else if (endpointUri is not null) { logger.LogInformation("Azure Storage endpoint: {EndpointUri}", endpointUri); var fsClient = new DataLakeDirectoryClient(endpointUri, new DefaultAzureCredential()); cacheProvider = new AzureStorageResponseCacheProvider(fsClient); telemetryProperties[PropertyNames.StorageType] = PropertyValues.StorageTypeAzure; } else { throw new InvalidOperationException("Either --path or --endpoint must be specified"); } return cacheProvider.DeleteExpiredCacheEntriesAsync(cancellationToken); }, properties: telemetryProperties, logger: logger)).ConfigureAwait(false); return 0; } }