in perfdash/perfdash.go [83:147]
func run() error {
initDownloaderOptions()
pflag.Parse()
initGlobalConfig()
if options.DefaultBuildsCount > maxBuilds || options.DefaultBuildsCount < 0 {
klog.Infof("Invalid number of builds: %d, setting to %d", options.DefaultBuildsCount, maxBuilds)
options.DefaultBuildsCount = maxBuilds
}
var metricsBucket MetricsBucket
var err error
switch options.Mode {
case gcsMode:
metricsBucket, err = NewGCSMetricsBucket(*logsBucket, *logsPath, *credentialPath, *useADC)
case s3Mode:
metricsBucket, err = NewS3MetricsBucket(*logsBucket, *logsPath, *awsRegion)
default:
return fmt.Errorf("unexpected mode: %s", options.Mode)
}
if err != nil {
return fmt.Errorf("error creating metrics bucket downloader: %v", err)
}
downloader := NewDownloader(options, metricsBucket, *allowParsersForAllTests)
result := make(JobToCategoryData)
if !*www {
result, err = downloader.getData()
if err != nil {
return fmt.Errorf("fetching data failed: %v", err)
}
prettyResult, err := json.MarshalIndent(result, "", " ")
if err != nil {
return fmt.Errorf("formatting data failed: %v", err)
}
klog.Infof("Result: %v", string(prettyResult))
return nil
}
go func() {
for {
klog.Infof("Fetching new data...")
result, err = downloader.getData()
if err != nil {
klog.Errorf("Error fetching data: %v", err)
time.Sleep(errorDelay)
continue
}
klog.Infof("Data fetched, sleeping %v...", pollDuration)
time.Sleep(pollDuration)
}
}()
klog.Infof("Starting server...")
http.Handle("/", http.FileServer(http.Dir(*wwwDir)))
http.HandleFunc("/jobnames", result.ServeJobNames)
http.HandleFunc("/metriccategorynames", result.ServeCategoryNames)
http.HandleFunc("/metricnames", result.ServeMetricNames)
http.HandleFunc("/buildsdata", result.ServeBuildsData)
http.HandleFunc("/config", serveConfig)
return http.ListenAndServe(*addr, nil)
}