Skip to content

Commit d389c00

Browse files
committed
print table with Direct metrics
1 parent 9cd0fd7 commit d389c00

File tree

8 files changed

+128
-42
lines changed

8 files changed

+128
-42
lines changed
Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1-
# BenchSpy - Real world example
1+
# BenchSpy - Real-World Example
22

3-
Now that we have seen all possible usages, you might wonder how you should write a test that compares performance between different
4-
releases of your application.
3+
Now that we've covered all possible usages, you might wonder how to write a test that compares performance between different releases of your application. Here’s a practical example to guide you through the process.
54

6-
Usually steps to follow would look like this:
7-
1. Write the performance test.
8-
2. At the end of the test fetch the report, store it and commit to git.
9-
3. Modify the previous point, so that it fetches both latest report and creates a new one.
10-
4. Write your assertions for metrics.
5+
## Typical Workflow
116

12-
# Writing the performance test
13-
We will use a simple mock for the application under test. All that it does is wait for `50 ms` before
14-
returning a 200 response code.
7+
1. Write a performance test.
8+
2. At the end of the test, generate a performance report, store it, and commit it to Git.
9+
3. Modify the test to fetch both the latest report and create a new one.
10+
4. Write assertions to validate your performance metrics.
11+
12+
---
13+
14+
## Writing the Performance Test
15+
16+
We'll use a simple mock for the application under test. This mock waits for `50 ms` before returning a 200 response code.
1517

1618
```go
1719
generator, err := wasp.NewGenerator(&wasp.Config{
@@ -21,18 +23,18 @@ generator, err := wasp.NewGenerator(&wasp.Config{
2123
LoadType: wasp.VU,
2224
Schedule: wasp.Plain(10, 15*time.Second),
2325
VU: wasp.NewMockVU(&wasp.MockVirtualUserConfig{
24-
// notice lower latency
2526
CallSleep: 50 * time.Millisecond,
2627
}),
2728
})
2829
require.NoError(t, err)
29-
3030
generator.Run(true)
3131
```
3232

33-
# Generating first report
34-
Here we generate a new performance report for `v1.0.0`. We will use `Direct` query executor and save the report to a custom directory
35-
called `test_reports`. We will use this report later to compare the performance of new versions.
33+
---
34+
35+
## Generating the First Report
36+
37+
Here, we'll generate a performance report for version `v1.0.0` using the `Direct` query executor. The report will be saved to a custom directory named `test_reports`. This report will later be used to compare the performance of new versions.
3638

3739
```go
3840
fetchCtx, cancelFn := context.WithTimeout(context.Background(), 60*time.Second)
@@ -53,41 +55,55 @@ path, storeErr := baseLineReport.Store()
5355
require.NoError(t, storeErr, "failed to store current report", path)
5456
```
5557

56-
# Modifying report generation
57-
Now that we have a baseline report stored for `v1.0.0` lets modify the test, so that we can use it with future releases of our application.
58-
That means that the code from previous step has to change to:
58+
---
59+
60+
## Modifying Report Generation
61+
62+
With the baseline report for `v1.0.0` stored, we'll modify the test to support future releases. The code from the previous step will change as follows:
63+
5964
```go
65+
currentVersion := os.Getenv("CURRENT_VERSION")
66+
require.NotEmpty(t, currentVersion, "No current version provided")
67+
6068
fetchCtx, cancelFn := context.WithTimeout(context.Background(), 60*time.Second)
6169
defer cancelFn()
6270

6371
currentReport, previousReport, err := benchspy.FetchNewStandardReportAndLoadLatestPrevious(
6472
fetchCtx,
65-
"v1.1.0",
73+
currentVersion,
6674
benchspy.WithStandardQueries(benchspy.StandardQueryExecutor_Direct),
6775
benchspy.WithReportDirectory("test_reports"),
6876
benchspy.WithGenerators(generator),
6977
)
7078
require.NoError(t, err, "failed to fetch current report or load the previous one")
7179
```
7280

73-
As you remember this function will load latest report from `test_reports` directory and fetch a current one, in this case for `v1.1.0`.
81+
This function fetches the current report (for version passed as environment variable `CURRENT_VERSION`) while loading the latest stored report from the `test_reports` directory.
82+
83+
---
84+
85+
## Adding Assertions
86+
87+
Let’s assume you want to ensure that none of the performance metrics degrade by more than **1%** between releases (and that error rate has not changed at all). Here's how you can write assertions using a convenient function for the `Direct` query executor:
7488

75-
# Adding assertions
76-
Let's assume we don't want any of performance metrics to get more than **1% worse** between releases and use a convenience function
77-
for `Direct` query executor:
7889
```go
7990
hasErrors, errors := benchspy.CompareDirectWithThresholds(
80-
1.0, // max 1% worse median latency
81-
1.0, // max 1% worse p95 latency
82-
1.0, // max 1% worse maximum latency
83-
0.0, // no change in error rate
91+
1.0, // Max 1% worse median latency
92+
1.0, // Max 1% worse p95 latency
93+
1.0, // Max 1% worse maximum latency
94+
0.0, // No increase in error rate
8495
currentReport, previousReport)
8596
require.False(t, hasErrors, fmt.Sprintf("errors found: %v", errors))
8697
```
8798

88-
Done, you're ready to use `BenchSpy` to make sure that the performance of your application didn't degrade below your chosen thresholds!
99+
---
100+
101+
## Conclusion
102+
103+
You’re now ready to use `BenchSpy` to ensure that your application’s performance does not degrade below your specified thresholds!
89104

90105
> [!NOTE]
91-
> You can find a test example, where the performance has degraded significantly [here](https://github.com/smartcontractkit/chainlink-testing-framework/tree/main/wasp/examples/benchspy/direct_query_executor/direct_query_real_case.go).
106+
> [Here](https://github.com/smartcontractkit/chainlink-testing-framework/tree/main/wasp/examples/benchspy/direct_query_executor/direct_query_real_case.go) you can find an example test where performance has degraded significantly,
107+
> because mock's latency has been increased from `50ms` to `60ms`.
92108
>
93-
> This test passes, because we expect the performance to be worse. This is, of course, the opposite what you should do in case of a real application :-)
109+
> **This test passes because it is designed to expect performance degradation. Of course, in a real application, your goal should be to prevent such regressions.** 😊

book/src/libs/wasp/benchspy/simplest_metrics.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,21 @@ require.False(t, hasErrors, fmt.Sprintf("errors found: %v", errors))
3030
> - `max_latency`
3131
> - `error_rate`
3232
33+
The function also prints a table with the differences between two reports, regardless whether they were meaningful:
34+
```bash
35+
+-------------------------+---------+---------+---------+
36+
| METRIC | V1.0.0 | V1.1.0 | DIFF % |
37+
+-------------------------+---------+---------+---------+
38+
| median_latency | 50.4256 | 61.0009 | 20.9722 |
39+
+-------------------------+---------+---------+---------+
40+
| 95th_percentile_latency | 51.0082 | 61.1052 | 19.7949 |
41+
+-------------------------+---------+---------+---------+
42+
| max_latency | 52.1362 | 61.2028 | 17.3903 |
43+
+-------------------------+---------+---------+---------+
44+
| error_rate | 0.0000 | 0.0000 | 0.0000 |
45+
+-------------------------+---------+---------+---------+
46+
```
47+
3348
## Wrapping Up
3449

3550
And that's it! You've written your first test that uses `WASP` to generate load and `BenchSpy` to ensure that the median latency, 95th percentile latency, max latency and error rate haven't changed significantly between runs. You accomplished this without even needing a Loki instance. But what if you wanted to leverage the power of `LogQL`? We'll explore that in the [next chapter](./loki_std.md).

wasp/benchspy/report.go

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"os"
78
"strings"
89

10+
"github.com/olekukonko/tablewriter"
911
"github.com/pkg/errors"
1012
"github.com/prometheus/common/model"
1113
"github.com/smartcontractkit/chainlink-testing-framework/wasp"
@@ -127,6 +129,19 @@ func MustAllPrometheusResults(sr *StandardReport) map[string]model.Value {
127129
return results
128130
}
129131

132+
func calculateDiffPercentage(current, previous float64) float64 {
133+
var diffPrecentage float64
134+
if previous != 0.0 && current != 0.0 {
135+
diffPrecentage = (current - previous) / previous * 100
136+
} else if previous == 0.0 && current == 0.0 {
137+
diffPrecentage = 0.0
138+
} else {
139+
diffPrecentage = 100.0
140+
}
141+
142+
return diffPrecentage
143+
}
144+
130145
func CompareDirectWithThresholds(medianThreshold, p95Threshold, maxThreshold, errorRateThreshold float64, currentReport, previousReport *StandardReport) (bool, []error) {
131146
currentResults := MustAllDirectResults(currentReport)
132147
previousResults := MustAllDirectResults(previousReport)
@@ -146,15 +161,7 @@ func CompareDirectWithThresholds(medianThreshold, p95Threshold, maxThreshold, er
146161
currentMetric := currentResults[metricName]
147162
previousMetric := previousResults[metricName]
148163

149-
var diffPrecentage float64
150-
if previousMetric != 0.0 && currentMetric != 0.0 {
151-
diffPrecentage = (currentMetric - previousMetric) / previousMetric * 100
152-
} else if previousMetric == 0.0 && currentMetric == 0.0 {
153-
diffPrecentage = 0.0
154-
} else {
155-
diffPrecentage = 100.0
156-
}
157-
164+
diffPrecentage := calculateDiffPercentage(currentMetric, previousMetric)
158165
if diffPrecentage > maxDiffPercentage {
159166
return fmt.Errorf("%s is %.4f%% different, which is higher than the threshold %.4f%%", metricName, diffPrecentage, maxDiffPercentage)
160167
}
@@ -180,9 +187,32 @@ func CompareDirectWithThresholds(medianThreshold, p95Threshold, maxThreshold, er
180187
errors = append(errors, err)
181188
}
182189

190+
PrintStandardDirectMetrics(currentReport, previousReport)
191+
183192
return len(errors) > 0, errors
184193
}
185194

195+
func PrintStandardDirectMetrics(currentReport, previousReport *StandardReport) {
196+
currentResults := MustAllDirectResults(currentReport)
197+
previousResults := MustAllDirectResults(previousReport)
198+
199+
table := tablewriter.NewWriter(os.Stderr)
200+
table.SetHeader([]string{"Metric", previousReport.CommitOrTag, currentReport.CommitOrTag, "Diff %"})
201+
202+
for _, metricName := range StandardLoadMetrics {
203+
metricString := string(metricName)
204+
diff := calculateDiffPercentage(currentResults[metricString], previousResults[metricString])
205+
table.Append([]string{metricString, fmt.Sprintf("%.4f", previousResults[metricString]), fmt.Sprintf("%.4f", currentResults[metricString]), fmt.Sprintf("%.4f", diff)})
206+
}
207+
208+
table.SetBorder(true)
209+
table.SetRowLine(true)
210+
table.SetAlignment(tablewriter.ALIGN_LEFT)
211+
212+
table.Render()
213+
214+
}
215+
186216
// FetchData retrieves data for the report within the specified time range.
187217
// It validates the time range and executes queries in parallel, returning any errors encountered during execution.
188218
func (b *StandardReport) FetchData(ctx context.Context) error {

wasp/examples/benchspy/direct_query_executor/direct_query_real_case.go renamed to wasp/examples/benchspy/direct_query_executor/direct_query_real_case_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"os"
56
"strings"
67
"testing"
78
"time"
@@ -62,15 +63,17 @@ func TestBenchSpy_Standard_Direct_Metrics_RealCase(t *testing.T) {
6263
}),
6364
})
6465
require.NoError(t, err)
65-
6666
generator.Run(true)
6767

68+
currentVersion := os.Getenv("CURRENT_VERSION")
69+
require.NotEmpty(t, currentVersion, "No current version provided")
70+
6871
fetchCtx, cancelFn := context.WithTimeout(context.Background(), 60*time.Second)
6972
defer cancelFn()
7073

7174
currentReport, previousReport, err := benchspy.FetchNewStandardReportAndLoadLatestPrevious(
7275
fetchCtx,
73-
"v1.1.0",
76+
currentVersion,
7477
benchspy.WithStandardQueries(benchspy.StandardQueryExecutor_Direct),
7578
benchspy.WithReportDirectory("test_reports"),
7679
benchspy.WithGenerators(generator),

wasp/examples/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ require (
169169
github.com/mailru/easyjson v0.7.7 // indirect
170170
github.com/mattn/go-colorable v0.1.13 // indirect
171171
github.com/mattn/go-isatty v0.0.20 // indirect
172+
github.com/mattn/go-runewidth v0.0.14 // indirect
172173
github.com/miekg/dns v1.1.56 // indirect
173174
github.com/mitchellh/copystructure v1.0.0 // indirect
174175
github.com/mitchellh/go-homedir v1.1.0 // indirect
@@ -190,6 +191,7 @@ require (
190191
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
191192
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
192193
github.com/oklog/ulid v1.3.1 // indirect
194+
github.com/olekukonko/tablewriter v0.0.5 // indirect
193195
github.com/opencontainers/go-digest v1.0.0 // indirect
194196
github.com/opencontainers/image-spec v1.1.0 // indirect
195197
github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e // indirect
@@ -209,6 +211,7 @@ require (
209211
github.com/prometheus/exporter-toolkit v0.10.1-0.20230714054209-2f4150c63f97 // indirect
210212
github.com/prometheus/procfs v0.15.1 // indirect
211213
github.com/prometheus/prometheus v0.47.2-0.20231010075449-4b9c19fe5510 // indirect
214+
github.com/rivo/uniseg v0.4.4 // indirect
212215
github.com/robfig/cron/v3 v3.0.1 // indirect
213216
github.com/rs/zerolog v1.33.0 // indirect
214217
github.com/russross/blackfriday/v2 v2.1.0 // indirect

wasp/examples/go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,9 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
678678
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
679679
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
680680
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
681+
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
682+
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
683+
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
681684
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
682685
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
683686
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -744,6 +747,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
744747
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
745748
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
746749
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
750+
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
751+
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
747752
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
748753
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
749754
github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo=
@@ -825,6 +830,9 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg
825830
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
826831
github.com/prometheus/prometheus v0.47.2-0.20231010075449-4b9c19fe5510 h1:6ksZ7t1hNOzGPPs8DK7SvXQf6UfWzi+W5Z7PCBl8gx4=
827832
github.com/prometheus/prometheus v0.47.2-0.20231010075449-4b9c19fe5510/go.mod h1:UC0TwJiF90m2T3iYPQBKnGu8gv3s55dF/EgpTq8gyvo=
833+
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
834+
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
835+
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
828836
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
829837
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
830838
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=

wasp/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ require (
167167
github.com/coder/websocket v1.8.12
168168
github.com/grafana/pyroscope-go v1.1.2
169169
github.com/montanaflynn/stats v0.7.1
170+
github.com/olekukonko/tablewriter v0.0.5
170171
github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.18
171172
github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0
172173
)
@@ -249,6 +250,7 @@ require (
249250
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
250251
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
251252
github.com/magiconair/properties v1.8.7 // indirect
253+
github.com/mattn/go-runewidth v0.0.14 // indirect
252254
github.com/mitchellh/copystructure v1.0.0 // indirect
253255
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
254256
github.com/mitchellh/reflectwalk v1.0.1 // indirect
@@ -268,6 +270,7 @@ require (
268270
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
269271
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
270272
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
273+
github.com/rivo/uniseg v0.4.4 // indirect
271274
github.com/robfig/cron/v3 v3.0.1 // indirect
272275
github.com/russross/blackfriday/v2 v2.1.0 // indirect
273276
github.com/sercand/kuberesolver/v5 v5.1.1 // indirect

wasp/go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,9 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
682682
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
683683
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
684684
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
685+
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
686+
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
687+
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
685688
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
686689
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
687690
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -748,6 +751,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
748751
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
749752
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
750753
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
754+
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
755+
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
751756
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
752757
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
753758
github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo=
@@ -829,6 +834,9 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg
829834
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
830835
github.com/prometheus/prometheus v0.47.2-0.20231010075449-4b9c19fe5510 h1:6ksZ7t1hNOzGPPs8DK7SvXQf6UfWzi+W5Z7PCBl8gx4=
831836
github.com/prometheus/prometheus v0.47.2-0.20231010075449-4b9c19fe5510/go.mod h1:UC0TwJiF90m2T3iYPQBKnGu8gv3s55dF/EgpTq8gyvo=
837+
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
838+
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
839+
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
832840
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
833841
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
834842
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=

0 commit comments

Comments
 (0)