|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#nullable disable
using Microsoft.ApplicationInsights.Channel;
namespace Microsoft.DotNet.Cli.Telemetry.PersistenceChannel;
internal abstract class BaseStorageService
{
/// <summary>
/// Peeked transmissions dictionary (maps file name to its full path). Holds all the transmissions that were peeked.
/// </summary>
/// <remarks>
/// Note: The value (=file's full path) is not required in the Storage implementation.
/// If there was a concurrent Abstract Data Type Set it would have been used instead.
/// However, since there is no concurrent Set, dictionary is used and the second value is ignored.
/// </remarks>
protected IDictionary<string, string> PeekedTransmissions;
/// <summary>
/// Gets or sets the maximum size of the storage in bytes. When limit is reached, the Enqueue method will drop new
/// transmissions.
/// </summary>
internal ulong CapacityInBytes { get; set; }
/// <summary>
/// Gets or sets the maximum number of files. When limit is reached, the Enqueue method will drop new transmissions.
/// </summary>
internal uint MaxFiles { get; set; }
internal abstract string StorageDirectoryPath { get; }
/// <summary>
/// Initializes the <see cref="BaseStorageService" />
/// </summary>
/// <param name="desireStorageDirectoryPath">A folder name. Under this folder all the transmissions will be saved.</param>
internal abstract void Init(string desireStorageDirectoryPath);
internal abstract StorageTransmission Peek();
internal abstract void Delete(StorageTransmission transmission);
internal abstract Task EnqueueAsync(Transmission transmission);
protected void OnPeekedItemDisposed(string fileName)
{
try
{
if (PeekedTransmissions.ContainsKey(fileName))
{
PeekedTransmissions.Remove(fileName);
}
}
catch (Exception e)
{
PersistenceChannelDebugLog.WriteException(e, "Failed to remove the item from storage items.");
}
}
}
|