/// <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();
            }
        }
Exemple #4
0
        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);