Skip to content

Commit f6e07ed

Browse files
committed
add type, start/end time to segments, constructor for BasicData, get test start/end time from segments
1 parent d90596d commit f6e07ed

File tree

8 files changed

+385
-220
lines changed

8 files changed

+385
-220
lines changed

lib/client/loki.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,15 +171,23 @@ func (lc *LokiClient) extractRawLogEntries(lokiResp LokiResponse) []LokiLogEntry
171171

172172
for _, result := range lokiResp.Data.Result {
173173
for _, entry := range result.Values {
174+
if len(entry) != 2 {
175+
lc.Logger.Error().Interface("Log entry", entry).Msgf("Error parsing log entry. Expected 2 elements, got %d", len(entry))
176+
continue
177+
}
174178
var timestamp string
179+
if entry[0] == nil {
180+
lc.Logger.Error().Msg("Error parsing timestamp. Entry at index 0, that should be a timestamp, is nil")
181+
continue
182+
}
175183
if timestampString, ok := entry[0].(string); ok {
176184
timestamp = timestampString
177185
} else if timestampInt, ok := entry[0].(int); ok {
178186
timestamp = fmt.Sprintf("%d", timestampInt)
179187
} else if timestampFloat, ok := entry[0].(float64); ok {
180188
timestamp = fmt.Sprintf("%f", timestampFloat)
181189
} else {
182-
lc.Logger.Error().Msg("Error parsing timestamp")
190+
lc.Logger.Error().Msgf("Error parsing timestamp. Expected string, int, or float64, got %T", entry[0])
183191
continue
184192
}
185193
logLine := entry[1].(string)

wasp/benchspy/basic.go

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,64 @@ type BasicData struct {
2222
GeneratorConfigs map[string]*wasp.Config `json:"generator_configs"`
2323
}
2424

25+
func MustNewBasicData(commitOrTag string, generators ...*wasp.Generator) BasicData {
26+
b, err := NewBasicData(commitOrTag, generators...)
27+
if err != nil {
28+
panic(err)
29+
}
30+
31+
return *b
32+
}
33+
34+
func NewBasicData(commitOrTag string, generators ...*wasp.Generator) (*BasicData, error) {
35+
if len(generators) == 0 {
36+
return nil, errors.New("at least one generator is required")
37+
}
38+
39+
if generators[0].Cfg.T == nil {
40+
return nil, errors.New("generators are not associated with a testing.T instance. Please set it as generator.Cfg.T and try again")
41+
}
42+
43+
b := &BasicData{
44+
TestName: generators[0].Cfg.T.Name(),
45+
CommitOrTag: commitOrTag,
46+
GeneratorConfigs: make(map[string]*wasp.Config),
47+
}
48+
49+
for _, g := range generators {
50+
b.GeneratorConfigs[g.Cfg.GenName] = g.Cfg
51+
}
52+
53+
return b, nil
54+
}
55+
56+
func (b *BasicData) FillStartEndTimes() error {
57+
earliestTime := time.Now()
58+
var latestTime time.Time
59+
60+
for _, cfg := range b.GeneratorConfigs {
61+
for _, segment := range cfg.Schedule {
62+
if segment.StartTime.IsZero() {
63+
return fmt.Errorf("start time is missing in one of the segments belonging to generator %s. Did that generator run?", cfg.GenName)
64+
}
65+
if segment.StartTime.Before(earliestTime) {
66+
earliestTime = segment.StartTime
67+
}
68+
if segment.EndTime.IsZero() {
69+
return fmt.Errorf("end time is missing in one of the segments belonging to generator %s. Did that generator finish running?", cfg.GenName)
70+
}
71+
if segment.EndTime.After(latestTime) {
72+
latestTime = segment.EndTime
73+
}
74+
}
75+
}
76+
77+
b.TestStart = earliestTime
78+
b.TestEnd = latestTime
79+
80+
return nil
81+
}
82+
2583
func (b *BasicData) Validate() error {
2684
if b.TestStart.IsZero() {
2785
return errors.New("test start time is missing. We cannot query Loki without a time range. Please set it and try again")
@@ -59,8 +117,6 @@ func (b *BasicData) IsComparable(otherData BasicData) error {
59117
}
60118
}
61119

62-
// TODO: would be good to be able to check if Gun and VU are the same, but idk yet how we could do that easily [hash the code?]
63-
64120
return nil
65121
}
66122

@@ -73,6 +129,10 @@ func compareGeneratorConfigs(cfg1, cfg2 *wasp.Config) error {
73129
return fmt.Errorf("schedules are different. Expected %d, got %d", len(cfg1.Schedule), len(cfg2.Schedule))
74130
}
75131

132+
var areSegmentsEqual = func(segment1, segment2 *wasp.Segment) bool {
133+
return segment1.From == segment2.From && segment1.Duration == segment2.Duration && segment1.Type == segment2.Type
134+
}
135+
76136
for i, segment1 := range cfg1.Schedule {
77137
segment2 := cfg2.Schedule[i]
78138
if segment1 == nil {
@@ -81,7 +141,7 @@ func compareGeneratorConfigs(cfg1, cfg2 *wasp.Config) error {
81141
if segment2 == nil {
82142
return fmt.Errorf("schedule at index %d is nil in the other report", i)
83143
}
84-
if *segment1 != *segment2 {
144+
if !areSegmentsEqual(segment1, segment2) {
85145
return fmt.Errorf("schedules at index %d are different. Expected %s, got %s", i, mustMarshallSegment(segment1), mustMarshallSegment(segment2))
86146
}
87147
}

wasp/benchspy/report.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ func (b *StandardReport) Load() error {
2525
}
2626

2727
func (b *StandardReport) FetchData(ctx context.Context) error {
28+
startEndErr := b.BasicData.FillStartEndTimes()
29+
if startEndErr != nil {
30+
return startEndErr
31+
}
32+
2833
basicErr := b.BasicData.Validate()
2934
if basicErr != nil {
3035
return basicErr

wasp/benchspy_test.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,7 @@ func TestBenchSpyWithTwoLokiQueries(t *testing.T) {
141141
require.NoError(t, err)
142142

143143
currentReport := benchspy.StandardReport{
144-
BasicData: benchspy.BasicData{
145-
GeneratorConfigs: map[string]*wasp.Config{
146-
gen.Cfg.GenName: gen.Cfg,
147-
},
148-
TestName: t.Name(),
149-
TestStart: time.Now(),
150-
CommitOrTag: "e7fc5826a572c09f8b93df3b9f674113372ce924",
151-
},
144+
BasicData: benchspy.MustNewBasicData("e7fc5826a572c09f8b93df3b9f674113372ce924", gen),
152145
ResourceReporter: benchspy.ResourceReporter{
153146
ExecutionEnvironment: benchspy.ExecutionEnvironment_Docker,
154147
},
@@ -164,7 +157,6 @@ func TestBenchSpyWithTwoLokiQueries(t *testing.T) {
164157
currentReport.QueryExecutors = append(currentReport.QueryExecutors, lokiQueryExecutor)
165158

166159
gen.Run(true)
167-
currentReport.TestEnd = time.Now()
168160

169161
fetchCtx, cancelFn := context.WithTimeout(context.Background(), 60*time.Second)
170162
defer cancelFn()

wasp/schedule.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func Plain(from int64, duration time.Duration) []*Segment {
1717
{
1818
From: from,
1919
Duration: duration,
20+
Type: SegmentType_Plain,
2021
},
2122
}
2223
}
@@ -30,6 +31,7 @@ func Steps(from, increase int64, steps int, duration time.Duration) []*Segment {
3031
segments = append(segments, &Segment{
3132
From: newFrom,
3233
Duration: perStepDuration,
34+
Type: SegmentType_Steps,
3335
})
3436
}
3537
return segments

0 commit comments

Comments
 (0)