prow/spyglass/lenses/buildlog/lens.go
func (lens Lens) Body(artifacts []lenses.Artifact, resourceDir string, data string) string {
	buildLogsView := BuildLogsView{
		LogViews:           []LogArtifactView{},
		RawGetAllRequests:  make(map[string]string),
		RawGetMoreRequests: make(map[string]string),
	}

	// Read log artifacts and construct template structs
	for _, a := range artifacts {
		av := LogArtifactView{
			ArtifactName: a.JobPath(),
			ArtifactLink: a.CanonicalLink(),
		}
		lines, err := logLinesAll(a)
		if err != nil {
			logrus.WithError(err).Info("Error reading log.")
			continue
		}
		av.LineGroups = groupLines(highlightLines(lines, 0))
		av.ViewAll = true
		buildLogsView.LogViews = append(buildLogsView.LogViews, av)
	}

	return executeTemplate(resourceDir, "body", buildLogsView)
}
func (lens Lens) Body(artifacts []lenses.Artifact, resourceDir string, data string) string {
	buildLogsView := BuildLogsView{
		LogViews:           []LogArtifactView{},
		RawGetAllRequests:  make(map[string]string),
		RawGetMoreRequests: make(map[string]string),
	}

	// Read log artifacts and construct template structs
	for _, a := range artifacts {
		av := LogArtifactView{
			ArtifactName: a.JobPath(),
			ArtifactLink: a.CanonicalLink(),
		}
		lines, err := logLinesAll(a)
		if err != nil {
			logrus.WithError(err).Info("Error reading log.")
			continue
		}
		av.LineGroups = groupLines(highlightLines(lines, 0))
		av.ViewAll = true
		buildLogsView.LogViews = append(buildLogsView.LogViews, av)
	}

	return executeTemplate(resourceDir, "body", buildLogsView)
}
// Body returns the <body> content for a build log (or multiple build logs)