public void ExecuteAction() { if (_firstTriggered != null && (DateTime.UtcNow - TriggerPeriod) > _firstTriggered) { // make sure no recent action was taken on this foreach (var actionItem in ActionHistory) { if (actionItem.TriggerItem.Application.Properties.ApplicationName == _triggeringItem.Application.Properties.ApplicationName && actionItem.TriggerItem.Service.Properties.ServiceName == _triggeringItem.Service.Properties.ServiceName && (DateTime.UtcNow - ActionGracePeriod) < actionItem.TimeTriggeredUtc) { // we should do any new action yet - we have a grace period return; } } TriggerAction.Execute(_triggeringItem); WatchdogEventSource.Current.ActionFired(TriggerAction.GetType().FullName, this.ToString(_triggeringItem), _triggeringItem.ToString()); ActionHistory.Add(new RuleActionItem() { TimeTriggeredUtc = DateTime.UtcNow, TriggerItem = _triggeringItem, TriggerAction = TriggerAction }); } }
public string ToString(TriggerItem triggerItem) { return($"RuleFilter={RuleFilter.ToString(triggerItem)}; Expression={TriggerExpression.ToString(triggerItem)}; TriggerPeriod={TriggerPeriod.ToString()}; " + $"GracePeriod={ActionGracePeriod.ToString()}; Action={TriggerAction.GetType().FullName}"); }