Added task lease to audit trail trimming background task.

This commit is contained in:
Daniel Stolt
2014-07-06 19:03:07 +02:00
parent 50ee3fcd9d
commit 1fa28be067
3 changed files with 27 additions and 10 deletions

View File

@@ -20,7 +20,7 @@ Features:
Name: Audit Trail Trimming
Description: Provides a background task that regularly deletes old audit trail records.
Category: Security
Dependencies: Orchard.AuditTrail
Dependencies: Orchard.AuditTrail, Orchard.TaskLease
Orchard.AuditTrail.Users:
Name: Audit Trail User Events
Description: Provides audit trail support for user related events.

View File

@@ -165,6 +165,10 @@
<Project>{d10ad48f-407d-4db5-a328-173ec7cb010f}</Project>
<Name>Orchard.Roles</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.TaskLease\Orchard.TaskLease.csproj">
<Project>{3f72a4e9-7b72-4260-b010-c16ec54f9baf}</Project>
<Name>Orchard.TaskLease</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Users\Orchard.Users.csproj">
<Project>{79aed36e-abd0-4747-93d3-8722b042454b}</Project>
<Name>Orchard.Users</Name>

View File

@@ -7,6 +7,7 @@ using Orchard.Environment.Extensions;
using Orchard.Logging;
using Orchard.Services;
using Orchard.Settings;
using Orchard.TaskLease.Services;
using Orchard.Tasks;
namespace Orchard.AuditTrail.Services {
@@ -15,11 +16,18 @@ namespace Orchard.AuditTrail.Services {
private static readonly object _sweepLock = new object();
private readonly ISiteService _siteService;
private readonly IClock _clock;
private readonly ITaskLeaseService _taskLeaseService;
private readonly IAuditTrailManager _auditTrailManager;
public AuditTrailTrimmingBackgroundTask(ISiteService siteService, IClock clock, IAuditTrailManager auditTrailManager) {
public AuditTrailTrimmingBackgroundTask(
ISiteService siteService,
IClock clock,
ITaskLeaseService taskLeaseService,
IAuditTrailManager auditTrailManager) {
_siteService = siteService;
_clock = clock;
_taskLeaseService = taskLeaseService;
_auditTrailManager = auditTrailManager;
}
@@ -29,16 +37,21 @@ namespace Orchard.AuditTrail.Services {
public void Sweep() {
if (Monitor.TryEnter(_sweepLock)) {
Logger.Debug("Beginning sweep.");
try {
// We don't need to check the audit trail for events to remove every minute. Let's stick with twice a day.
if (!GetIsTimeToTrim())
return;
Logger.Debug("Beginning sweep.");
Logger.Debug("Starting audit trail trimming.");
var deletedRecords = _auditTrailManager.Trim(TimeSpan.FromDays(Settings.RetentionPeriod));
Logger.Debug("Audit trail trimming completed. {0} records were deleted.", deletedRecords.Count());
Settings.LastRunUtc = _clock.UtcNow;
// Only allow this task to run on one farm node at a time.
if (_taskLeaseService.Acquire(GetType().FullName, _clock.UtcNow.AddHours(1)) != null) {
// We don't need to check the audit trail for events to remove every minute. Let's stick with twice a day.
if (!GetIsTimeToTrim())
return;
Logger.Debug("Starting audit trail trimming.");
var deletedRecords = _auditTrailManager.Trim(TimeSpan.FromDays(Settings.RetentionPeriod));
Logger.Debug("Audit trail trimming completed. {0} records were deleted.", deletedRecords.Count());
Settings.LastRunUtc = _clock.UtcNow;
}
}
catch (Exception ex) {
Logger.Error(ex, "Error during sweep.");