analyze: updates from proto update

This commit is contained in:
Gyu-Ho Lee 2017-02-23 08:03:59 -08:00
parent 338300df74
commit b990bf44bd
No known key found for this signature in database
GPG Key ID: 1DDD39C7EB70C24C
2 changed files with 60 additions and 119 deletions

View File

@ -16,9 +16,9 @@ package analyze
import ( import (
"fmt" "fmt"
"image/color"
"github.com/coreos/dbtester" "github.com/coreos/dbtester/dbtesterpb"
"github.com/gonum/plot" "github.com/gonum/plot"
"github.com/gonum/plot/plotter" "github.com/gonum/plot/plotter"
"github.com/gonum/plot/plotutil" "github.com/gonum/plot/plotutil"
@ -49,7 +49,7 @@ type triplet struct {
maxCol dataframe.Column maxCol dataframe.Column
} }
func (all *allAggregatedData) draw(cfg dbtester.Plot, pairs ...pair) error { func (all *allAggregatedData) draw(cfg dbtesterpb.ConfigAnalyzeMachinePlot, pairs ...pair) error {
// frame now contains // frame now contains
// AVG-LATENCY-MS-etcd-v3.1-go1.7.4, AVG-LATENCY-MS-zookeeper-r3.4.9-java8, AVG-LATENCY-MS-consul-v0.7.2-go1.7.4 // AVG-LATENCY-MS-etcd-v3.1-go1.7.4, AVG-LATENCY-MS-zookeeper-r3.4.9-java8, AVG-LATENCY-MS-consul-v0.7.2-go1.7.4
plt, err := plot.New() plt, err := plot.New()
@ -72,7 +72,7 @@ func (all *allAggregatedData) draw(cfg dbtester.Plot, pairs ...pair) error {
if err != nil { if err != nil {
return err return err
} }
l.Color = getRGB(all.headerToDatabaseID[p.y.Header()], i) l.Color = dbtesterpb.GetRGBI(all.headerToDatabaseID[p.y.Header()], i)
l.Dashes = plotutil.Dashes(i) l.Dashes = plotutil.Dashes(i)
ps = append(ps, l) ps = append(ps, l)
@ -88,7 +88,7 @@ func (all *allAggregatedData) draw(cfg dbtester.Plot, pairs ...pair) error {
return nil return nil
} }
func (all *allAggregatedData) drawXY(cfg dbtester.Plot, pairs ...pair) error { func (all *allAggregatedData) drawXY(cfg dbtesterpb.ConfigAnalyzeMachinePlot, pairs ...pair) error {
// frame now contains // frame now contains
// KEYS-DB-TAG-X, AVG-LATENCY-MS-DB-TAG-Y, ... // KEYS-DB-TAG-X, AVG-LATENCY-MS-DB-TAG-Y, ...
plt, err := plot.New() plt, err := plot.New()
@ -111,7 +111,7 @@ func (all *allAggregatedData) drawXY(cfg dbtester.Plot, pairs ...pair) error {
if err != nil { if err != nil {
return err return err
} }
l.Color = getRGB(all.headerToDatabaseID[p.y.Header()], i) l.Color = dbtesterpb.GetRGBI(all.headerToDatabaseID[p.y.Header()], i)
l.Dashes = plotutil.Dashes(i) l.Dashes = plotutil.Dashes(i)
ps = append(ps, l) ps = append(ps, l)
@ -127,7 +127,7 @@ func (all *allAggregatedData) drawXY(cfg dbtester.Plot, pairs ...pair) error {
return nil return nil
} }
func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtester.Plot, triplets ...triplet) error { func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtesterpb.ConfigAnalyzeMachinePlot, triplets ...triplet) error {
// frame now contains // frame now contains
// KEYS-DB-TAG-X, MIN-LATENCY-MS-DB-TAG-Y, AVG-LATENCY-MS-DB-TAG-Y, MAX-LATENCY-MS-DB-TAG-Y, ... // KEYS-DB-TAG-X, MIN-LATENCY-MS-DB-TAG-Y, AVG-LATENCY-MS-DB-TAG-Y, MAX-LATENCY-MS-DB-TAG-Y, ...
plt, err := plot.New() plt, err := plot.New()
@ -150,7 +150,7 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtester.Plot, triplets
if err != nil { if err != nil {
return err return err
} }
l.Color = getRGBII(all.headerToDatabaseID[triplet.avgCol.Header()], i) l.Color = dbtesterpb.GetRGBII(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i) l.Dashes = plotutil.Dashes(i)
ps = append(ps, l) ps = append(ps, l)
plt.Legend.Add(all.headerToDatabaseDescription[triplet.avgCol.Header()]+" MIN", l) plt.Legend.Add(all.headerToDatabaseDescription[triplet.avgCol.Header()]+" MIN", l)
@ -164,7 +164,7 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtester.Plot, triplets
if err != nil { if err != nil {
return err return err
} }
l.Color = getRGB(all.headerToDatabaseID[triplet.avgCol.Header()], i) l.Color = dbtesterpb.GetRGBI(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i) l.Dashes = plotutil.Dashes(i)
ps = append(ps, l) ps = append(ps, l)
plt.Legend.Add(all.headerToDatabaseDescription[triplet.avgCol.Header()], l) plt.Legend.Add(all.headerToDatabaseDescription[triplet.avgCol.Header()], l)
@ -178,7 +178,7 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtester.Plot, triplets
if err != nil { if err != nil {
return err return err
} }
l.Color = getRGBIII(all.headerToDatabaseID[triplet.avgCol.Header()], i) l.Color = dbtesterpb.GetRGBIII(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i) l.Dashes = plotutil.Dashes(i)
ps = append(ps, l) ps = append(ps, l)
plt.Legend.Add(all.headerToDatabaseDescription[triplet.avgCol.Header()]+" MAX", l) plt.Legend.Add(all.headerToDatabaseDescription[triplet.avgCol.Header()]+" MAX", l)
@ -244,63 +244,3 @@ func pointsXY(colX, colY dataframe.Column) (plotter.XYs, error) {
} }
return pts, nil return pts, nil
} }
func getRGB(databaseID string, i int) color.Color {
switch databaseID {
case "etcdv2":
return color.RGBA{218, 97, 229, 255} // purple
case "etcdv3":
return color.RGBA{24, 90, 169, 255} // blue
case "etcdtip":
return color.RGBA{0, 229, 255, 255} // cyan
case "zookeeper":
return color.RGBA{38, 169, 24, 255} // green
case "consul":
return color.RGBA{198, 53, 53, 255} // red
case "zetcd":
return color.RGBA{251, 206, 0, 255} // yellow
case "cetcd":
return color.RGBA{205, 220, 57, 255} // lime
}
return plotutil.Color(i)
}
func getRGBII(databaseID string, i int) color.Color {
switch databaseID {
case "etcdv2":
return color.RGBA{229, 212, 231, 255} // light-purple
case "etcdv3":
return color.RGBA{129, 212, 247, 255} // light-blue
case "etcdtip":
return color.RGBA{132, 255, 255, 255} // light-cyan
case "zookeeper":
return color.RGBA{129, 247, 152, 255} // light-green
case "consul":
return color.RGBA{247, 156, 156, 255} // light-red
case "zetcd":
return color.RGBA{245, 247, 166, 255} // light-yellow
case "cetcd":
return color.RGBA{238, 255, 65, 255} // light-lime
}
return plotutil.Color(i)
}
func getRGBIII(databaseID string, i int) color.Color {
switch databaseID {
case "etcdv2":
return color.RGBA{165, 8, 180, 255} // deep-purple
case "etcdv3":
return color.RGBA{37, 29, 191, 255} // deep-blue
case "etcdtip":
return color.RGBA{0, 96, 100, 255} // deep-cyan
case "zookeeper":
return color.RGBA{7, 64, 35, 255} // deep-green
case "consul":
return color.RGBA{212, 8, 46, 255} // deep-red
case "zetcd":
return color.RGBA{229, 255, 0, 255} // deep-yellow
case "cetcd":
return color.RGBA{205, 220, 57, 255} // deep-lime
}
return plotutil.Color(i)
}

View File

@ -25,6 +25,7 @@ import (
"strings" "strings"
"github.com/coreos/dbtester" "github.com/coreos/dbtester"
"github.com/coreos/dbtester/dbtesterpb"
humanize "github.com/dustin/go-humanize" humanize "github.com/dustin/go-humanize"
"github.com/gyuho/dataframe" "github.com/gyuho/dataframe"
"github.com/olekukonko/tablewriter" "github.com/olekukonko/tablewriter"
@ -64,14 +65,14 @@ func do(configPath string) error {
all := &allAggregatedData{ all := &allAggregatedData{
title: cfg.TestTitle, title: cfg.TestTitle,
data: make([]*analyzeData, 0, len(cfg.DatabaseIDToTestData)), data: make([]*analyzeData, 0, len(cfg.DatabaseIDToConfigAnalyzeMachineInitial)),
headerToDatabaseID: make(map[string]string), headerToDatabaseID: make(map[string]string),
headerToDatabaseDescription: make(map[string]string), headerToDatabaseDescription: make(map[string]string),
allDatabaseIDList: cfg.AllDatabaseIDList, allDatabaseIDList: cfg.AllDatabaseIDList,
} }
for _, databaseID := range cfg.AllDatabaseIDList { for _, databaseID := range cfg.AllDatabaseIDList {
testgroup := cfg.DatabaseIDToTestGroup[databaseID] testgroup := cfg.DatabaseIDToConfigClientMachineAgentControl[databaseID]
testdata := cfg.DatabaseIDToTestData[databaseID] testdata := cfg.DatabaseIDToConfigAnalyzeMachineInitial[databaseID]
plog.Printf("reading system metrics data for %s", databaseID) plog.Printf("reading system metrics data for %s", databaseID)
ad, err := readSystemMetricsAll(testdata.ServerSystemMetricsInterpolatedPathList...) ad, err := readSystemMetricsAll(testdata.ServerSystemMetricsInterpolatedPathList...)
@ -88,7 +89,7 @@ func do(configPath string) error {
if err = ad.importBenchMetrics(testdata.ClientLatencyThroughputTimeseriesPath); err != nil { if err = ad.importBenchMetrics(testdata.ClientLatencyThroughputTimeseriesPath); err != nil {
return err return err
} }
if err = ad.aggregateAll(testdata.ServerMemoryByKeyNumberPath, testdata.ServerReadBytesDeltaByKeyNumberPath, testdata.ServerWriteBytesDeltaByKeyNumberPath, testgroup.RequestNumber); err != nil { if err = ad.aggregateAll(testdata.ServerMemoryByKeyNumberPath, testdata.ServerReadBytesDeltaByKeyNumberPath, testdata.ServerWriteBytesDeltaByKeyNumberPath, testgroup.ConfigClientMachineBenchmarkOptions.RequestNumber); err != nil {
return err return err
} }
if err = ad.save(); err != nil { if err = ad.save(); err != nil {
@ -114,7 +115,7 @@ func do(configPath string) error {
// per database // per database
for _, col := range ad.aggregated.Columns() { for _, col := range ad.aggregated.Columns() {
databaseID := all.headerToDatabaseID[col.Header()] databaseID := all.headerToDatabaseID[col.Header()]
row00Header = append(row00Header, cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag) row00Header = append(row00Header, cfg.DatabaseIDToConfigClientMachineAgentControl[databaseID].DatabaseTag)
break break
} }
} }
@ -272,14 +273,14 @@ func do(configPath string) error {
databaseIDToErrs := make(map[string][]string) databaseIDToErrs := make(map[string][]string)
for i, databaseID := range cfg.AllDatabaseIDList { for i, databaseID := range cfg.AllDatabaseIDList {
testgroup := cfg.DatabaseIDToTestGroup[databaseID] testgroup := cfg.DatabaseIDToConfigClientMachineAgentControl[databaseID]
testdata := cfg.DatabaseIDToTestData[databaseID] testdata := cfg.DatabaseIDToConfigAnalyzeMachineInitial[databaseID]
tag := testdata.DatabaseTag tag := testdata.DatabaseTag
if tag != row00Header[i+1] { if tag != row00Header[i+1] {
return fmt.Errorf("analyze config has different order; expected %q, got %q", row00Header[i+1], tag) return fmt.Errorf("analyze config has different order; expected %q, got %q", row00Header[i+1], tag)
} }
row02TotalRequestNumber = append(row02TotalRequestNumber, humanize.Comma(testgroup.RequestNumber)) row02TotalRequestNumber = append(row02TotalRequestNumber, humanize.Comma(testgroup.ConfigClientMachineBenchmarkOptions.RequestNumber))
{ {
fr, err := dataframe.NewFromCSV(nil, testdata.ClientSystemMetricsInterpolatedPath) fr, err := dataframe.NewFromCSV(nil, testdata.ClientSystemMetricsInterpolatedPath)
@ -515,7 +516,7 @@ func do(configPath string) error {
} }
} }
plog.Printf("saving summary data to %q", cfg.Analyze.AllAggregatedOutputPathCSV) plog.Printf("saving summary data to %q", cfg.ConfigAnalyzeMachineAllAggregatedOutput.AllAggregatedOutputPathCSV)
aggRowsForSummaryCSV := [][]string{ aggRowsForSummaryCSV := [][]string{
row00Header, row00Header,
row01TotalSeconds, row01TotalSeconds,
@ -559,7 +560,7 @@ func do(configPath string) error {
row29SectorsWrittenDeltaSum, row29SectorsWrittenDeltaSum,
row30AvgDiskSpaceUsage, row30AvgDiskSpaceUsage,
} }
file, err := openToOverwrite(cfg.Analyze.AllAggregatedOutputPathCSV) file, err := openToOverwrite(cfg.ConfigAnalyzeMachineAllAggregatedOutput.AllAggregatedOutputPathCSV)
if err != nil { if err != nil {
return err return err
} }
@ -573,7 +574,7 @@ func do(configPath string) error {
return err return err
} }
plog.Printf("saving summary data to %q", cfg.Analyze.AllAggregatedOutputPathTXT) plog.Printf("saving summary data to %q", cfg.ConfigAnalyzeMachineAllAggregatedOutput.AllAggregatedOutputPathTXT)
aggRowsForSummaryTXT := [][]string{ aggRowsForSummaryTXT := [][]string{
row00Header, row00Header,
row01TotalSeconds, row01TotalSeconds,
@ -634,7 +635,7 @@ func do(configPath string) error {
if errs != "" { if errs != "" {
stxt += "\n" + "\n" + errs stxt += "\n" + "\n" + errs
} }
if err := toFile(stxt, changeExtToTxt(cfg.Analyze.AllAggregatedOutputPathTXT)); err != nil { if err := toFile(stxt, changeExtToTxt(cfg.ConfigAnalyzeMachineAllAggregatedOutput.AllAggregatedOutputPathTXT)); err != nil {
return err return err
} }
@ -642,7 +643,7 @@ func do(configPath string) error {
plog.Info("combining all latency data by keys") plog.Info("combining all latency data by keys")
allLatencyFrame := dataframe.New() allLatencyFrame := dataframe.New()
for _, databaseID := range cfg.AllDatabaseIDList { for _, databaseID := range cfg.AllDatabaseIDList {
testdata := cfg.DatabaseIDToTestData[databaseID] testdata := cfg.DatabaseIDToConfigAnalyzeMachineInitial[databaseID]
fr, err := dataframe.NewFromCSV(nil, testdata.ClientLatencyByKeyNumberPath) fr, err := dataframe.NewFromCSV(nil, testdata.ClientLatencyByKeyNumberPath)
if err != nil { if err != nil {
@ -688,7 +689,7 @@ func do(configPath string) error {
plog.Info("combining all server memory usage by keys") plog.Info("combining all server memory usage by keys")
allMemoryFrame := dataframe.New() allMemoryFrame := dataframe.New()
for _, databaseID := range cfg.AllDatabaseIDList { for _, databaseID := range cfg.AllDatabaseIDList {
testdata := cfg.DatabaseIDToTestData[databaseID] testdata := cfg.DatabaseIDToConfigAnalyzeMachineInitial[databaseID]
fr, err := dataframe.NewFromCSV(nil, testdata.ServerMemoryByKeyNumberPath) fr, err := dataframe.NewFromCSV(nil, testdata.ServerMemoryByKeyNumberPath)
if err != nil { if err != nil {
@ -734,7 +735,7 @@ func do(configPath string) error {
plog.Info("combining all server read bytes delta by keys") plog.Info("combining all server read bytes delta by keys")
allReadBytesDeltaFrame := dataframe.New() allReadBytesDeltaFrame := dataframe.New()
for _, databaseID := range cfg.AllDatabaseIDList { for _, databaseID := range cfg.AllDatabaseIDList {
testdata := cfg.DatabaseIDToTestData[databaseID] testdata := cfg.DatabaseIDToConfigAnalyzeMachineInitial[databaseID]
fr, err := dataframe.NewFromCSV(nil, testdata.ServerReadBytesDeltaByKeyNumberPath) fr, err := dataframe.NewFromCSV(nil, testdata.ServerReadBytesDeltaByKeyNumberPath)
if err != nil { if err != nil {
@ -771,7 +772,7 @@ func do(configPath string) error {
plog.Info("combining all server write bytes delta by keys") plog.Info("combining all server write bytes delta by keys")
allWriteBytesDeltaFrame := dataframe.New() allWriteBytesDeltaFrame := dataframe.New()
for _, databaseID := range cfg.AllDatabaseIDList { for _, databaseID := range cfg.AllDatabaseIDList {
testdata := cfg.DatabaseIDToTestData[databaseID] testdata := cfg.DatabaseIDToConfigAnalyzeMachineInitial[databaseID]
fr, err := dataframe.NewFromCSV(nil, testdata.ServerWriteBytesDeltaByKeyNumberPath) fr, err := dataframe.NewFromCSV(nil, testdata.ServerWriteBytesDeltaByKeyNumberPath)
if err != nil { if err != nil {
@ -806,14 +807,14 @@ func do(configPath string) error {
} }
{ {
allLatencyFrameCfg := dbtester.Plot{ allLatencyFrameCfg := dbtesterpb.ConfigAnalyzeMachinePlot{
Column: "AVG-LATENCY-MS", Column: "AVG-LATENCY-MS",
XAxis: "Cumulative Number of Keys", XAxis: "Cumulative Number of Keys",
YAxis: "Latency(millisecond) by Keys", YAxis: "Latency(millisecond) by Keys",
OutputPathList: make([]string, len(cfg.PlotList[0].OutputPathList)), OutputPathList: make([]string, len(cfg.AnalyzePlotList[0].OutputPathList)),
} }
allLatencyFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.svg") allLatencyFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.svg")
allLatencyFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.png") allLatencyFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.png")
plog.Printf("plotting %v", allLatencyFrameCfg.OutputPathList) plog.Printf("plotting %v", allLatencyFrameCfg.OutputPathList)
var pairs []pair var pairs []pair
allCols := allLatencyFrame.Columns() allCols := allLatencyFrame.Columns()
@ -835,21 +836,21 @@ func do(configPath string) error {
return err return err
} }
} }
csvPath := filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.csv") csvPath := filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.csv")
if err := newCSV.CSV(csvPath); err != nil { if err := newCSV.CSV(csvPath); err != nil {
return err return err
} }
} }
{ {
// with error points // with error points
allLatencyFrameCfg := dbtester.Plot{ allLatencyFrameCfg := dbtesterpb.ConfigAnalyzeMachinePlot{
Column: "AVG-LATENCY-MS", Column: "AVG-LATENCY-MS",
XAxis: "Cumulative Number of Keys", XAxis: "Cumulative Number of Keys",
YAxis: "Latency(millisecond) by Keys", YAxis: "Latency(millisecond) by Keys",
OutputPathList: make([]string, len(cfg.PlotList[0].OutputPathList)), OutputPathList: make([]string, len(cfg.AnalyzePlotList[0].OutputPathList)),
} }
allLatencyFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg") allLatencyFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg")
allLatencyFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.png") allLatencyFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.png")
plog.Printf("plotting %v", allLatencyFrameCfg.OutputPathList) plog.Printf("plotting %v", allLatencyFrameCfg.OutputPathList)
var triplets []triplet var triplets []triplet
allCols := allLatencyFrame.Columns() allCols := allLatencyFrame.Columns()
@ -879,20 +880,20 @@ func do(configPath string) error {
return err return err
} }
} }
csvPath := filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.csv") csvPath := filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.csv")
if err := newCSV.CSV(csvPath); err != nil { if err := newCSV.CSV(csvPath); err != nil {
return err return err
} }
} }
{ {
allMemoryFrameCfg := dbtester.Plot{ allMemoryFrameCfg := dbtesterpb.ConfigAnalyzeMachinePlot{
Column: "AVG-VMRSS-MB", Column: "AVG-VMRSS-MB",
XAxis: "Cumulative Number of Keys", XAxis: "Cumulative Number of Keys",
YAxis: "Memory(MB) by Keys", YAxis: "Memory(MB) by Keys",
OutputPathList: make([]string, len(cfg.PlotList[0].OutputPathList)), OutputPathList: make([]string, len(cfg.AnalyzePlotList[0].OutputPathList)),
} }
allMemoryFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.svg") allMemoryFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.svg")
allMemoryFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.png") allMemoryFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.png")
plog.Printf("plotting %v", allMemoryFrameCfg.OutputPathList) plog.Printf("plotting %v", allMemoryFrameCfg.OutputPathList)
var pairs []pair var pairs []pair
allCols := allMemoryFrame.Columns() allCols := allMemoryFrame.Columns()
@ -914,21 +915,21 @@ func do(configPath string) error {
return err return err
} }
} }
csvPath := filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.csv") csvPath := filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.csv")
if err := newCSV.CSV(csvPath); err != nil { if err := newCSV.CSV(csvPath); err != nil {
return err return err
} }
} }
{ {
// with error points // with error points
allMemoryFrameCfg := dbtester.Plot{ allMemoryFrameCfg := dbtesterpb.ConfigAnalyzeMachinePlot{
Column: "AVG-VMRSS-MB", Column: "AVG-VMRSS-MB",
XAxis: "Cumulative Number of Keys", XAxis: "Cumulative Number of Keys",
YAxis: "Memory(MB) by Keys", YAxis: "Memory(MB) by Keys",
OutputPathList: make([]string, len(cfg.PlotList[0].OutputPathList)), OutputPathList: make([]string, len(cfg.AnalyzePlotList[0].OutputPathList)),
} }
allMemoryFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg") allMemoryFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg")
allMemoryFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.png") allMemoryFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.png")
plog.Printf("plotting %v", allMemoryFrameCfg.OutputPathList) plog.Printf("plotting %v", allMemoryFrameCfg.OutputPathList)
var triplets []triplet var triplets []triplet
allCols := allMemoryFrame.Columns() allCols := allMemoryFrame.Columns()
@ -958,20 +959,20 @@ func do(configPath string) error {
return err return err
} }
} }
csvPath := filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.csv") csvPath := filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.csv")
if err := newCSV.CSV(csvPath); err != nil { if err := newCSV.CSV(csvPath); err != nil {
return err return err
} }
} }
{ {
allReadBytesDeltaFrameCfg := dbtester.Plot{ allReadBytesDeltaFrameCfg := dbtesterpb.ConfigAnalyzeMachinePlot{
Column: "AVG-READ-BYTES-NUM-DELTA", Column: "AVG-READ-BYTES-NUM-DELTA",
XAxis: "Cumulative Number of Keys", XAxis: "Cumulative Number of Keys",
YAxis: "Average Read Bytes Delta by Keys", YAxis: "Average Read Bytes Delta by Keys",
OutputPathList: make([]string, len(cfg.PlotList[0].OutputPathList)), OutputPathList: make([]string, len(cfg.AnalyzePlotList[0].OutputPathList)),
} }
allReadBytesDeltaFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-READ-BYTES-NUM-DELTA-BY-KEY.svg") allReadBytesDeltaFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-READ-BYTES-NUM-DELTA-BY-KEY.svg")
allReadBytesDeltaFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-READ-BYTES-NUM-DELTA-BY-KEY.png") allReadBytesDeltaFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-READ-BYTES-NUM-DELTA-BY-KEY.png")
plog.Printf("plotting %v", allReadBytesDeltaFrameCfg.OutputPathList) plog.Printf("plotting %v", allReadBytesDeltaFrameCfg.OutputPathList)
var pairs []pair var pairs []pair
allCols := allReadBytesDeltaFrame.Columns() allCols := allReadBytesDeltaFrame.Columns()
@ -984,20 +985,20 @@ func do(configPath string) error {
if err = all.drawXY(allReadBytesDeltaFrameCfg, pairs...); err != nil { if err = all.drawXY(allReadBytesDeltaFrameCfg, pairs...); err != nil {
return err return err
} }
csvPath := filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-READ-BYTES-NUM-DELTA-BY-KEY.csv") csvPath := filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-READ-BYTES-NUM-DELTA-BY-KEY.csv")
if err := allReadBytesDeltaFrame.CSV(csvPath); err != nil { if err := allReadBytesDeltaFrame.CSV(csvPath); err != nil {
return err return err
} }
} }
{ {
allWriteBytesDeltaFrameCfg := dbtester.Plot{ allWriteBytesDeltaFrameCfg := dbtesterpb.ConfigAnalyzeMachinePlot{
Column: "AVG-WRITE-BYTES-NUM-DELTA", Column: "AVG-WRITE-BYTES-NUM-DELTA",
XAxis: "Cumulative Number of Keys", XAxis: "Cumulative Number of Keys",
YAxis: "Average Write Bytes Delta by Keys", YAxis: "Average Write Bytes Delta by Keys",
OutputPathList: make([]string, len(cfg.PlotList[0].OutputPathList)), OutputPathList: make([]string, len(cfg.AnalyzePlotList[0].OutputPathList)),
} }
allWriteBytesDeltaFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-WRITE-BYTES-NUM-DELTA-BY-KEY.svg") allWriteBytesDeltaFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-WRITE-BYTES-NUM-DELTA-BY-KEY.svg")
allWriteBytesDeltaFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-WRITE-BYTES-NUM-DELTA-BY-KEY.png") allWriteBytesDeltaFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-WRITE-BYTES-NUM-DELTA-BY-KEY.png")
plog.Printf("plotting %v", allWriteBytesDeltaFrameCfg.OutputPathList) plog.Printf("plotting %v", allWriteBytesDeltaFrameCfg.OutputPathList)
var pairs []pair var pairs []pair
allCols := allWriteBytesDeltaFrame.Columns() allCols := allWriteBytesDeltaFrame.Columns()
@ -1010,21 +1011,21 @@ func do(configPath string) error {
if err = all.drawXY(allWriteBytesDeltaFrameCfg, pairs...); err != nil { if err = all.drawXY(allWriteBytesDeltaFrameCfg, pairs...); err != nil {
return err return err
} }
csvPath := filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-WRITE-BYTES-NUM-DELTA-BY-KEY.csv") csvPath := filepath.Join(filepath.Dir(cfg.AnalyzePlotList[0].OutputPathList[0]), "AVG-WRITE-BYTES-NUM-DELTA-BY-KEY.csv")
if err := allWriteBytesDeltaFrame.CSV(csvPath); err != nil { if err := allWriteBytesDeltaFrame.CSV(csvPath); err != nil {
return err return err
} }
} }
plog.Println("combining data for plotting") plog.Println("combining data for plotting")
for _, plotConfig := range cfg.PlotList { for _, plotConfig := range cfg.AnalyzePlotList {
plog.Printf("plotting %q", plotConfig.Column) plog.Printf("plotting %q", plotConfig.Column)
var clientNumColumns []dataframe.Column var clientNumColumns []dataframe.Column
var pairs []pair var pairs []pair
var dataColumns []dataframe.Column var dataColumns []dataframe.Column
for i, ad := range all.data { for i, ad := range all.data {
databaseID := all.allDatabaseIDList[i] databaseID := all.allDatabaseIDList[i]
tag := cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag tag := cfg.DatabaseIDToConfigClientMachineAgentControl[databaseID].DatabaseTag
avgCol, err := ad.aggregated.Column("CONTROL-CLIENT-NUM") avgCol, err := ad.aggregated.Column("CONTROL-CLIENT-NUM")
if err != nil { if err != nil {
@ -1076,7 +1077,7 @@ func do(configPath string) error {
return err return err
} }
if len(cfg.DatabaseIDToTestGroup[cfg.AllDatabaseIDList[0]].BenchmarkOptions.ConnectionClientNumbers) > 0 { if len(cfg.DatabaseIDToConfigClientMachineAgentControl[cfg.AllDatabaseIDList[0]].ConfigClientMachineBenchmarkOptions.ConnectionClientNumbers) > 0 {
plog.Printf("aggregating data for %q of all database (by client number)", plotConfig.Column) plog.Printf("aggregating data for %q of all database (by client number)", plotConfig.Column)
nf3 := dataframe.New() nf3 := dataframe.New()
var firstKeys []int var firstKeys []int