Esempio n. 1
0
 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();
 }
Esempio n. 2
0
        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);
                        }
                    }
                }
            }
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
 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();
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 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);
     }
 }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
            }
        }