/// <summary> /// This method is called, when your job is run by the Team Foundation Background Job Agent. /// </summary> /// <param name="requestContext"> /// The request context of the current job run. Use this to get to the Team Foundation Services as necessary. /// </param> /// <param name="jobDefinition"> /// The definition of the current job, which contains scheduling information as well as the job data. /// </param> /// <param name="queueTime">The time this job was scheduled to run.</param> /// <param name="resultMessage"> /// Any result message that should be logged to the job history. Use the <see cref="o:LogError"/> and <see cref="o:LogWarning"/> /// methods to create standard error and warning messages or log exceptions. At the end of your Run method, assign the contents /// of the <see cref="errorsWarningsBuilder"/> to the resultMessage parameter. /// </param> /// <returns></returns> public TeamFoundationJobExecutionResult Run(TeamFoundationRequestContext requestContext, TeamFoundationJobDefinition jobDefinition, DateTime queueTime, out string resultMessage) { TeamFoundationJobExecutionResult result = TeamFoundationJobExecutionResult.Succeeded; resultMessage = string.Empty; try { InitializeLogging(requestContext); bool skipFurtherResultAnalysis = false; DoWork(requestContext, jobDefinition, queueTime, ref result, ref resultMessage, ref skipFurtherResultAnalysis); if (!skipFurtherResultAnalysis) { AnalyzeResults(ref resultMessage, out result); } } catch (Exception ex) { HandleException(ex, out resultMessage, out result); } return(result); }
private void HandleException(Exception ex, out string resultMessage, out TeamFoundationJobExecutionResult result) { StringBuilder resultMessageBuilder = new StringBuilder(); resultMessageBuilder.AppendLine("The " + this.GetFriendlyJobName() + " job failed with an exception:"); resultMessageBuilder.AppendLine(ex.ToString()); resultMessage = resultMessageBuilder.ToString(); result = TeamFoundationJobExecutionResult.Failed; }
private void AnalyzeResults(ref string resultMessage, out TeamFoundationJobExecutionResult result) { if (errors == 0 && warnings == 0) { result = TeamFoundationJobExecutionResult.Succeeded; } else { if (errors == 0) { result = TeamFoundationJobExecutionResult.PartiallySucceeded; } else { result = TeamFoundationJobExecutionResult.Failed; } resultMessage += CreateResultMessage(); } }
protected override void DoWork(TeamFoundationRequestContext requestContext, TeamFoundationJobDefinition jobDefinition, DateTime queueTime, ref TeamFoundationJobExecutionResult result, ref string resultMessage, ref bool skipFurtherResultAnalysis) { ReadJobSettings(requestContext); if (!emailEnabled) { resultMessage = string.Format("Email settings have not been configured or are disabled for host {0}", requestContext.ServiceHost.InstanceId); skipFurtherResultAnalysis = true; return; } if (!File.Exists(emailTemplate)) { LogError(string.Format("The template file '{0}' does not exist!", emailTemplate), null); return; } // First delete all outdated workspaces so that they don't get picked up by the warning logic DeleteWorkspaces(requestContext); SendEmail(requestContext); }
/// <summary> /// The actual work of the job is being implemented here. /// </summary> /// <param name="requestContext"></param> /// <param name="jobDefinition"></param> /// <param name="queueTime"></param> /// <param name="result"></param> /// <param name="resultMessage"></param> /// <param name="skipFurtherResultAnalysis"></param> protected abstract void DoWork(TeamFoundationRequestContext requestContext, TeamFoundationJobDefinition jobDefinition, DateTime queueTime, ref TeamFoundationJobExecutionResult result, ref string resultMessage, ref bool skipFurtherResultAnalysis);