mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-02 17:50:39 +00:00
Merge pull request #3000 from weaveworks/benchmark-summary
benchmark report summarization
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/weaveworks/scope/render"
|
||||
"github.com/weaveworks/scope/render/detailed"
|
||||
"github.com/weaveworks/scope/report"
|
||||
"github.com/weaveworks/scope/test/fixture"
|
||||
)
|
||||
@@ -17,7 +18,7 @@ var (
|
||||
benchReportPath = flag.String("bench-report-path", "", "report file, or dir with files, to use for benchmarking (relative to this package)")
|
||||
)
|
||||
|
||||
func readReportFiles(path string) ([]report.Report, error) {
|
||||
func readReportFiles(b *testing.B, path string) []report.Report {
|
||||
reports := []report.Report{}
|
||||
if err := filepath.Walk(path,
|
||||
func(p string, info os.FileInfo, err error) error {
|
||||
@@ -34,69 +35,54 @@ func readReportFiles(path string) ([]report.Report, error) {
|
||||
reports = append(reports, rpt)
|
||||
return nil
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
b.Fatal(err)
|
||||
}
|
||||
return reports, nil
|
||||
return reports
|
||||
}
|
||||
|
||||
func BenchmarkReportUnmarshal(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
if _, err := readReportFiles(*benchReportPath); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
readReportFiles(b, *benchReportPath)
|
||||
}
|
||||
}
|
||||
|
||||
func upgradeReports(reports []report.Report) []report.Report {
|
||||
upgraded := make([]report.Report, len(reports))
|
||||
for i, r := range reports {
|
||||
upgraded[i] = r.Upgrade()
|
||||
}
|
||||
return upgraded
|
||||
}
|
||||
|
||||
func BenchmarkReportUpgrade(b *testing.B) {
|
||||
reports := readReportFiles(b, *benchReportPath)
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
upgradeReports(reports)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkReportMerge(b *testing.B) {
|
||||
reports, err := readReportFiles(*benchReportPath)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
reports := upgradeReports(readReportFiles(b, *benchReportPath))
|
||||
merger := NewSmartMerger()
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
merger.Merge(reports)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkReportUpgrade(b *testing.B) {
|
||||
reports, err := readReportFiles(*benchReportPath)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
func getReport(b *testing.B) report.Report {
|
||||
r := fixture.Report
|
||||
if *benchReportPath != "" {
|
||||
r = NewSmartMerger().Merge(upgradeReports(readReportFiles(b, *benchReportPath)))
|
||||
}
|
||||
r := NewSmartMerger().Merge(reports)
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
r.Upgrade()
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkTopologyList(b *testing.B) {
|
||||
benchmarkRender(b, func(report report.Report) {
|
||||
request := &http.Request{
|
||||
Form: url.Values{},
|
||||
}
|
||||
topologyRegistry.renderTopologies(report, request)
|
||||
})
|
||||
return r
|
||||
}
|
||||
|
||||
func benchmarkRender(b *testing.B, f func(report.Report)) {
|
||||
r := fixture.Report
|
||||
if *benchReportPath != "" {
|
||||
reports, err := readReportFiles(*benchReportPath)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
r = NewSmartMerger().Merge(reports)
|
||||
}
|
||||
|
||||
r := getReport(b)
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
b.StopTimer()
|
||||
render.ResetCache()
|
||||
@@ -105,32 +91,72 @@ func benchmarkRender(b *testing.B, f func(report.Report)) {
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkTopologyHosts(b *testing.B) {
|
||||
benchmarkOneTopology(b, "hosts")
|
||||
func renderForTopology(b *testing.B, topologyID string, report report.Report) report.Nodes {
|
||||
renderer, filter, err := topologyRegistry.RendererForTopology(topologyID, url.Values{}, report)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
return render.Render(report, renderer, filter).Nodes
|
||||
}
|
||||
|
||||
func BenchmarkTopologyControllers(b *testing.B) {
|
||||
benchmarkOneTopology(b, "kube-controllers")
|
||||
}
|
||||
|
||||
func BenchmarkTopologyPods(b *testing.B) {
|
||||
benchmarkOneTopology(b, "pods")
|
||||
}
|
||||
|
||||
func BenchmarkTopologyContainers(b *testing.B) {
|
||||
benchmarkOneTopology(b, "containers")
|
||||
}
|
||||
|
||||
func BenchmarkTopologyProcesses(b *testing.B) {
|
||||
benchmarkOneTopology(b, "processes")
|
||||
}
|
||||
|
||||
func benchmarkOneTopology(b *testing.B, topologyID string) {
|
||||
func benchmarkRenderTopology(b *testing.B, topologyID string) {
|
||||
benchmarkRender(b, func(report report.Report) {
|
||||
renderer, filter, err := topologyRegistry.RendererForTopology(topologyID, url.Values{}, report)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
render.Render(report, renderer, filter)
|
||||
renderForTopology(b, topologyID, report)
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkRenderList(b *testing.B) {
|
||||
benchmarkRender(b, func(report report.Report) {
|
||||
topologyRegistry.renderTopologies(report, &http.Request{Form: url.Values{}})
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkRenderHosts(b *testing.B) {
|
||||
benchmarkRenderTopology(b, "hosts")
|
||||
}
|
||||
|
||||
func BenchmarkRenderControllers(b *testing.B) {
|
||||
benchmarkRenderTopology(b, "kube-controllers")
|
||||
}
|
||||
|
||||
func BenchmarkRenderPods(b *testing.B) {
|
||||
benchmarkRenderTopology(b, "pods")
|
||||
}
|
||||
|
||||
func BenchmarkRenderContainers(b *testing.B) {
|
||||
benchmarkRenderTopology(b, "containers")
|
||||
}
|
||||
|
||||
func BenchmarkRenderProcesses(b *testing.B) {
|
||||
benchmarkRenderTopology(b, "processes")
|
||||
}
|
||||
|
||||
func benchmarkSummarizeTopology(b *testing.B, topologyID string) {
|
||||
r := getReport(b)
|
||||
rc := report.RenderContext{Report: r}
|
||||
nodes := renderForTopology(b, topologyID, r)
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
detailed.Summaries(rc, nodes)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkSummarizeHosts(b *testing.B) {
|
||||
benchmarkSummarizeTopology(b, "hosts")
|
||||
}
|
||||
|
||||
func BenchmarkSummarizeControllers(b *testing.B) {
|
||||
benchmarkSummarizeTopology(b, "kube-controllers")
|
||||
}
|
||||
|
||||
func BenchmarkSummarizePods(b *testing.B) {
|
||||
benchmarkSummarizeTopology(b, "pods")
|
||||
}
|
||||
|
||||
func BenchmarkSummarizeContainers(b *testing.B) {
|
||||
benchmarkSummarizeTopology(b, "containers")
|
||||
}
|
||||
|
||||
func BenchmarkSummarizeProcesses(b *testing.B) {
|
||||
benchmarkSummarizeTopology(b, "processes")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user