public TimerRecordBuilder(ISourceControlInfo sourceControlInfo, BuildCounter buildCounter)
 {
     _sourceControlInfo = sourceControlInfo;
     _buildCounter = buildCounter;
 }
Example #2
0
        public static void PublishTotalBuildRecord(DateTime startTime, DateTime endTime, string buildNumber)
        {
            var buildCounter = new BuildCounter();
            var builder = new TimerRecordBuilder(new SourceControlInfo(), buildCounter);

            var record = builder
                .WithProjectName("Total_Build_Time")
                .WithStartTime(startTime)
                .WithFinishTime(endTime)
                .WithMachineName()
                .WithUserName()
                .WithTrunkPath()
                .WithLocalBuildNumber(buildNumber)
                .Build();

            //Increment build count here...
            buildCounter.IncrementFile();

            //TODO validate elsewhere
            if ((Settings.TotalBuildTimeValidMin != null
                    && record.ElapsedTime < Settings.TotalBuildTimeValidMin)
                || (Settings.TotalBuildTimeValidMax != null
                    && record.ElapsedTime > Settings.TotalBuildTimeValidMax))
                return;

            var recordJson = JsonConvert.SerializeObject(record);
            _logSender.Value.SendString(recordJson);
        }
        private static void StartWatching()
        {
            //TODO For this to work, CheckForWatcher() needs to be the very first thing called
            TotalBuildTimer.UpdateBuildStart();

            //Error possiblities
            var nullCount = 0;
            var absoluteQuittingTime = DateTime.Now.AddMinutes(10);
            var finishedTimeout = Settings.TotalBuildTimeTimeout;

            while (true)
            {
                Logger.Info("Checking for non-updated last build time...");
                var lastEnd = TotalBuildTimer.GetLastBuildEnd();
                if (lastEnd.HasValue)
                {
                    if (lastEnd.Value < (DateTime.Now.Subtract(finishedTimeout)))
                    {
                        //Consider build end
                        var counter = new BuildCounter();
                        var buildNumber = counter.GetIncrementingBuildVersion(false, false);

                        Logger.DisplayMessage("Submitting!:" + lastEnd.Value);

                        TotalBuildTimer.SubmitBuildLength(buildNumber);
                        return;
                    }
                }
                else
                {
                    ++nullCount;
                }
                if (DateTime.Now > absoluteQuittingTime
                    || nullCount >= 5)
                {
                    //Consider this some error
                    return;
                }

                Thread.Sleep(TimeSpan.FromSeconds(15));
            }
        }