in capi/capi.go [332:381]
func lintFromCCADB(resp http.ResponseWriter, _ *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Error(err)
}
}()
report, err := ccadb.NewReport()
if err != nil {
resp.WriteHeader(500)
resp.Write([]byte(err.Error()))
return
}
ret := make(chan model.ChainLintResult, 30)
work := make(chan ccadb.Record, len(report.Records))
for _, record := range report.Records {
work <- record
}
close(work)
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for record := range work {
ret <- lintSubject(record.TestWebsiteValid())
ret <- lintSubject(record.TestWebsiteExpired())
ret <- lintSubject(record.TestWebsiteRevoked())
}
}()
}
go func() {
wg.Wait()
close(ret)
}()
resp.Write([]byte{'['})
jsonResp := json.NewEncoder(resp)
jsonResp.SetIndent("", " ")
i := 0
for answer := range ret {
i++
jsonResp.Encode(answer)
if i < len(report.Records)*3 {
resp.Write([]byte{','})
}
if flusher, ok := resp.(http.Flusher); ok {
flusher.Flush()
}
}
resp.Write([]byte{']'})
}