func lintFromCCADB()

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{']'})
}