Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion pkg/api/job_runs.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,33 @@ type apiRunResults []apitype.JobRun
func JobsRunsReportFromDB(dbc *db.DB, filterOpts *filter.FilterOptions, release string, pagination *apitype.Pagination, reportEnd time.Time) (*apitype.PaginationResult, error) {
jobsResult := make([]apitype.JobRun, 0)
table := "prow_job_runs_report_matview"
q, err := filter.FilterableDBResult(dbc.DB.Table(table), filterOpts, apitype.JobRun{})

dbQuery := dbc.DB.Table(table)

// Split out ran_test_names filters — these are handled via a subquery
// against prow_job_run_tests rather than a column on the matview.
if filterOpts.Filter != nil {
ranTestFilter, remainingFilter := filterOpts.Filter.Split([]string{"ran_test_names"})
filterOpts.Filter = remainingFilter
for _, item := range ranTestFilter.Items {
baseSubquery := "EXISTS (SELECT 1 FROM prow_job_run_tests JOIN tests ON tests.id = prow_job_run_tests.test_id WHERE prow_job_run_tests.prow_job_run_id = prow_job_runs_report_matview.id AND tests.name %s ?)"
var pattern string
switch item.Operator {
case filter.OperatorHasEntry, filter.OperatorEquals:
baseSubquery = fmt.Sprintf(baseSubquery, "=")
pattern = item.Value
default:
baseSubquery = fmt.Sprintf(baseSubquery, "ILIKE")
pattern = fmt.Sprintf("%%%s%%", item.Value)
}
if item.Not {
baseSubquery = "NOT " + baseSubquery
}
dbQuery = dbQuery.Where(baseSubquery, pattern)
}
}

q, err := filter.FilterableDBResult(dbQuery, filterOpts, apitype.JobRun{})
if err != nil {
return nil, err
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/apis/api/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,8 @@ func (run JobRun) GetFieldType(param string) ColumnType {
return ColumnTypeArray
case "flaked_test_names":
return ColumnTypeArray
case "ran_test_names":
return ColumnTypeArray
case "labels":
return ColumnTypeArray
case "variants":
Expand Down
14 changes: 14 additions & 0 deletions sippy-ng/src/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,20 @@ export function pathForJobRunsWithTestFailure(release, test, filter) {
return `/jobs/${release}/runs?${multiple(...filters)}`
}

export function pathForJobRunsWithTest(release, test, filter) {
let filters = []
filters.push(filterFor('ran_test_names', 'has entry', test))
if (filter && filter.items) {
filter.items.forEach((item) => {
if (item.columnField === 'variants') {
filters.push(item)
}
})
}

return `/jobs/${release}/runs?${multiple(...filters)}`
}

export function pathForJobRunsWithTestFlake(release, test, filter) {
let filters = []
filters.push(filterFor('flaked_test_names', 'has entry', test))
Expand Down
7 changes: 7 additions & 0 deletions sippy-ng/src/jobs/JobRunsTable.js
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,13 @@ export default function JobRunsTable(props) {
headerName: 'Flaked tests',
hide: true,
},
{
field: 'ran_test_names',
type: 'array',
autocomplete: 'tests',
headerName: 'Tests ran',
hide: true,
},
{
field: 'pull_request_author',
autocomplete: 'authors',
Expand Down
4 changes: 2 additions & 2 deletions sippy-ng/src/tests/TestAnalysis.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { DirectionsRun } from '@mui/icons-material'
import {
filterFor,
not,
pathForJobRunsWithTestFailure,
pathForJobRunsWithTest,
safeEncodeURIComponent,
SafeJSONParam,
SafeStringParam,
Expand Down Expand Up @@ -287,7 +287,7 @@ export function TestAnalysis(props) {
startIcon={<DirectionsRun />}
component={Link}
to={withSort(
pathForJobRunsWithTestFailure(props.release, testName, {
pathForJobRunsWithTest(props.release, testName, {
items: [
...filterModel.items.filter(
(f) => f.columnField === 'variants'
Expand Down