93 lines
3.1 KiB
C#
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; }
|
|
}
|
|
}
|