private void ExecuteAction(Action <IApplication> applicationAction, IApplication application) { try { applicationAction(application); _applicationStatusService.RecordSuccess(application.Definition.Id); } catch (WebException webException) { if (webException.Status == WebExceptionStatus.NameResolutionFailure || webException.Status == WebExceptionStatus.ConnectFailure) { _applicationStatusService.RecordConnectionFailure(application.Definition.Id); } else { _applicationStatusService.RecordFailure(application.Definition.Id); } if (webException.Message.Contains("502") || webException.Message.Contains("503") || webException.Message.Contains("timed out")) { _logger.Warn("{0} server is currently unavailable. {1}", this, webException.Message); } else { _logger.Warn("{0} {1}", this, webException.Message); } } catch (TooManyRequestsException ex) { if (ex.RetryAfter != TimeSpan.Zero) { _applicationStatusService.RecordFailure(application.Definition.Id, ex.RetryAfter); } else { _applicationStatusService.RecordFailure(application.Definition.Id, TimeSpan.FromHours(1)); } _logger.Warn("API Request Limit reached for {0}", this); } catch (HttpException ex) { _applicationStatusService.RecordFailure(application.Definition.Id); _logger.Warn("{0} {1}", this, ex.Message); } catch (Exception ex) { _applicationStatusService.RecordFailure(application.Definition.Id); _logger.Error(ex, "An error occurred while talking to remote application."); } }
public override ValidationResult Test(ApplicationDefinition definition) { var result = base.Test(definition); if ((result == null || result.IsValid) && definition.Id != 0) { _applicationStatusService.RecordSuccess(definition.Id); } return(result); }