Esempio n. 1
0
        private async Task AddUpdatesToWorkItemAsync(CompleteWorkItem completeWorkItem)
        {
            _log.Enter(this, args: completeWorkItem.Id);

            var uri          = new Uri($"{completeWorkItem.Url}/updates");
            var httpResponse = await HttpClient.GetAsync(uri);

            if (httpResponse.IsSuccessStatusCode)
            {
                var content = await httpResponse.Content.ReadAsStringAsync();

                var updates = JsonConvert.DeserializeObject <WorkItemUpdate>(content);
                completeWorkItem.Updates = updates;
            }
        }
        private TimeSpan CalculateCycleTime(CompleteWorkItem workItem)
        {
            _log.Enter(this, args: workItem.Fields.SystemTitle);

            DateTime startTime = DateTime.MaxValue;
            DateTime stopTime  = DateTime.MinValue;

            var boardColumnUpdates = workItem.Updates.value.Where(v => v.fields != null && v.fields.SystemBoardColumn != null);
            var workColumnName     = _settings["WorkColumnName"];


            var enterWorkColumn = boardColumnUpdates.Where(c => c.fields.SystemBoardColumn.newValue == workColumnName).FirstOrDefault();
            var leftWorkColumn  = boardColumnUpdates.Where(c => c.fields.SystemBoardColumn.oldValue == workColumnName).LastOrDefault();

            if (enterWorkColumn == null || leftWorkColumn == null)
            {
                return(TimeSpan.Zero);
            }

            startTime = enterWorkColumn.revisedDate;
            stopTime  = leftWorkColumn.revisedDate;

            // Found both dates, otherwise return no time
            if (startTime < DateTime.MaxValue && stopTime > DateTime.MinValue)
            {
                // Sometimes, the stoptime will give us weird values, so let's not accept more than 90 days off
                if (stopTime - startTime > TimeSpan.FromDays(90))
                {
                    return(TimeSpan.Zero);
                }

                return(stopTime - startTime);
            }

            return(TimeSpan.Zero);
        }