func main() { flag.Parse() logClient := client.New(*logUri) matcher, err := createMatcherFromFlags() if err != nil { log.Fatal(err) } opts := scanner.ScannerOptions{ Matcher: matcher, BatchSize: *batchSize, NumWorkers: *numWorkers, ParallelFetch: *parallelFetch, StartIndex: *startIndex, Quiet: *quiet, } scanner := scanner.NewScanner(logClient, opts) scanner.Scan(logCertInfo, logPrecertInfo) }
func main() { flag.Parse() var sctFileWriter io.Writer var err error if *sctInputFile != "" { sctFileWriter, err = os.Create(*sctInputFile) if err != nil { log.Fatal(err) } } else { sctFileWriter = ioutil.Discard } sctWriter := zlib.NewWriter(sctFileWriter) defer func() { err := sctWriter.Close() if err != nil { log.Fatal(err) } }() fetchLogClient := client.New(*sourceLogUri) matcher, err := createMatcher() if err != nil { log.Fatal(err) } opts := scanner.ScannerOptions{ Matcher: matcher, BatchSize: *batchSize, NumWorkers: *numWorkers, ParallelFetch: *parallelFetch, StartIndex: *startIndex, Quiet: *quiet, } scanner := scanner.NewScanner(fetchLogClient, opts) certs := make(chan *ct.LogEntry, *batchSize**parallelFetch) precerts := make(chan *ct.LogEntry, *batchSize**parallelFetch) addedCerts := make(chan *preload.AddedCert, *batchSize**parallelFetch) var sctWriterWG sync.WaitGroup sctWriterWG.Add(1) go sctWriterJob(addedCerts, sctWriter, &sctWriterWG) submitLogClient := client.New(*targetLogUri) var submitterWG sync.WaitGroup for w := 0; w < *parallelSubmit; w++ { submitterWG.Add(2) go certSubmitterJob(addedCerts, submitLogClient, certs, &submitterWG) go precertSubmitterJob(addedCerts, submitLogClient, precerts, &submitterWG) } addChainFunc := func(entry *ct.LogEntry) { certs <- entry } addPreChainFunc := func(entry *ct.LogEntry) { precerts <- entry } scanner.Scan(addChainFunc, addPreChainFunc) close(certs) close(precerts) submitterWG.Wait() close(addedCerts) sctWriterWG.Wait() }