This repository has been archived on 2023-05-27. You can view files and clone it, but cannot push or open issues or pull requests.
BirdsiteLIVE/src/BirdsiteLive.Domain/Statistics/ExtractionStatisticsHandler.cs

93 lines
3.1 KiB
C#

using System.Threading;
using System.Timers;
namespace BirdsiteLive.Domain.Statistics
{
public interface IExtractionStatisticsHandler
{
void ExtractedDescription(int mentionsCount);
void ExtractedStatus(int mentionsCount);
ExtractionStatistics GetStatistics();
}
public class ExtractionStatisticsHandler : IExtractionStatisticsHandler
{
private static int _lastDescriptionMentionsExtracted;
private static int _lastStatusMentionsExtracted;
private static int _descriptionMentionsExtracted;
private static int _statusMentionsExtracted;
private static System.Timers.Timer _resetTimer;
#region Ctor
public ExtractionStatisticsHandler()
{
if (_resetTimer == null)
{
_resetTimer = new System.Timers.Timer();
_resetTimer.Elapsed += OnTimeResetEvent;
_resetTimer.Interval = 24 * 60 * 60 * 1000; // 24h
_resetTimer.Enabled = true;
}
}
#endregion
private void OnTimeResetEvent(object sender, ElapsedEventArgs e)
{
_lastDescriptionMentionsExtracted = _descriptionMentionsExtracted;
_lastStatusMentionsExtracted = _statusMentionsExtracted;
// Reset
Interlocked.Exchange(ref _descriptionMentionsExtracted, 0);
Interlocked.Exchange(ref _statusMentionsExtracted, 0);
}
public void ExtractedDescription(int mentionsCount)
{
for (var i = 0; i < mentionsCount; i++)
Interlocked.Increment(ref _descriptionMentionsExtracted);
}
public void ExtractedStatus(int mentionsCount)
{
for (var i = 0; i < mentionsCount; i++)
Interlocked.Increment(ref _statusMentionsExtracted);
}
public ExtractionStatistics GetStatistics()
{
return new ExtractionStatistics(
_descriptionMentionsExtracted,
_statusMentionsExtracted,
_lastDescriptionMentionsExtracted,
_lastStatusMentionsExtracted
);
}
}
public class ExtractionStatistics
{
#region Ctor
public ExtractionStatistics(
int mentionsInDescriptionsExtraction,
int mentionsInStatusesExtraction,
int lastMentionsInDescriptionsExtraction,
int lastMentionsInStatusesExtraction
)
{
MentionsInDescriptionsExtraction = mentionsInDescriptionsExtraction;
MentionsInStatusesExtraction = mentionsInStatusesExtraction;
LastMentionsInDescriptionsExtraction = lastMentionsInDescriptionsExtraction;
LastMentionsInStatusesExtraction = lastMentionsInStatusesExtraction;
}
#endregion
public int MentionsInDescriptionsExtraction { get; }
public int MentionsInStatusesExtraction { get; }
public int LastMentionsInDescriptionsExtraction { get; }
public int LastMentionsInStatusesExtraction { get; }
}
}