mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Added task lease to audit trail trimming background task.
This commit is contained in:
@@ -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.
|
||||
|
@@ -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>
|
||||
|
@@ -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.");
|
||||
|
Reference in New Issue
Block a user