aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/heatmap.go36
-rw-r--r--pkg/cover/templates/heatmap.html38
2 files changed, 62 insertions, 12 deletions
diff --git a/pkg/cover/heatmap.go b/pkg/cover/heatmap.go
index 903294095..b8e3bbfa6 100644
--- a/pkg/cover/heatmap.go
+++ b/pkg/cover/heatmap.go
@@ -37,8 +37,10 @@ type templateHeatmapRow struct {
}
type templateHeatmap struct {
- Root *templateHeatmapRow
- Periods []string
+ Root *templateHeatmapRow
+ Periods []string
+ Subsystems []string
+ Managers []string
}
func (thm *templateHeatmapRow) addParts(depth int, pathLeft []string, filePath string, instrumented, covered int64,
@@ -188,8 +190,8 @@ where
return stmt
}
-func filesCoverageWithDetails(ctx context.Context, projectID, ns, subsystem, manager string,
- timePeriods []coveragedb.TimePeriod) ([]*fileCoverageWithDetails, error) {
+func filesCoverageWithDetails(ctx context.Context, projectID string, scope *SelectScope,
+) ([]*fileCoverageWithDetails, error) {
client, err := spannerclient.NewClient(ctx, projectID)
if err != nil {
return nil, fmt.Errorf("spanner.NewClient() failed: %s", err.Error())
@@ -197,8 +199,8 @@ func filesCoverageWithDetails(ctx context.Context, projectID, ns, subsystem, man
defer client.Close()
res := []*fileCoverageWithDetails{}
- for _, timePeriod := range timePeriods {
- stmt := filesCoverageWithDetailsStmt(ns, subsystem, manager, timePeriod)
+ for _, timePeriod := range scope.Periods {
+ stmt := filesCoverageWithDetailsStmt(scope.Ns, scope.Subsystem, scope.Manager, timePeriod)
iter := client.Single().Query(ctx, stmt)
defer iter.Stop()
for {
@@ -243,19 +245,28 @@ func stylesBodyJSTemplate(templData *templateHeatmap,
template.HTML(js.Bytes()), nil
}
-func DoHeatMapStyleBodyJS(ctx context.Context, projectID, ns, subsystem, manager string,
- periods []coveragedb.TimePeriod) (template.CSS, template.HTML, template.HTML, error) {
- covAndDates, err := filesCoverageWithDetails(ctx, projectID, ns, subsystem, manager, periods)
+type SelectScope struct {
+ Ns string
+ Subsystem string
+ Manager string
+ Periods []coveragedb.TimePeriod
+}
+
+func DoHeatMapStyleBodyJS(ctx context.Context, projectID string, scope *SelectScope, sss, managers []string,
+) (template.CSS, template.HTML, template.HTML, error) {
+ covAndDates, err := filesCoverageWithDetails(ctx, projectID, scope)
if err != nil {
return "", "", "", fmt.Errorf("failed to filesCoverageWithDetails: %w", err)
}
templData := filesCoverageToTemplateData(covAndDates)
+ templData.Subsystems = sss
+ templData.Managers = managers
return stylesBodyJSTemplate(templData)
}
-func DoSubsystemsHeatMapStyleBodyJS(ctx context.Context, projectID, ns, subsystem, manager string,
- periods []coveragedb.TimePeriod) (template.CSS, template.HTML, template.HTML, error) {
- covWithDetails, err := filesCoverageWithDetails(ctx, projectID, ns, subsystem, manager, periods)
+func DoSubsystemsHeatMapStyleBodyJS(ctx context.Context, projectID string, scope *SelectScope, sss, managers []string,
+) (template.CSS, template.HTML, template.HTML, error) {
+ covWithDetails, err := filesCoverageWithDetails(ctx, projectID, scope)
if err != nil {
panic(err)
}
@@ -274,6 +285,7 @@ func DoSubsystemsHeatMapStyleBodyJS(ctx context.Context, projectID, ns, subsyste
}
}
templData := filesCoverageToTemplateData(ssCovAndDates)
+ templData.Managers = managers
return stylesBodyJSTemplate(templData)
}
diff --git a/pkg/cover/templates/heatmap.html b/pkg/cover/templates/heatmap.html
index fc1b457c9..5dd951afe 100644
--- a/pkg/cover/templates/heatmap.html
+++ b/pkg/cover/templates/heatmap.html
@@ -104,6 +104,44 @@
{{ end }}
{{ define "body" }}
+ <div style="display:inline-block">
+ <form method="get">
+ <div style="display:inline-block; vertical-align: top">
+ <label for="target-period">Periods:</label>
+ <br>
+ <label for="target-subsystem">Subsystem:</label>
+ <br>
+ <label for="target-manager">Manager:</label>
+ <br>
+ <label for="only-unique">Only unique:</label>
+ </div>
+ <div style="display:inline-block; vertical-align: top">
+ <select id="target-period" name="period">
+ <option value="month">Month</option>
+ <option value="day">Day</option>
+ </select>
+ <br>
+ <select id="target-subsystem" name="subsystem">
+ <option value="">*</option>
+ {{ range $ss := .Subsystems }}
+ <option value="{{ $ss }}">{{ $ss }}</option>
+ {{ end }}
+ </select>
+ <br>
+ <select id="target-manager" name="manager">
+ <option value="">*</option>
+ {{ range $manager := .Managers }}
+ <option value="{{ $manager }}">{{ $manager }}</option>
+ {{ end }}
+ </select>
+ <br>
+ <input type="checkbox" id="only-unique" name="unique-only" disabled>
+ </div>
+ <br>
+ <button id="updateButton">Update</button>
+ </form>
+ </div>
+ <hr>
<div style="white-space: nowrap">
<div style="display:inline-block">
<ul id="collapsible-list">