// internalInitialize will initialize the munger for the given GCS bucket url. func (sq *SubmitQueue) internalInitialize(config *github.Config, features *features.Features, GCSBucketUrl string) error { sq.Lock() defer sq.Unlock() sq.githubConfig = config if len(sq.JenkinsHost) == 0 { glog.Fatalf("--jenkins-host is required.") } if sq.FakeE2E { sq.e2e = &fake_e2e.FakeE2ETester{ JobNames: sq.JobNames, WeakStableJobNames: sq.WeakStableJobNames, } } else { sq.e2e = (&e2e.RealE2ETester{ JobNames: sq.JobNames, JenkinsHost: sq.JenkinsHost, WeakStableJobNames: sq.WeakStableJobNames, BuildStatus: map[string]e2e.BuildInfo{}, GoogleGCSBucketUtils: utils.NewUtils(GCSBucketUrl), }).Init() } if len(config.Address) > 0 { if len(config.WWWRoot) > 0 { http.Handle("/", gziphandler.GzipHandler(http.FileServer(http.Dir(config.WWWRoot)))) } http.Handle("/prs", gziphandler.GzipHandler(http.HandlerFunc(sq.servePRs))) http.Handle("/history", gziphandler.GzipHandler(http.HandlerFunc(sq.serveHistory))) http.Handle("/users", gziphandler.GzipHandler(http.HandlerFunc(sq.serveUsers))) http.Handle("/github-e2e-queue", gziphandler.GzipHandler(http.HandlerFunc(sq.serveGithubE2EStatus))) http.Handle("/google-internal-ci", gziphandler.GzipHandler(http.HandlerFunc(sq.serveGoogleInternalStatus))) http.Handle("/merge-info", gziphandler.GzipHandler(http.HandlerFunc(sq.serveMergeInfo))) http.Handle("/priority-info", gziphandler.GzipHandler(http.HandlerFunc(sq.servePriorityInfo))) http.Handle("/health", gziphandler.GzipHandler(http.HandlerFunc(sq.serveHealth))) http.Handle("/sq-stats", gziphandler.GzipHandler(http.HandlerFunc(sq.serveSQStats))) http.Handle("/flakes", gziphandler.GzipHandler(http.HandlerFunc(sq.serveFlakes))) config.ServeDebugStats("/stats") go http.ListenAndServe(config.Address, nil) } if sq.githubE2EPollTime == 0 { sq.githubE2EPollTime = githubE2EPollTime } sq.health.StartTime = sq.clock.Now() sq.healthHistory = make([]healthRecord, 0) go sq.handleGithubE2EAndMerge() go sq.updateGoogleE2ELoop() return nil }
// Initialize will initialize the munger func (sq *SubmitQueue) Initialize(config *github.Config, features *features.Features) error { sq.Lock() defer sq.Unlock() sq.githubConfig = config if len(sq.JenkinsHost) == 0 { glog.Fatalf("--jenkins-host is required.") } sq.lastE2EStable = true e2e := &e2e.E2ETester{ JobNames: sq.JobNames, JenkinsHost: sq.JenkinsHost, WeakStableJobNames: sq.WeakStableJobNames, BuildStatus: map[string]e2e.BuildInfo{}, } sq.e2e = e2e if len(config.Address) > 0 { if len(config.WWWRoot) > 0 { http.Handle("/", gziphandler.GzipHandler(http.FileServer(http.Dir(config.WWWRoot)))) } http.Handle("/prs", gziphandler.GzipHandler(http.HandlerFunc(sq.servePRs))) http.Handle("/history", gziphandler.GzipHandler(http.HandlerFunc(sq.serveHistory))) http.Handle("/users", gziphandler.GzipHandler(http.HandlerFunc(sq.serveUsers))) http.Handle("/github-e2e-queue", gziphandler.GzipHandler(http.HandlerFunc(sq.serveGithubE2EStatus))) http.Handle("/google-internal-ci", gziphandler.GzipHandler(http.HandlerFunc(sq.serveGoogleInternalStatus))) http.Handle("/merge-info", gziphandler.GzipHandler(http.HandlerFunc(sq.serveMergeInfo))) http.Handle("/priority-info", gziphandler.GzipHandler(http.HandlerFunc(sq.servePriorityInfo))) config.ServeDebugStats("/stats") go http.ListenAndServe(config.Address, nil) } sq.prStatus = map[string]submitStatus{} sq.lastPRStatus = map[string]submitStatus{} sq.githubE2EQueue = map[int]*github.MungeObject{} if sq.githubE2EPollTime == 0 { sq.githubE2EPollTime = githubE2EPollTime } go sq.handleGithubE2EAndMerge() go sq.updateGoogleE2ELoop() return nil }
// Initialize will initialize the munger func (c *CherrypickQueue) Initialize(config *github.Config, features *features.Features) error { c.Lock() defer c.Unlock() if len(config.Address) > 0 { if len(config.WWWRoot) > 0 { http.Handle("/", http.FileServer(http.Dir(config.WWWRoot))) } http.HandleFunc("/queue", c.serveQueue) http.HandleFunc("/raw", c.serveRaw) http.HandleFunc("/queue-info", c.serveQueueInfo) config.ServeDebugStats("/stats") go http.ListenAndServe(config.Address, nil) } c.lastMergedAndApproved = map[int]*github.MungeObject{} c.lastMerged = map[int]*github.MungeObject{} c.lastUnmerged = map[int]*github.MungeObject{} c.mergedAndApproved = map[int]*github.MungeObject{} c.merged = map[int]*github.MungeObject{} c.unmerged = map[int]*github.MungeObject{} return nil }
// internalInitialize will initialize the munger. // if overrideUrl is specified, will create testUtils func (sq *SubmitQueue) internalInitialize(config *github.Config, features *features.Features, overrideUrl string) error { sq.Lock() defer sq.Unlock() // Clean up all of our flags which we wish --flag="" to mean []string{} sq.BlockingJobNames = cleanStringSlice(sq.BlockingJobNames) sq.NonBlockingJobNames = cleanStringSlice(sq.NonBlockingJobNames) sq.PresubmitJobNames = cleanStringSlice(sq.PresubmitJobNames) sq.WeakStableJobNames = cleanStringSlice(sq.WeakStableJobNames) sq.RequiredStatusContexts = cleanStringSlice(sq.RequiredStatusContexts) sq.RequiredRetestContexts = cleanStringSlice(sq.RequiredRetestContexts) sq.DoNotMergeMilestones = cleanStringSlice(sq.DoNotMergeMilestones) sq.Metadata.RepoPullUrl = fmt.Sprintf("https://github.com/%s/%s/pulls/", config.Org, config.Project) sq.Metadata.ProjectName = strings.Title(config.Project) sq.githubConfig = config // TODO: This is not how injection for tests should work. if sq.FakeE2E { sq.e2e = &fake_e2e.FakeE2ETester{ JobNames: sq.BlockingJobNames, WeakStableJobNames: sq.WeakStableJobNames, } } else { var gcs *utils.Utils if overrideUrl != "" { gcs = utils.NewTestUtils("bucket", "logs", overrideUrl) } else { gcs = utils.NewWithPresubmitDetection( sq.features.GCSInfo.BucketName, sq.features.GCSInfo.LogDir, sq.features.GCSInfo.PullKey, sq.features.GCSInfo.PullLogDir, ) } sq.e2e = (&e2e.RealE2ETester{ BlockingJobNames: sq.BlockingJobNames, NonBlockingJobNames: sq.NonBlockingJobNames, WeakStableJobNames: sq.WeakStableJobNames, BuildStatus: map[string]e2e.BuildInfo{}, GoogleGCSBucketUtils: gcs, }).Init(admin.Mux) } sq.lgtmTimeCache = mungerutil.NewLabelTimeCache(lgtmLabel) if len(config.Address) > 0 { if len(config.WWWRoot) > 0 { http.Handle("/", gziphandler.GzipHandler(http.FileServer(http.Dir(config.WWWRoot)))) } http.Handle("/prs", gziphandler.GzipHandler(http.HandlerFunc(sq.servePRs))) http.Handle("/history", gziphandler.GzipHandler(http.HandlerFunc(sq.serveHistory))) http.Handle("/github-e2e-queue", gziphandler.GzipHandler(http.HandlerFunc(sq.serveGithubE2EStatus))) http.Handle("/google-internal-ci", gziphandler.GzipHandler(http.HandlerFunc(sq.serveGoogleInternalStatus))) http.Handle("/merge-info", gziphandler.GzipHandler(http.HandlerFunc(sq.serveMergeInfo))) http.Handle("/priority-info", gziphandler.GzipHandler(http.HandlerFunc(sq.servePriorityInfo))) http.Handle("/health", gziphandler.GzipHandler(http.HandlerFunc(sq.serveHealth))) http.Handle("/health.svg", gziphandler.GzipHandler(http.HandlerFunc(sq.serveHealthSVG))) http.Handle("/sq-stats", gziphandler.GzipHandler(http.HandlerFunc(sq.serveSQStats))) http.Handle("/flakes", gziphandler.GzipHandler(http.HandlerFunc(sq.serveFlakes))) http.Handle("/metadata", gziphandler.GzipHandler(http.HandlerFunc(sq.serveMetadata))) config.ServeDebugStats("/stats") go http.ListenAndServe(config.Address, nil) } admin.Mux.HandleFunc("/api/emergency/stop", sq.EmergencyStopHTTP) admin.Mux.HandleFunc("/api/emergency/resume", sq.EmergencyStopHTTP) admin.Mux.HandleFunc("/api/emergency/status", sq.EmergencyStopHTTP) if sq.githubE2EPollTime == 0 { sq.githubE2EPollTime = githubE2EPollTime } sq.healthHistory = make([]healthRecord, 0) go sq.handleGithubE2EAndMerge() go sq.updateGoogleE2ELoop() if sq.AdminPort != 0 { go http.ListenAndServe(fmt.Sprintf("0.0.0.0:%v", sq.AdminPort), admin.Mux) } return nil }