/// <summary> /// Execute the actual task functionality. /// </summary> /// <param name="result">The current build result.</param> /// <returns> /// True if the task was successful, false otherwise. /// </returns> protected override bool Execute(IIntegrationResult result) { Log.Debug("HttpStatusTask is executing"); bool taskTimedOut = false; string msg = string.Format("Checking http status of URI: '{0}'", this.RequestSettings.Uri.ToString()); if (!String.IsNullOrEmpty(Description)) { msg = Description + " (" + msg + ")"; } Log.Debug(msg); result.BuildProgressInformation.SignalStartRunTask(msg); XmlTaskResult taskResult = new XmlTaskResult(); List<HttpRequestStatus> resp = new List<HttpRequestStatus>(); long startTimeStamp = -1; bool keepTrying; int attempt = 0; if (this.HasTimeout) { startTimeStamp = Stopwatch.GetTimestamp(); } do { try { if (this.HasTimeout) { long taskDurationTicks = Stopwatch.GetTimestamp() - startTimeStamp; long taskDurationMilliSecs = (long)Math.Round(((double)taskDurationTicks / Stopwatch.Frequency) * 1000.0); long msecsLeft = this.Timeout.Millis - taskDurationMilliSecs; if (msecsLeft < 0) { taskTimedOut = true; break; } if (msecsLeft < this.RequestSettings.Timeout.Millis) { this.RequestSettings.Timeout = new Timeout((int)msecsLeft, TimeUnits.MILLIS); } Log.Debug("Task timeout in T-{0:N1} seconds", msecsLeft / 1000.0); } HttpRequestStatus status = this.GetRequestStatus(this.RequestSettings); if (status.Success) { Log.Debug("Checking returned status code ({0}) against success status codes: {1}", ((int)status.StatusCode).ToString(), this.SuccessStatusCodes); for (int i = 0; i < this.successStatusCodes.Length; i++) { if ((int)status.StatusCode == this.successStatusCodes[i]) { Log.Debug("Success, exiting..."); taskResult.Success = true; break; } } } resp.Add(status); } catch (Exception ex) { throw new BuilderException(this, String.Format("An exception occured in HttpStatusTask while checking status for: '{0}'", this.RequestSettings.Uri), ex); } // sleeping keepTrying = !taskResult.Success && (this.Retries == -1 || (this.Retries - attempt++) > 0); if (keepTrying) { var delay = this.RetryDelay ?? new Timeout(5000); if (delay.Millis > 0) { delay.Normalize(); Log.Debug("Retrying in {0}...", delay.ToString()); System.Threading.Thread.Sleep(delay.Millis); } else { Log.Debug("Retrying..."); } } } while (keepTrying); if (taskTimedOut) { throw new BuilderException(this, String.Format("HttpStatusTask timed out while checking status for: '{0}'", this.RequestSettings.Uri)); } Log.Debug("Writing output..."); XmlWriter writer = taskResult.GetWriter(); writer.WriteStartElement("httpStatus"); writer.WriteAttributeString("uri", this.RequestSettings.Uri.ToString()); writer.WriteAttributeString("success", XmlConvert.ToString(taskResult.Success)); if (!String.IsNullOrEmpty(this.Description)) { writer.WriteElementString("description", this.Description); } foreach (HttpRequestStatus status in resp) { status.WriteTo(writer, this.IncludeContent); } writer.WriteEndElement(); writer.Close(); result.AddTaskResult(taskResult); Log.Debug("HttpStatusTask finished, return value: {0}", taskResult.Success.ToString()); return taskResult.Success; }
/// <summary> /// Execute the actual task functionality. /// </summary> /// <param name="result">The current build result.</param> /// <returns> /// True if the task was successful, false otherwise. /// </returns> protected override bool Execute(IIntegrationResult result) { Log.Debug("HttpStatusTask is executing"); bool taskTimedOut = false; string msg = string.Format(System.Globalization.CultureInfo.CurrentCulture, "Checking http status of URI: '{0}'", this.RequestSettings.Uri.ToString()); if (!String.IsNullOrEmpty(Description)) { msg = Description + " (" + msg + ")"; } Log.Debug(msg); result.BuildProgressInformation.SignalStartRunTask(msg); XmlTaskResult taskResult = new XmlTaskResult(); List <HttpRequestStatus> resp = new List <HttpRequestStatus>(); long startTimeStamp = -1; bool keepTrying; int attempt = 0; if (this.HasTimeout) { startTimeStamp = Stopwatch.GetTimestamp(); } do { try { if (this.HasTimeout) { long taskDurationTicks = Stopwatch.GetTimestamp() - startTimeStamp; long taskDurationMilliSecs = (long)Math.Round(((double)taskDurationTicks / Stopwatch.Frequency) * 1000.0); long msecsLeft = this.Timeout.Millis - taskDurationMilliSecs; if (msecsLeft < 0) { taskTimedOut = true; break; } if (msecsLeft < this.RequestSettings.Timeout.Millis) { this.RequestSettings.Timeout = new Timeout((int)msecsLeft, TimeUnits.MILLIS); } Log.Debug("Task timeout in T-{0:N1} seconds", msecsLeft / 1000.0); } HttpRequestStatus status = this.GetRequestStatus(this.RequestSettings); if (status.Success) { Log.Debug("Checking returned status code ({0}) against success status codes: {1}", ((int)status.StatusCode).ToString(CultureInfo.CurrentCulture), this.SuccessStatusCodes); for (int i = 0; i < this.successStatusCodes.Length; i++) { if ((int)status.StatusCode == this.successStatusCodes[i]) { Log.Debug("Success, exiting..."); taskResult.Success = true; break; } } } resp.Add(status); } catch (Exception ex) { throw new BuilderException(this, string.Format(System.Globalization.CultureInfo.CurrentCulture, "An exception occured in HttpStatusTask while checking status for: '{0}'", this.RequestSettings.Uri), ex); } // sleeping keepTrying = !taskResult.Success && (this.Retries == -1 || (this.Retries - attempt++) > 0); if (keepTrying) { var delay = this.RetryDelay ?? new Timeout(5000); if (delay.Millis > 0) { delay.Normalize(); Log.Debug("Retrying in {0}...", delay.ToString()); System.Threading.Thread.Sleep(delay.Millis); } else { Log.Debug("Retrying..."); } } }while (keepTrying); if (taskTimedOut) { throw new BuilderException(this, string.Format(System.Globalization.CultureInfo.CurrentCulture, "HttpStatusTask timed out while checking status for: '{0}'", this.RequestSettings.Uri)); } Log.Debug("Writing output..."); XmlWriter writer = taskResult.GetWriter(); writer.WriteStartElement("httpStatus"); writer.WriteAttributeString("uri", this.RequestSettings.Uri.ToString()); writer.WriteAttributeString("success", XmlConvert.ToString(taskResult.Success)); if (!String.IsNullOrEmpty(this.Description)) { writer.WriteElementString("description", this.Description); } foreach (HttpRequestStatus status in resp) { status.WriteTo(writer, this.IncludeContent); } writer.WriteEndElement(); writer.Close(); result.AddTaskResult(taskResult); Log.Debug("HttpStatusTask finished, return value: {0}", taskResult.Success.ToString(CultureInfo.CurrentCulture)); return(taskResult.Success); }