Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Side by Side Diff: ct/go/master_scripts/capture_skps_on_workers/main.go

Issue 1994663002: Use swarming in capture_skps and capture_skps_from_pdfs CT tasks (Closed) Base URL: https://skia.googlesource.com/buildbot@ct-5-capture_archives
Patch Set: Address comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | ct/go/util/constants.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // capture_skps_on_workers is an application that captures SKPs of the 1 // capture_skps_on_workers is an application that captures SKPs of the
2 // specified patchset type on all CT workers and uploads the results to Google 2 // specified patchset type on all CT workers and uploads the results to Google
3 // Storage. The requester is emailed when the task is done. 3 // Storage. The requester is emailed when the task is done.
4 package main 4 package main
5 5
6 import ( 6 import (
7 "bytes"
8 "flag" 7 "flag"
9 "fmt" 8 "fmt"
9 "path/filepath"
10 "strings" 10 "strings"
11 "text/template"
12 "time" 11 "time"
13 12
14 "github.com/skia-dev/glog" 13 "github.com/skia-dev/glog"
15 "go.skia.org/infra/ct/go/ctfe/capture_skps" 14 "go.skia.org/infra/ct/go/ctfe/capture_skps"
16 "go.skia.org/infra/ct/go/frontend" 15 "go.skia.org/infra/ct/go/frontend"
17 "go.skia.org/infra/ct/go/master_scripts/master_common" 16 "go.skia.org/infra/ct/go/master_scripts/master_common"
18 "go.skia.org/infra/ct/go/util" 17 "go.skia.org/infra/ct/go/util"
19 "go.skia.org/infra/go/common" 18 "go.skia.org/infra/go/common"
20 skutil "go.skia.org/infra/go/util" 19 skutil "go.skia.org/infra/go/util"
21 ) 20 )
22 21
22 const (
23 MAX_PAGES_PER_SWARMING_BOT_CAPTURE_SKPS = 100
24 MAX_PAGES_PER_SWARMING_BOT_CAPTURE_SKPS_FROM_PDFS = 1000
25 )
26
23 var ( 27 var (
24 emails = flag.String("emails", "", "The comma separated email ad dresses to notify when the task is picked up and completes.") 28 emails = flag.String("emails", "", "The comma separated email ad dresses to notify when the task is picked up and completes.")
25 description = flag.String("description", "", "The description of the run as entered by the requester.") 29 description = flag.String("description", "", "The description of the run as entered by the requester.")
26 gaeTaskID = flag.Int64("gae_task_id", -1, "The key of the App Engin e task. This task will be updated when the task is completed.") 30 gaeTaskID = flag.Int64("gae_task_id", -1, "The key of the App Engin e task. This task will be updated when the task is completed.")
27 pagesetType = flag.String("pageset_type", "", "The type of pagesets t o use. Eg: 10k, Mobile10k, All.") 31 pagesetType = flag.String("pageset_type", "", "The type of pagesets t o use. Eg: 10k, Mobile10k, All.")
28 chromiumBuild = flag.String("chromium_build", "", "The chromium build t o use for this capture SKPs run.") 32 chromiumBuild = flag.String("chromium_build", "", "The chromium build t o use for this capture SKPs run.")
29 targetPlatform = flag.String("target_platform", util.PLATFORM_LINUX, "Th e platform the benchmark will run on (Android / Linux).") 33 targetPlatform = flag.String("target_platform", util.PLATFORM_LINUX, "Th e platform the benchmark will run on (Android / Linux).")
30 runID = flag.String("run_id", "", "The unique run id (typically requester + timestamp).") 34 runID = flag.String("run_id", "", "The unique run id (typically requester + timestamp).")
31 35
32 taskCompletedSuccessfully = false 36 taskCompletedSuccessfully = false
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 glog.Error("At least one email address must be specified") 76 glog.Error("At least one email address must be specified")
73 return 77 return
74 } 78 }
75 skutil.LogErr(frontend.UpdateWebappTaskSetStarted(&capture_skps.UpdateVa rs{}, *gaeTaskID)) 79 skutil.LogErr(frontend.UpdateWebappTaskSetStarted(&capture_skps.UpdateVa rs{}, *gaeTaskID))
76 skutil.LogErr(util.SendTaskStartEmail(emailsArr, "Capture SKPs", *runID, *description)) 80 skutil.LogErr(util.SendTaskStartEmail(emailsArr, "Capture SKPs", *runID, *description))
77 // Ensure webapp is updated and completion email is sent even if task 81 // Ensure webapp is updated and completion email is sent even if task
78 // fails. 82 // fails.
79 defer updateWebappTask() 83 defer updateWebappTask()
80 defer sendEmail(emailsArr) 84 defer sendEmail(emailsArr)
81 85
82 if !*master_common.Local {
83 // Cleanup tmp files after the run.
84 defer util.CleanTmpDir()
85 }
86 // Finish with glog flush and how long the task took. 86 // Finish with glog flush and how long the task took.
87 defer util.TimeTrack(time.Now(), "Running capture skps task on workers") 87 defer util.TimeTrack(time.Now(), "Running capture skps task on workers")
88 defer glog.Flush() 88 defer glog.Flush()
89 89
90 if *pagesetType == "" { 90 if *pagesetType == "" {
91 glog.Error("Must specify --pageset_type") 91 glog.Error("Must specify --pageset_type")
92 return 92 return
93 } 93 }
94 if *chromiumBuild == "" { 94 if *chromiumBuild == "" {
95 glog.Error("Must specify --chromium_build") 95 glog.Error("Must specify --chromium_build")
96 return 96 return
97 } 97 }
98 if *runID == "" { 98 if *runID == "" {
99 glog.Error("Must specify --run_id") 99 glog.Error("Must specify --run_id")
100 return 100 return
101 } 101 }
102 102
103 » workerScript := "capture_skps" 103 » isolateFile := util.CAPTURE_SKPS_ISOLATE
104 » maxPages := MAX_PAGES_PER_SWARMING_BOT_CAPTURE_SKPS
104 if strings.Contains(strings.ToUpper(*pagesetType), "PDF") { 105 if strings.Contains(strings.ToUpper(*pagesetType), "PDF") {
105 // For PDF pagesets use the capture_skps_from_pdfs worker script . 106 // For PDF pagesets use the capture_skps_from_pdfs worker script .
106 » » workerScript = "capture_skps_from_pdfs" 107 » » isolateFile = util.CAPTURE_SKPS_FROM_PDFS_ISOLATE
108 » » maxPages = MAX_PAGES_PER_SWARMING_BOT_CAPTURE_SKPS_FROM_PDFS
107 // TODO(rmistry): Uncomment when ready to capture SKPs. 109 // TODO(rmistry): Uncomment when ready to capture SKPs.
108 //// Sync PDFium and build pdfium_test binary which will be used by the worker script. 110 //// Sync PDFium and build pdfium_test binary which will be used by the worker script.
109 //if err := util.SyncDir(util.PDFiumTreeDir); err != nil { 111 //if err := util.SyncDir(util.PDFiumTreeDir); err != nil {
110 // glog.Errorf("Could not sync PDFium: %s", err) 112 // glog.Errorf("Could not sync PDFium: %s", err)
111 // return 113 // return
112 //} 114 //}
113 //if err := util.BuildPDFium(); err != nil { 115 //if err := util.BuildPDFium(); err != nil {
114 // glog.Errorf("Could not build PDFium: %s", err) 116 // glog.Errorf("Could not build PDFium: %s", err)
115 // return 117 // return
116 //} 118 //}
117 //// Copy pdfium_test to Google Storage. 119 //// Copy pdfium_test to Google Storage.
118 //pdfiumLocalDir := path.Join(util.PDFiumTreeDir, "out", "Debug" ) 120 //pdfiumLocalDir := path.Join(util.PDFiumTreeDir, "out", "Debug" )
119 //pdfiumRemoteDir := path.Join(util.BINARIES_DIR_NAME, *chromium Build) 121 //pdfiumRemoteDir := path.Join(util.BINARIES_DIR_NAME, *chromium Build)
120 //// Instantiate GsUtil object. 122 //// Instantiate GsUtil object.
121 //gs, err := util.NewGsUtil(nil) 123 //gs, err := util.NewGsUtil(nil)
122 //if err != nil { 124 //if err != nil {
123 // glog.Error(err) 125 // glog.Error(err)
124 // return 126 // return
125 //} 127 //}
126 //if err := gs.UploadFile(util.BINARY_PDFIUM_TEST, pdfiumLocalDi r, pdfiumRemoteDir); err != nil { 128 //if err := gs.UploadFile(util.BINARY_PDFIUM_TEST, pdfiumLocalDi r, pdfiumRemoteDir); err != nil {
127 // glog.Errorf("Could not upload %s to %s: %s", util.BINARY _PDFIUM_TEST, pdfiumRemoteDir, err) 129 // glog.Errorf("Could not upload %s to %s: %s", util.BINARY _PDFIUM_TEST, pdfiumRemoteDir, err)
128 // return 130 // return
129 //} 131 //}
130 } 132 }
131 133
132 » // Run the capture SKPs script on all workers. 134 » // Empty the remote dir before the workers upload to it.
133 » captureSKPsCmdTemplate := "DISPLAY=:0 {{.WorkerScript}} --worker_num={{. WorkerNum}} --log_dir={{.LogDir}} --log_id={{.RunID}} " + 135 » gs, err := util.NewGsUtil(nil)
134 » » "--pageset_type={{.PagesetType}} --chromium_build={{.ChromiumBui ld}} --run_id={{.RunID}} " + 136 » if err != nil {
135 » » "--target_platform={{.TargetPlatform}} --local={{.Local}};" 137 » » glog.Error(err)
136 » captureSKPsTemplateParsed := template.Must(template.New("capture_skps_cm d").Parse(captureSKPsCmdTemplate)) 138 » » return
137 » captureSKPsCmdBytes := new(bytes.Buffer) 139 » }
138 » if err := captureSKPsTemplateParsed.Execute(captureSKPsCmdBytes, struct { 140 » skpGSBaseDir := filepath.Join(util.SWARMING_DIR_NAME, util.SKPS_DIR_NAME , *pagesetType)
139 » » WorkerScript string 141 » skutil.LogErr(gs.DeleteRemoteDir(skpGSBaseDir))
140 » » WorkerNum string 142 » if strings.Contains(strings.ToUpper(*pagesetType), "PDF") {
141 » » LogDir string 143 » » pdfGSBaseDir := filepath.Join(util.SWARMING_DIR_NAME, util.PDFS_ DIR_NAME, *pagesetType)
142 » » PagesetType string 144 » » skutil.LogErr(gs.DeleteRemoteDir(pdfGSBaseDir))
143 » » ChromiumBuild string 145 » }
144 » » RunID string 146
145 » » TargetPlatform string 147 » // Archive, trigger and collect swarming tasks.
146 » » Local bool 148 » isolateExtraArgs := map[string]string{
147 » }{ 149 » » "CHROMIUM_BUILD": *chromiumBuild,
148 » » WorkerScript: workerScript, 150 » » "RUN_ID": *runID,
149 » » WorkerNum: util.WORKER_NUM_KEYWORD, 151 » }
150 » » LogDir: util.GLogDir, 152 » if err := util.TriggerSwarmingTask(*pagesetType, "capture_skps", isolate File, 2*time.Hour, 1*time.Hour, maxPages, isolateExtraArgs); err != nil {
151 » » PagesetType: *pagesetType, 153 » » glog.Errorf("Error encountered when swarming tasks: %s", err)
152 » » ChromiumBuild: *chromiumBuild,
153 » » RunID: *runID,
154 » » TargetPlatform: *targetPlatform,
155 » » Local: *master_common.Local,
156 » }); err != nil {
157 » » glog.Errorf("Failed to execute template: %s", err)
158 return 154 return
159 } 155 }
160 156
161 cmd := append(master_common.WorkerSetupCmds(),
162 // The main command that captures SKPs on all workers.
163 captureSKPsCmdBytes.String())
164 _, err := util.SSH(strings.Join(cmd, " "), util.Slaves, util.CAPTURE_SKP S_TIMEOUT)
165 if err != nil {
166 glog.Errorf("Error while running cmd %s: %s", cmd, err)
167 return
168 }
169
170 taskCompletedSuccessfully = true 157 taskCompletedSuccessfully = true
171 } 158 }
OLDNEW
« no previous file with comments | « no previous file | ct/go/util/constants.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698