in compare/src/scraper.go [39:104]
func ProcessSingleTest(scanner *bufio.Scanner, buildNumber int) (map[string]*e2e.LogsSizeDataSummary, map[string]*e2e.ResourceUsageSummary, map[string]*e2e.MetricsForE2E) {
buff := &bytes.Buffer{}
logSummary := make(map[string]*e2e.LogsSizeDataSummary)
resourceSummary := make(map[string]*e2e.ResourceUsageSummary)
metricsSummary := make(map[string]*e2e.MetricsForE2E)
state := defaultState
oldTestSeparator := "[It] [Performance] "
testSeparator := "[It] [Feature:Performance] "
testName := ""
for scanner.Scan() {
line := scanner.Text()
if state == defaultState {
separator := ""
if strings.Contains(line, testSeparator) {
separator = testSeparator
} else if strings.Contains(line, oldTestSeparator) {
separator = oldTestSeparator
}
if separator != "" {
testName = strings.Trim(strings.Split(line, separator)[1], " ")
buff.Reset()
}
}
if strings.Contains(line, "Finished") {
if state == readingLogs {
logSummary[testName] = &e2e.LogsSizeDataSummary{}
state = defaultState
if err := json.Unmarshal(buff.Bytes(), logSummary[testName]); err != nil {
glog.V(0).Infof("error parsing LogsSizeDataSummary JSON in build %d: %v %s\n", buildNumber, err, buff.String())
continue
}
}
if state == readingResources {
resourceSummary[testName] = &e2e.ResourceUsageSummary{}
state = defaultState
if err := json.Unmarshal(buff.Bytes(), resourceSummary[testName]); err != nil {
glog.V(0).Infof("error parsing ResourceUsageSummary JSON in build %d: %v %s\n", buildNumber, err, buff.String())
continue
}
}
if state == readingMetrics {
metricsSummary[testName] = &e2e.MetricsForE2E{}
state = defaultState
if err := json.Unmarshal(buff.Bytes(), metricsSummary[testName]); err != nil {
glog.V(0).Infof("error parsing MetricsForE2E JSON in build %d: %v %s\n", buildNumber, err, buff.String())
continue
}
}
buff.Reset()
}
if state != defaultState {
dataStartIndex := strings.Index(line, "]")
buff.WriteString(line[dataStartIndex+1:] + " ")
}
if strings.Contains(line, "LogsSizeDataSummary JSON") {
state = readingLogs
}
if strings.Contains(line, "ResourceUsageSummary JSON") {
state = readingResources
}
if strings.Contains(line, "MetricsForE2E JSON") {
state = readingMetrics
}
}
return logSummary, resourceSummary, metricsSummary
}