add labels to perf dataset

This commit is contained in:
Zhou Fang 2016-08-18 14:09:31 -07:00
parent f82746e038
commit 58495b5214
5 changed files with 29 additions and 44 deletions

View File

@ -78,27 +78,20 @@ func PrintPerfData(p *perftype.PerfData) {
// Notice that this function only cares about memory usage, because cpu usage information will be extracted from NodesCPUSummary.
func ResourceUsageToPerfDataWithLabels(usagePerNode ResourceUsagePerNode, labels map[string]string) *perftype.PerfData {
items := []perftype.DataItem{}
for node, usages := range usagePerNode {
for _, usages := range usagePerNode {
for c, usage := range usages {
newLabels := map[string]string{
"node": node,
"container": c,
"resource": "memory",
}
if labels != nil {
for k, v := range labels {
newLabels[k] = v
}
}
item := perftype.DataItem{
Data: map[string]float64{
"memory": float64(usage.MemoryUsageInBytes) / (1024 * 1024),
"workingset": float64(usage.MemoryWorkingSetInBytes) / (1024 * 1024),
"rss": float64(usage.MemoryRSSInBytes) / (1024 * 1024),
},
Unit: "MB",
Labels: newLabels,
Unit: "MB",
Labels: map[string]string{
"container": c,
"datatype": "resource",
"resource": "memory",
},
}
items = append(items, item)
}
@ -106,34 +99,28 @@ func ResourceUsageToPerfDataWithLabels(usagePerNode ResourceUsagePerNode, labels
return &perftype.PerfData{
Version: currentKubeletPerfMetricsVersion,
DataItems: items,
Labels: labels,
}
}
// CPUUsageToPerfDataWithLabels transforms NodesCPUSummary to PerfData with additional labels.
func CPUUsageToPerfDataWithLabels(usagePerNode NodesCPUSummary, labels map[string]string) *perftype.PerfData {
items := []perftype.DataItem{}
for node, usages := range usagePerNode {
for _, usages := range usagePerNode {
for c, usage := range usages {
newLabels := map[string]string{
"node": node,
"container": c,
"resource": "cpu",
}
if labels != nil {
for k, v := range labels {
newLabels[k] = v
}
}
data := map[string]float64{}
for perc, value := range usage {
data[fmt.Sprintf("Perc%02.0f", perc*100)] = value * 1000
}
item := perftype.DataItem{
Data: data,
Unit: "mCPU",
Labels: newLabels,
Data: data,
Unit: "mCPU",
Labels: map[string]string{
"container": c,
"datatype": "resource",
"resource": "cpu",
},
}
items = append(items, item)
}
@ -141,5 +128,6 @@ func CPUUsageToPerfDataWithLabels(usagePerNode NodesCPUSummary, labels map[strin
return &perftype.PerfData{
Version: currentKubeletPerfMetricsVersion,
DataItems: items,
Labels: labels,
}
}

View File

@ -31,7 +31,7 @@ type DataItem struct {
// should have the same unit.
Unit string `json:"unit"`
// Labels is the labels of the data item.
Labels map[string]string `json:"labels"`
Labels map[string]string `json:"labels,omitempty"`
}
// PerfData contains all data items generated in current test.
@ -40,6 +40,8 @@ type PerfData struct {
// to detect metrics version change and decide what version to support.
Version string `json:"version"`
DataItems []DataItem `json:"dataItems"`
// Labels is the labels of the dataset.
Labels map[string]string `json:"labels,omitempty"`
}
// PerfResultTag is the prefix of generated perfdata. Analyzing tools can find the perf result

View File

@ -45,9 +45,8 @@ type NodeTimeSeries struct {
func logDensityTimeSeries(rc *ResourceCollector, create, watch map[string]unversioned.Time, testName string) {
timeSeries := &NodeTimeSeries{
Labels: map[string]string{
"node": framework.TestContext.NodeName,
"datatype": "timeseries",
"test": testName,
"node": framework.TestContext.NodeName,
"test": testName,
},
Version: currentTimeSeriesVersion,
}
@ -94,10 +93,12 @@ func getLatencyPerfData(latency framework.LatencyMetric, testName string) *perft
Labels: map[string]string{
"datatype": "latency",
"latencytype": "test-e2e",
"node": framework.TestContext.NodeName,
"test": testName,
},
},
},
Labels: map[string]string{
"node": framework.TestContext.NodeName,
"test": testName,
},
}
}

View File

@ -241,7 +241,7 @@ type densityTest struct {
}
func (dt *densityTest) getTestName() string {
return fmt.Sprintf("create_%s_%d_%d_%d", dt.createMethod, dt.podsNr, dt.bgPodsNr, dt.interval.Nanoseconds()/1000000)
return fmt.Sprintf("density_create_%s_%d_%d_%d", dt.createMethod, dt.podsNr, dt.bgPodsNr, dt.interval.Nanoseconds()/1000000)
}
// runDensityBatchTest runs the density batch pod creation test

View File

@ -194,15 +194,9 @@ func logAndVerifyResource(f *framework.Framework, rc *ResourceCollector, cpuLimi
// Print resource usage
framework.PrintPerfData(framework.ResourceUsageToPerfDataWithLabels(usagePerNode,
map[string]string{
"datatype": "resource",
"test": testName,
}))
map[string]string{"test": testName, "node": nodeName}))
framework.PrintPerfData(framework.CPUUsageToPerfDataWithLabels(cpuSummaryPerNode,
map[string]string{
"datatype": "resource",
"test": testName,
}))
map[string]string{"test": testName, "node": nodeName}))
// Verify resource usage
if isVerify {