Allow summaries to be printed out to ReportDir instead of stdout
This commit is contained in:
		@@ -20,6 +20,8 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
						"path"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
@@ -89,6 +91,7 @@ type Framework struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type TestDataSummary interface {
 | 
					type TestDataSummary interface {
 | 
				
			||||||
 | 
						SummaryKind() string
 | 
				
			||||||
	PrintHumanReadable() string
 | 
						PrintHumanReadable() string
 | 
				
			||||||
	PrintJSON() string
 | 
						PrintJSON() string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -317,17 +320,33 @@ func (f *Framework) AfterEach() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	outputTypes := strings.Split(TestContext.OutputPrintType, ",")
 | 
						outputTypes := strings.Split(TestContext.OutputPrintType, ",")
 | 
				
			||||||
 | 
						now := time.Now()
 | 
				
			||||||
	for _, printType := range outputTypes {
 | 
						for _, printType := range outputTypes {
 | 
				
			||||||
		switch printType {
 | 
							switch printType {
 | 
				
			||||||
		case "hr":
 | 
							case "hr":
 | 
				
			||||||
			for i := range summaries {
 | 
								for i := range summaries {
 | 
				
			||||||
 | 
									if TestContext.ReportDir == "" {
 | 
				
			||||||
					Logf(summaries[i].PrintHumanReadable())
 | 
										Logf(summaries[i].PrintHumanReadable())
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										// TODO: learn to extract test name and append it to the kind instead of timestamp.
 | 
				
			||||||
 | 
										filePath := path.Join(TestContext.ReportDir, summaries[i].SummaryKind()+now.Format(time.RFC3339)+".txt")
 | 
				
			||||||
 | 
										if err := ioutil.WriteFile(filePath, []byte(summaries[i].PrintHumanReadable()), 0644); err != nil {
 | 
				
			||||||
 | 
											Logf("Failed to write file %v with test performance data: %v", filePath, err)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		case "json":
 | 
							case "json":
 | 
				
			||||||
			for i := range summaries {
 | 
								for i := range summaries {
 | 
				
			||||||
				typeName := reflect.TypeOf(summaries[i]).String()
 | 
									if TestContext.ReportDir == "" {
 | 
				
			||||||
				Logf("%v JSON\n%v", typeName[strings.LastIndex(typeName, ".")+1:], summaries[i].PrintJSON())
 | 
										Logf("%v JSON\n%v", summaries[i].SummaryKind(), summaries[i].PrintJSON())
 | 
				
			||||||
					Logf("Finished")
 | 
										Logf("Finished")
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										// TODO: learn to extract test name and append it to the kind instead of timestamp.
 | 
				
			||||||
 | 
										filePath := path.Join(TestContext.ReportDir, summaries[i].SummaryKind()+now.Format(time.RFC3339)+".json")
 | 
				
			||||||
 | 
										if err := ioutil.WriteFile(filePath, []byte(summaries[i].PrintJSON()), 0644); err != nil {
 | 
				
			||||||
 | 
											Logf("Failed to write file %v with test performance data: %v", filePath, err)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			Logf("Unknown output type: %v. Skipping.", printType)
 | 
								Logf("Unknown output type: %v. Skipping.", printType)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,6 +104,10 @@ func (s *LogsSizeDataSummary) PrintJSON() string {
 | 
				
			|||||||
	return PrettyPrintJSON(*s)
 | 
						return PrettyPrintJSON(*s)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s *LogsSizeDataSummary) SummaryKind() string {
 | 
				
			||||||
 | 
						return "LogSizeSummary"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type LogsSizeData struct {
 | 
					type LogsSizeData struct {
 | 
				
			||||||
	data LogSizeDataTimeseries
 | 
						data LogSizeDataTimeseries
 | 
				
			||||||
	lock sync.Mutex
 | 
						lock sync.Mutex
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,6 +105,10 @@ func (m *MetricsForE2E) PrintJSON() string {
 | 
				
			|||||||
	return PrettyPrintJSON(*m)
 | 
						return PrettyPrintJSON(*m)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *MetricsForE2E) SummaryKind() string {
 | 
				
			||||||
 | 
						return "MetricsForE2E"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var InterestingApiServerMetrics = []string{
 | 
					var InterestingApiServerMetrics = []string{
 | 
				
			||||||
	"apiserver_request_count",
 | 
						"apiserver_request_count",
 | 
				
			||||||
	"apiserver_request_latencies_summary",
 | 
						"apiserver_request_latencies_summary",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,6 +70,10 @@ func (s *ResourceUsageSummary) PrintJSON() string {
 | 
				
			|||||||
	return PrettyPrintJSON(*s)
 | 
						return PrettyPrintJSON(*s)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s *ResourceUsageSummary) SummaryKind() string {
 | 
				
			||||||
 | 
						return "ResourceUsageSummary"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func computePercentiles(timeSeries []ResourceUsagePerContainer, percentilesToCompute []int) map[int]ResourceUsagePerContainer {
 | 
					func computePercentiles(timeSeries []ResourceUsagePerContainer, percentilesToCompute []int) map[int]ResourceUsagePerContainer {
 | 
				
			||||||
	if len(timeSeries) == 0 {
 | 
						if len(timeSeries) == 0 {
 | 
				
			||||||
		return make(map[int]ResourceUsagePerContainer)
 | 
							return make(map[int]ResourceUsagePerContainer)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user