Инструмент, чтобы рассчитать среднее время, которое требуется на GitHub pull-запрос, чтобы получить слили


Я учусь идти, и это моя первая попытка в инструмент командной строки, которая использует в GitHub API, чтобы вычислить среднее время, необходимое для запрос, чтобы получить слился для конкретной организации или хранилище.

Алгоритм очень простой подход:

  1. Вам все репозиториев для организации.
  2. Для каждого репозитория, сделать все closed тянуть запросы.
  3. Вычислить среднее время, используя merged_at и created_at каждого тянет запросу.

Для крупных организаций/проектов, Шаг 2 может занять много времени, особенно если он не может получить все запросы с одной страницы результата. Поэтому я хочу, чтобы выполнить эту часть одновременно.

Вот часть кода, который делает это: гитхаб

c := make(chan Result, len(repos))
var wg sync.WaitGroup
for _, repo := range repos {
    wg.Add(1)
    go func(val Repository) {
        if cmd.Debug {
            fmt.Printf("Executing goroutine for value: %s", val.Name)
        }
        pullRequests, err := getPullRequests(ctx, client, val)
        c <- Result{PullRequests: pullRequests, Err: err}
        wg.Done()
    }(repo)
}
wg.Wait()
close(c)

timeAccumulator := float64(0)
prAccumulator := int64(0)

var cmdErr error
for result := range c {
    pullRequests, err := result.PullRequests, result.Err
    if err != nil {
        cmdErr = err
        break
    }
    for _, pullRequest := range pullRequests {
        if pullRequest.GetMergedAt().IsZero() {
            continue
        }
        delta := pullRequest.GetMergedAt().Sub(pullRequest.GetCreatedAt()).Hours()
        timeAccumulator += delta
        prAccumulator++
        if cmd.Debug {
            fmt.Printf("PR: %s\nCreated at: %v\nMerged at:%v\nDelta in hours: %f\n", pullRequest.GetTitle(), pullRequest.GetCreatedAt(), pullRequest.GetMergedAt(), delta)
        }
    }
}

Это работает, но я хотел бы получить некоторую обратную связь о WaitGroup использование. Такое чувство, что я не нужна здесь, потому что обходишь range c взяла бы результаты до тех пор, пока канал закрыт, это просто не понятно мне, когда я должен закрыть канал без WaitGroup.

И конечно любая другая обратная связь очень приветствуется!



362
3
задан 6 февраля 2018 в 08:02 Источник Поделиться
Комментарии