func failingTestSummaries()

in pkg/summarizer/summary.go [846:906]


func failingTestSummaries(rows []*statepb.Row, template *configpb.LinkTemplate, gcsPrefix string, columnHeader []*configpb.TestGroup_ColumnHeader) []*summarypb.FailingTestSummary {
	var failures []*summarypb.FailingTestSummary
	for _, row := range rows {
		if row.AlertInfo == nil {
			continue
		}
		alert := row.AlertInfo
		sum := summarypb.FailingTestSummary{
			DisplayName:       row.Name,
			TestName:          row.Id,
			FailBuildId:       alert.FailBuildId,
			LatestFailBuildId: alert.LatestFailBuildId,
			FailCount:         alert.FailCount,
			FailureMessage:    alert.FailureMessage,
			PassBuildId:       alert.PassBuildId,
			// TODO(fejta): better build info
			BuildLink:           alert.BuildLink,
			BuildLinkText:       alert.BuildLinkText,
			BuildUrlText:        alert.BuildUrlText,
			LinkedBugs:          row.Issues,
			FailTestLink:        buildFailLink(alert.FailTestId, row.Id),
			LatestFailTestLink:  buildFailLink(alert.LatestFailTestId, row.Id),
			Properties:          alert.Properties,
			CustomColumnHeaders: alert.CustomColumnHeaders,
			HotlistIds:          alert.HotlistIds,
			EmailAddresses:      alert.EmailAddresses,
		}
		if alert.PassTime != nil {
			sum.PassTimestamp = float64(alert.PassTime.Seconds)
		}
		if alert.FailTime != nil {
			sum.FailTimestamp = float64(alert.FailTime.Seconds)
		}

		propertyToColumnHeader := make(map[string]string)
		for i := 0; i < len(columnHeader); i++ {
			if columnHeader[i].Label != "" {
				propertyToColumnHeader["<custom-"+strconv.Itoa(i)+">"] = columnHeader[i].Label
			} else if columnHeader[i].Property != "" {
				propertyToColumnHeader["<custom-"+strconv.Itoa(i)+">"] = columnHeader[i].Property
			} else {
				propertyToColumnHeader["<custom-"+strconv.Itoa(i)+">"] = columnHeader[i].ConfigurationValue
			}
		}

		// Verify what the links for alerts would be with the new method.
		failLink := testResultLink(template, alert.GetProperties(), alert.GetFailTestId(), row.GetId(), alert.GetFailBuildId(), gcsPrefix, propertyToColumnHeader, alert.CustomColumnHeaders)
		latestFailLink := testResultLink(template, alert.GetProperties(), alert.GetLatestFailTestId(), row.GetId(), alert.GetLatestFailBuildId(), gcsPrefix, propertyToColumnHeader, alert.CustomColumnHeaders)
		log := logrus.WithField("failLink", failLink).WithField("latestFailLink", latestFailLink)
		if failLink == "" || latestFailLink == "" {
			log.Warning("Failed to create failure link.")
		} else if !strings.HasPrefix(failLink, "http") || !strings.HasPrefix(latestFailLink, "http") {
			log.Warning("Failure link does not include scheme.")
		} else {
			log.Info("Created failure links.")
		}

		failures = append(failures, &sum)
	}
	return failures
}