Project 'big-bang/apps/sandbox/holocron/collector-jira-workflow' was moved to 'big-bang/apps/developer-tools/holocron/collector-jira-workflow'. Please update any links and bookmarks that may still have the old path.
collectTickets.go 1.85 KiB
package collector
import (
"sync"
"time"
"holocron/collector-jira-workflow/pkg/database"
"holocron/collector-jira-workflow/pkg/httpClient"
"holocron/collector-jira-workflow/pkg/utils"
)
func saveTickets(tickets []database.TicketJSON, db database.DB) {
for _, ticket := range tickets {
db.UpsertTicket(ticket)
}
}
func pruneTickets(
collectedTickets *[]database.TicketJSON,
board database.CollectorTarget,
db database.DB,
) (delCount int) {
savedTickets := db.GetTickets(board)
var collectedHashTable map[string]bool = make(map[string]bool, len(*collectedTickets))
for _, ticket := range *collectedTickets {
collectedHashTable[ticket.ID] = true
}
for _, ticket := range savedTickets {
if _, ticketInAPIResp := collectedHashTable[ticket.TicketID]; !ticketInAPIResp {
db.DeleteTicket(ticket)
delCount++
}
}
return delCount
}
func collectTickets(activeBoards []database.CollectorTarget, db database.DB) {
utils.Logger.Info("Collecting workflow data...")
var (
mtx sync.Mutex
wg sync.WaitGroup
delCount = 0
saveCount = 0
startTime = time.Now()
)
wg.Add(len(activeBoards))
for _, board := range activeBoards {
go func(board database.CollectorTarget) {
// let the fetching happen concurrently
defer wg.Done()
ticketsForBoard := httpClient.GetTickets(board)
// but only one go routine can write to db, and count variables
// at a time
mtx.Lock()
defer mtx.Unlock()
deleted := pruneTickets(ticketsForBoard, board, db)
saveTickets(*ticketsForBoard, db)
saveCount += len(*ticketsForBoard)
delCount += deleted
}(board)
}
wg.Wait()
statsFormattedStr := "\n---Finished collecting tickets---\n" +
"---Time Elapsed - %.0f seconds---\n" +
"%d\t-\tTickets Collected\n" +
"%d\t-\tTickets Removed\n"
utils.Logger.Infof(statsFormattedStr,
time.Since(startTime).Seconds(),
saveCount, delCount)
}