Skip to content

Commit 829fb8f

Browse files
committed
dashboard/app: ns/cover?jsonl=1 supports manager and subsystem selection
Continued refactoring.
1 parent ec098ac commit 829fb8f

File tree

3 files changed

+32
-16
lines changed

3 files changed

+32
-16
lines changed

dashboard/app/coverage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func handleCoverageHeatmap(c context.Context, w http.ResponseWriter, r *http.Req
129129
ns := hdr.Namespace
130130
repo, _ := getNsConfig(c, ns).mainRepoBranch()
131131
w.Header().Set("Content-Type", "application/json")
132-
return writeExtAPICoverageFor(c, w, ns, repo)
132+
return writeExtAPICoverageFor(c, w, ns, repo, params)
133133
}
134134
return handleHeatmap(c, w, hdr, params, cover.DoHeatMapStyleBodyJS)
135135
}

dashboard/app/public_json_api.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func GetJSONDescrFor(page interface{}) ([]byte, error) {
178178
return json.MarshalIndent(res, "", "\t")
179179
}
180180

181-
func writeExtAPICoverageFor(ctx context.Context, w io.Writer, ns, repo string) error {
181+
func writeExtAPICoverageFor(ctx context.Context, w io.Writer, ns, repo string, p *coverageHeatmapParams) error {
182182
// By default, return the previous month coverage. It guarantees the good numbers.
183183
//
184184
// The alternative is to return the current month.
@@ -187,13 +187,19 @@ func writeExtAPICoverageFor(ctx context.Context, w io.Writer, ns, repo string) e
187187
if err != nil {
188188
return fmt.Errorf("coveragedb.GenNPeriodsTill: %w", err)
189189
}
190-
defaultTimePeriod := tps[0]
190+
191191
covDBClient := getCoverageDBClient(ctx)
192-
ff, err := coveragedb.MakeFuncFinder(ctx, covDBClient, ns, defaultTimePeriod)
192+
ff, err := coveragedb.MakeFuncFinder(ctx, covDBClient, ns, tps[0])
193193
if err != nil {
194194
return fmt.Errorf("coveragedb.MakeFuncFinder: %w", err)
195195
}
196-
covCh, errCh := coveragedb.FilesCoverageStream(ctx, covDBClient, ns, defaultTimePeriod)
196+
covCh, errCh := coveragedb.FilesCoverageStream(ctx, covDBClient,
197+
&coveragedb.SelectScope{
198+
Ns: ns,
199+
Subsystem: p.subsystem,
200+
Manager: p.manager,
201+
Periods: tps,
202+
})
197203
if err := writeFileCoverage(ctx, w, repo, ff, covCh); err != nil {
198204
return fmt.Errorf("populateFileCoverage: %w", err)
199205
}

pkg/coveragedb/coveragedb.go

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -409,10 +409,10 @@ type SelectScope struct {
409409

410410
// FilesCoverageStream streams information about all the line coverage.
411411
// It is expensive and better to be used for time insensitive operations.
412-
func FilesCoverageStream(ctx context.Context, client spannerclient.SpannerClient, ns string, timePeriod TimePeriod,
412+
func FilesCoverageStream(ctx context.Context, client spannerclient.SpannerClient, scope *SelectScope,
413413
) (<-chan *FileCoverageWithLineInfo, <-chan error) {
414414
iter := client.Single().Query(ctx,
415-
filesCoverageWithDetailsStmt(ns, "", "", timePeriod, true))
415+
filesCoverageWithDetailsStmt(scope, true))
416416
resCh := make(chan *FileCoverageWithLineInfo)
417417
errCh := make(chan error)
418418
go func() {
@@ -435,14 +435,24 @@ func FilesCoverageWithDetails(
435435
for _, timePeriod := range scope.Periods {
436436
needLinesDetails := onlyUnique
437437
iterManager := client.Single().Query(ctx,
438-
filesCoverageWithDetailsStmt(scope.Ns, scope.Subsystem, scope.Manager, timePeriod, needLinesDetails))
438+
filesCoverageWithDetailsStmt(&SelectScope{
439+
Ns: scope.Ns,
440+
Subsystem: scope.Subsystem,
441+
Manager: scope.Manager,
442+
Periods: []TimePeriod{timePeriod},
443+
}, needLinesDetails))
439444
defer iterManager.Stop()
440445

441446
var err error
442447
var periodRes []*FileCoverageWithDetails
443448
if onlyUnique {
444449
iterAll := client.Single().Query(ctx,
445-
filesCoverageWithDetailsStmt(scope.Ns, scope.Subsystem, "", timePeriod, needLinesDetails))
450+
filesCoverageWithDetailsStmt(&SelectScope{
451+
Ns: scope.Ns,
452+
Subsystem: scope.Subsystem,
453+
Manager: "",
454+
Periods: []TimePeriod{timePeriod},
455+
}, needLinesDetails))
446456
defer iterAll.Stop()
447457
periodRes, err = readCoverageUniq(iterAll, iterManager)
448458
if err != nil {
@@ -462,8 +472,8 @@ func FilesCoverageWithDetails(
462472
return res, nil
463473
}
464474

465-
func filesCoverageWithDetailsStmt(ns, subsystem, manager string, timePeriod TimePeriod, withLines bool,
466-
) spanner.Statement {
475+
func filesCoverageWithDetailsStmt(scope *SelectScope, withLines bool) spanner.Statement {
476+
manager := scope.Manager
467477
if manager == "" {
468478
manager = "*"
469479
}
@@ -481,15 +491,15 @@ from merge_history
481491
where
482492
merge_history.namespace=$1 and dateto=$2 and duration=$3 and manager=$4`,
483493
Params: map[string]interface{}{
484-
"p1": ns,
485-
"p2": timePeriod.DateTo,
486-
"p3": timePeriod.Days,
494+
"p1": scope.Ns,
495+
"p2": scope.Periods[0].DateTo,
496+
"p3": scope.Periods[0].Days,
487497
"p4": manager,
488498
},
489499
}
490-
if subsystem != "" {
500+
if scope.Subsystem != "" {
491501
stmt.SQL += " and $5=ANY(subsystems)"
492-
stmt.Params["p5"] = subsystem
502+
stmt.Params["p5"] = scope.Subsystem
493503
}
494504
stmt.SQL += "\norder by files.filepath"
495505
return stmt

0 commit comments

Comments
 (0)