private static void CompleteFailedTask(RevaleeTask task, string message) { Supervisor.State.CompleteTask(task); Supervisor.LogEvent(message, TraceEventType.Error); Supervisor.Telemetry.RecordWaitTime(CalculateWaitTime(DateTime.UtcNow, task)); Supervisor.Telemetry.RecordFailedCallback(); }
public void Initialize() { lock (_SyncRoot) { if (_TaskPersistenceSettings == null) { _TaskPersistenceSettings = Supervisor.Configuration.TaskPersistenceSettings; _PersistenceProvider = _TaskPersistenceSettings.CreateProvider(); _PersistenceProvider.Open(_TaskPersistenceSettings.ConnectionString); _AwaitingTaskCollection.Clear(); if (_PersistenceProvider is NullTaskPersistenceProvider) { Supervisor.LogEvent("No task persistence provider has been configured. Awaiting tasks will be lost when the service is shut down.", TraceEventType.Information); } else { int recoveredTasks = RecoverTasks(); if (recoveredTasks > 0) { Supervisor.LogEvent(string.Format("Recovered {0:#,##0} tasks from storage.", recoveredTasks), TraceEventType.Information); } } } } }
private static void CompleteSuccessfulTask(RevaleeTask task) { Supervisor.State.CompleteTask(task); Supervisor.LogEvent(string.Format("Successful callback to {0}. [{1}]", task.CallbackUrl.OriginalString, task.CallbackId), TraceEventType.Verbose); Supervisor.Telemetry.RecordWaitTime(CalculateWaitTime(DateTime.UtcNow, task)); Supervisor.Telemetry.RecordSuccessfulCallback(); RetryHeuristics.OnSuccess(task.CallbackUrl); }
private static void CompleteFailedTask(RevaleeTask task, HttpStatusCode statusCode) { Supervisor.State.CompleteTask(task); Supervisor.LogEvent(string.Format("Unsuccessful callback to {0} due to HTTP status code {1}. [{2}]", task.CallbackUrl.OriginalString, (int)statusCode, task.CallbackId), TraceEventType.Error); Supervisor.Telemetry.RecordWaitTime(CalculateWaitTime(DateTime.UtcNow, task)); Supervisor.Telemetry.RecordFailedCallback(); }
private static void RetryTask(RevaleeTask task) { // Update the persisted attempt counts Supervisor.State.UpdateTask(task); // Reenlist task to be retried later TimeSpan retryDelay = RetryHeuristics.OnRetryableFailure(task.CallbackUrl); DateTime delayedCallbackTime = DateTime.UtcNow.Add(retryDelay); Supervisor.State.ReenlistTask(task, delayedCallbackTime); Supervisor.LogEvent(string.Format("Retrying callback to {0} after waiting {1}. [{2}]", task.CallbackUrl.OriginalString, retryDelay, task.CallbackId), TraceEventType.Information); }
private static void CompleteRetryableTask(RevaleeTask task, string message) { if (task.AttemptsRemaining > 0) { Supervisor.LogEvent(message, TraceEventType.Warning); RetryTask(task); } else { // Out of attempts CompleteFailedTask(task, message); } }
private static void FinalizeAcceptedResponse(HttpListenerRequest request, HttpListenerResponse response, Guid callbackId, Uri callbackUrl) { string remoteAddress = request.RemoteEndPoint.Address.ToString(); try { response.StatusCode = 200; response.StatusDescription = "OK"; } finally { response.Close(); } Supervisor.LogEvent(string.Format("Cancellation processed for {0} from {1}. [{2}]", callbackUrl.OriginalString, remoteAddress, callbackId), TraceEventType.Verbose); }
private static void FinalizeAcceptedResponse(HttpListenerRequest request, HttpListenerResponse response, RevaleeTask task) { string remoteAddress = request.RemoteEndPoint.Address.ToString(); try { response.StatusCode = 200; response.StatusDescription = "OK"; byte[] confirmation_number = Encoding.UTF8.GetBytes(task.CallbackId.ToString()); response.ContentLength64 = confirmation_number.LongLength; response.OutputStream.Write(confirmation_number, 0, confirmation_number.Length); } finally { response.Close(); } Supervisor.Telemetry.RecordAcceptedRequest(); Supervisor.LogEvent(string.Format("Request accepted for {0} @ {1:d} {1:t} from {2}. [{3}]", task.CallbackUrl.OriginalString, task.CallbackTime, remoteAddress, task.CallbackId), TraceEventType.Verbose); }
private static void FinalizeRejectedResponse(HttpListenerRequest request, HttpListenerResponse response, int statusCode, string statusDescription, Uri callbackUrl) { string remoteAddress = request.RemoteEndPoint.Address.ToString(); try { response.StatusCode = statusCode; response.StatusDescription = statusDescription; } finally { response.Close(); } if (callbackUrl == null) { Supervisor.LogEvent(string.Format("Cancellation rejected from {0} due to: {1}.", remoteAddress, statusDescription), TraceEventType.Verbose); } else { Supervisor.LogEvent(string.Format("Cancellation rejected for {0} from {1} due to: {2}.", callbackUrl.OriginalString, remoteAddress, statusDescription), TraceEventType.Verbose); } }