You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
using NzbDrone.Common.Messaging;
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.HealthCheck
|
|
|
|
{
|
|
|
|
public interface IEventDrivenHealthCheck
|
|
|
|
{
|
|
|
|
IProvideHealthCheck HealthCheck { get; }
|
|
|
|
|
|
|
|
bool ShouldExecute(IEvent message, bool previouslyFailed);
|
|
|
|
}
|
|
|
|
|
|
|
|
public class EventDrivenHealthCheck<TEvent> : IEventDrivenHealthCheck
|
|
|
|
{
|
|
|
|
public IProvideHealthCheck HealthCheck { get; set; }
|
|
|
|
public CheckOnCondition Condition { get; set; }
|
|
|
|
public ICheckOnCondition<TEvent> EventFilter { get; set; }
|
|
|
|
|
|
|
|
public EventDrivenHealthCheck(IProvideHealthCheck healthCheck, CheckOnCondition condition)
|
|
|
|
{
|
|
|
|
HealthCheck = healthCheck;
|
|
|
|
Condition = condition;
|
|
|
|
EventFilter = healthCheck as ICheckOnCondition<TEvent>;
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool ShouldExecute(IEvent message, bool previouslyFailed)
|
|
|
|
{
|
|
|
|
if (Condition == CheckOnCondition.SuccessfulOnly && previouslyFailed)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Condition == CheckOnCondition.FailedOnly && !previouslyFailed)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (EventFilter != null && !EventFilter.ShouldCheckOnEvent((TEvent)message))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|