diff --git a/cmd/sippy/serve.go b/cmd/sippy/serve.go index 63e61198f..f4ecca6d0 100644 --- a/cmd/sippy/serve.go +++ b/cmd/sippy/serve.go @@ -79,7 +79,11 @@ func (f *ServerFlags) Validate() error { func NewServeCommand() *cobra.Command { f := NewServerFlags() - + cmd := newServeFlagsCommand(f) + f.BindFlags(cmd.Flags()) + return cmd +} +func newServeFlagsCommand(f *ServerFlags) *cobra.Command { cmd := &cobra.Command{ Use: "serve", Short: "Run the sippy server", diff --git a/pkg/api/job_runs.go b/pkg/api/job_runs.go index 77cd2eb72..145321ba8 100644 --- a/pkg/api/job_runs.go +++ b/pkg/api/job_runs.go @@ -528,9 +528,17 @@ func runTestRunAnalysis(failedTest models.ProwJobRunTest, jobRun *models.ProwJob return apitype.ProwJobRunTestRiskAnalysis{}, errJobNames } + // one of our data sources should have the test ID + testID := failedTest.TestID + if testID == 0 && testResultsJobNames != nil { + testID = uint(testResultsJobNames.TestID) + } + if testID == 0 && testResultsVariants != nil { + testID = uint(testResultsVariants.TestID) + } analysis := apitype.ProwJobRunTestRiskAnalysis{ Name: failedTest.Test.Name, - TestID: failedTest.Test.ID, + TestID: testID, OpenBugs: failedTest.Test.Bugs, } // Watch out for tests that ran in previous period, but not current, no sense comparing to 0 runs: diff --git a/pkg/api/tests.go b/pkg/api/tests.go index 34e9cb3f5..b17e40974 100644 --- a/pkg/api/tests.go +++ b/pkg/api/tests.go @@ -195,7 +195,7 @@ func BuildTestsResults(dbc *db.DB, release, period string, collapse, includeOver // Collapse groups the test results together -- otherwise we return the test results per-variant combo (NURP+) variantSelect := "" if collapse { - rawQuery = rawQuery.Select(`name,watchlist,jira_component,jira_component_id,` + query.QueryTestSummer).Group("name,watchlist,jira_component,jira_component_id") + rawQuery = rawQuery.Select(`test_id,name,watchlist,jira_component,jira_component_id,` + query.QueryTestSummer).Group("test_id,name,watchlist,jira_component,jira_component_id") } else { rawQuery = query.TestsByNURPAndStandardDeviation(dbc, release, table) variantSelect = "suite_name, variants," + @@ -210,9 +210,8 @@ func BuildTestsResults(dbc *db.DB, release, period string, collapse, includeOver } testReports := make([]apitype.Test, 0) - // FIXME: Add test id to matview, for now generate with ROW_NUMBER OVER processedResults := dbc.DB.Table("(?) as results", rawQuery). - Select(`ROW_NUMBER() OVER() as id, watchlist, name, jira_component, jira_component_id,` + variantSelect + query.QueryTestSummarizer). + Select(`ROW_NUMBER() OVER() as id, test_id, watchlist, name, jira_component, jira_component_id,` + variantSelect + query.QueryTestSummarizer). Where("current_runs > 0 or previous_runs > 0") finalResults := dbc.DB.Table("(?) as final_results", processedResults) diff --git a/pkg/apis/api/types.go b/pkg/apis/api/types.go index 429be3b87..8953ff81c 100644 --- a/pkg/apis/api/types.go +++ b/pkg/apis/api/types.go @@ -452,6 +452,7 @@ func (run JobRun) GetArrayValue(param string) ([]string, error) { // of this struct is suitable for use in a data table. type Test struct { ID int `json:"id,omitempty"` + TestID int `json:"test_id,omitempty"` Name string `json:"name"` SuiteName string `json:"suite_name"` Variant string `json:"variant,omitempty"` diff --git a/pkg/db/db.go b/pkg/db/db.go index 05c28c85b..b0c7f0c00 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -37,7 +37,7 @@ type log2LogrusWriter struct { } func (w log2LogrusWriter) Printf(msg string, args ...interface{}) { - w.entry.Debugf(msg, args...) + w.entry.Infof(msg, args...) } func New(dsn string, logLevel gormlogger.LogLevel) (*DB, error) { diff --git a/pkg/db/matviews.go b/pkg/db/matviews.go index 2f36cb452..0010217a4 100644 --- a/pkg/db/matviews.go +++ b/pkg/db/matviews.go @@ -242,6 +242,7 @@ GROUP BY const testAnalysisByVariantMatView = ` SELECT tests.id AS test_id, + town.unique_id as test_str_id, tests.name AS test_name, tests.watchlist, date(prow_job_runs."timestamp") AS date, @@ -256,15 +257,17 @@ FROM JOIN tests ON tests.id = prow_job_run_tests.test_id JOIN prow_job_runs ON prow_job_runs.id = prow_job_run_tests.prow_job_run_id JOIN prow_jobs ON prow_jobs.id = prow_job_runs.prow_job_id + LEFT JOIN test_ownerships town ON town.test_id = tests.id WHERE prow_job_run_tests.created_at > (|||TIMENOW||| - '14 days'::interval) AND prow_job_runs."timestamp" > (|||TIMENOW||| - '14 days'::interval) GROUP BY - tests.name, tests.id, date(prow_job_runs."timestamp"), unnest(prow_jobs.variants), prow_jobs.release + tests.name, tests.id, town.unique_id, date(prow_job_runs."timestamp"), unnest(prow_jobs.variants), prow_jobs.release ` const testAnalysisByJobMatView = ` SELECT tests.id AS test_id, + town.unique_id as test_str_id, tests.name AS test_name, tests.watchlist, date(prow_job_runs."timestamp") AS date, @@ -279,10 +282,11 @@ FROM JOIN tests ON tests.id = prow_job_run_tests.test_id JOIN prow_job_runs ON prow_job_runs.id = prow_job_run_tests.prow_job_run_id JOIN prow_jobs ON prow_jobs.id = prow_job_runs.prow_job_id + LEFT JOIN test_ownerships town ON town.test_id = tests.id WHERE prow_job_run_tests.created_at > (|||TIMENOW||| - '14 days'::interval) AND prow_job_runs."timestamp" > (|||TIMENOW||| - '14 days'::interval) GROUP BY - tests.name, tests.id, date(prow_job_runs."timestamp"), prow_jobs.release, prow_jobs.name + tests.name, tests.id, town.unique_id, date(prow_job_runs."timestamp"), prow_jobs.release, prow_jobs.name ` const prowJobFailedTestsMatView = ` diff --git a/pkg/db/query/test_queries.go b/pkg/db/query/test_queries.go index 9ccdc14ae..1b96f67e5 100644 --- a/pkg/db/query/test_queries.go +++ b/pkg/db/query/test_queries.go @@ -55,7 +55,7 @@ const ( QueryTestSummarizer = QueryTestFields + "," + QueryTestPercentages - QueryTestAnalysis = "select current_successes, current_runs, current_successes * 100.0 / NULLIF(current_runs, 0) AS current_pass_percentage from ( select sum(runs) as current_runs, sum(passes) as current_successes from prow_test_analysis_by_job_14d_matview where test_name = '%s' AND job_name in (%s))t" + QueryTestAnalysis = "select test_id as id, current_successes, current_runs, current_successes * 100.0 / NULLIF(current_runs, 0) AS current_pass_percentage from ( select test_id, sum(runs) as current_runs, sum(passes) as current_successes from prow_test_analysis_by_job_14d_matview join where test_name = '%s' AND job_name in (%s) GROUP BY test_id)t" ) // TestReportsByVariant returns a test report for every test in the db matching the given substrings, separated by variant.