Fix benchmark artifact parsing.

* Added a extractor to extract raw logs from json format and then pipe
it into benchmark parser.
* Also added -alsologtostderr=false -logtostderr=false to reduce noisy logs.
This commit is contained in:
Cong Liu 2019-11-21 13:20:18 -05:00
parent 27067540ff
commit 016ab0b899
4 changed files with 92 additions and 1 deletions

View File

@ -59,7 +59,8 @@ cd "${GOPATH}/src/k8s.io/kubernetes"
./hack/install-etcd.sh
# Run the benchmark tests and pretty-print the results into a separate file.
make test-integration WHAT="$*" KUBE_TEST_ARGS="-run='XXX' -bench=. -benchmem" \
make test-integration WHAT="$*" KUBE_TEST_ARGS="-run='XXX' -bench=. -benchmem -alsologtostderr=false -logtostderr=false" \
| (go run test/integration/benchmark/extractlog/main.go) \
| tee \
>(prettybench -no-passthrough > "${ARTIFACTS}/BenchmarkResults.txt") \
>(go run test/integration/benchmark/jsonify/main.go "${ARTIFACTS}/BenchmarkResults_benchmark_$(date -u +%Y-%m-%dT%H:%M:%SZ).json" || cat > /dev/null)

View File

@ -39,6 +39,7 @@ filegroup(
"//test/integration/apimachinery:all-srcs",
"//test/integration/apiserver:all-srcs",
"//test/integration/auth:all-srcs",
"//test/integration/benchmark/extractlog:all-srcs",
"//test/integration/benchmark/jsonify:all-srcs",
"//test/integration/client:all-srcs",
"//test/integration/configmap:all-srcs",

View File

@ -0,0 +1,28 @@
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
go_library(
name = "go_default_library",
srcs = ["main.go"],
importpath = "k8s.io/kubernetes/test/integration/benchmark/extractlog",
visibility = ["//visibility:private"],
)
go_binary(
name = "extractlog",
embed = [":go_default_library"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@ -0,0 +1,61 @@
/*
Copyright 2019 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"bufio"
"encoding/json"
"fmt"
"io"
"os"
)
func main() {
err := extractRawLog(os.Stdin)
if err != nil {
panic(err)
}
}
// A json log entry contains keys such as "Time", "Action", "Package" and "Output".
// We are only interested in "Output", which is the raw log.
type jsonLog struct {
Output string `json:"output,omitempty"`
}
// jsonToRawLog converts a single line of json formatted log to raw log.
// If there is an error, it returns the original input.
func jsonToRawLog(line string) (string, error) {
var log jsonLog
if err := json.Unmarshal([]byte(line), &log); err != nil {
return line, err
}
return log.Output, nil
}
func extractRawLog(r io.Reader) error {
scan := bufio.NewScanner(r)
for scan.Scan() {
l, _ := jsonToRawLog(scan.Text())
// Print the raw log to stdout.
fmt.Println(l)
}
if err := scan.Err(); err != nil {
return err
}
return nil
}