55 "fmt"
66 "log"
77 "math/rand/v2"
8+ "strings"
89 "time"
910
1011 "github.com/celestiaorg/tastora/framework/docker/evstack/spamoor"
@@ -142,7 +143,8 @@ func runCheck(ctx context.Context, api SpamoorClient, timeout time.Duration) err
142143 return fmt .Errorf ("waiting for spamoor sync: %w" , err )
143144 }
144145
145- baselineSent , baselineFailed , err := getSpamoorCounters (api )
146+ checkPrefix := "check-"
147+ baselineSent , baselineFailed , err := getSpamoorCountersForPrefix (api , checkPrefix )
146148 if err != nil {
147149 return fmt .Errorf ("get baseline metrics: %w" , err )
148150 }
@@ -173,7 +175,7 @@ func runCheck(ctx context.Context, api SpamoorClient, timeout time.Duration) err
173175 checkCtx , cancel := context .WithTimeout (ctx , timeout )
174176 defer cancel ()
175177
176- sent , failed , err := waitForSpamoorDone (checkCtx , api , 1 , baselineSent , baselineFailed )
178+ sent , failed , err := waitForSpamoorDone (checkCtx , api , 1 , baselineSent , baselineFailed , checkPrefix )
177179 if err != nil {
178180 return fmt .Errorf ("tx not confirmed: %w" , err )
179181 }
@@ -186,7 +188,7 @@ func runCheck(ctx context.Context, api SpamoorClient, timeout time.Duration) err
186188 return nil
187189}
188190
189- type waitForDoneFunc func (context.Context , SpamoorClient , int , float64 , float64 ) (float64 , float64 , error )
191+ type waitForDoneFunc func (ctx context.Context , api SpamoorClient , targetCount int , baselineSent , baselineFailed float64 , namePrefix string ) (float64 , float64 , error )
190192
191193func runEntry (ctx context.Context , api SpamoorClient , entry Entry ) error {
192194 return runEntryWithWait (ctx , api , entry , waitForSpamoorDone )
@@ -198,7 +200,9 @@ func runEntryWithWait(ctx context.Context, api SpamoorClient, entry Entry, wait
198200 log .Printf ("[%s] scenario=%s spammers=%d count_per=%d total=%d" ,
199201 entry .TestName , entry .Scenario , entry .NumSpammers , entry .CountPerSpammer , totalCount )
200202
201- baselineSent , baselineFailed , err := getSpamoorCounters (api )
203+ namePrefix := spammerPrefix (entry .TestName )
204+
205+ baselineSent , baselineFailed , err := getSpamoorCountersForPrefix (api , namePrefix )
202206 if err != nil {
203207 return fmt .Errorf ("get baseline metrics: %w" , err )
204208 }
@@ -207,7 +211,7 @@ func runEntryWithWait(ctx context.Context, api SpamoorClient, entry Entry, wait
207211
208212 var spammerIDs []int
209213 for i := range entry .NumSpammers {
210- name := fmt .Sprintf ("bench-%s- %d" , entry . TestName , i )
214+ name := fmt .Sprintf ("%s %d" , namePrefix , i )
211215 id , err := api .CreateSpammer (name , entry .Scenario , scenarioCfg , true )
212216 if err != nil {
213217 return fmt .Errorf ("create spammer %s: %w" , name , err )
@@ -234,7 +238,7 @@ func runEntryWithWait(ctx context.Context, api SpamoorClient, entry Entry, wait
234238 }
235239
236240 start := time .Now ()
237- sent , failed , err := wait (ctx , api , totalCount , baselineSent , baselineFailed )
241+ sent , failed , err := wait (ctx , api , totalCount , baselineSent , baselineFailed , namePrefix )
238242 elapsed := time .Since (start )
239243
240244 if err != nil {
@@ -263,11 +267,11 @@ func DeleteAllSpammers(api SpamoorClient) error {
263267 return nil
264268}
265269
266- func waitForSpamoorDone (ctx context.Context , api SpamoorClient , targetCount int , baselineSent , baselineFailed float64 ) (sent , failed float64 , err error ) {
267- return waitForSpamoorDoneWithInterval (ctx , api , targetCount , baselineSent , baselineFailed , 2 * time .Second )
270+ func waitForSpamoorDone (ctx context.Context , api SpamoorClient , targetCount int , baselineSent , baselineFailed float64 , namePrefix string ) (sent , failed float64 , err error ) {
271+ return waitForSpamoorDoneWithInterval (ctx , api , targetCount , baselineSent , baselineFailed , namePrefix , 2 * time .Second )
268272}
269273
270- func waitForSpamoorDoneWithInterval (ctx context.Context , api SpamoorClient , targetCount int , baselineSent , baselineFailed float64 , pollInterval time.Duration ) (sent , failed float64 , err error ) {
274+ func waitForSpamoorDoneWithInterval (ctx context.Context , api SpamoorClient , targetCount int , baselineSent , baselineFailed float64 , namePrefix string , pollInterval time.Duration ) (sent , failed float64 , err error ) {
271275 ticker := time .NewTicker (pollInterval )
272276 defer ticker .Stop ()
273277
@@ -279,7 +283,7 @@ func waitForSpamoorDoneWithInterval(ctx context.Context, api SpamoorClient, targ
279283 case <- ctx .Done ():
280284 return sent , failed , fmt .Errorf ("timed out waiting for %d txs (sent %.0f): %w" , targetCount , sent , ctx .Err ())
281285 case <- ticker .C :
282- currentSent , currentFailed , mErr := getSpamoorCounters (api )
286+ currentSent , currentFailed , mErr := getSpamoorCountersForPrefix (api , namePrefix )
283287 if mErr != nil {
284288 log .Printf ("warning: failed to get metrics: %v" , mErr )
285289 continue
@@ -308,13 +312,13 @@ func waitForSpamoorDoneWithInterval(ctx context.Context, api SpamoorClient, targ
308312 }
309313}
310314
311- func getSpamoorCounters (api SpamoorClient ) (sent , failed float64 , err error ) {
315+ func getSpamoorCountersForPrefix (api SpamoorClient , namePrefix string ) (sent , failed float64 , err error ) {
312316 metrics , err := api .GetMetrics ()
313317 if err != nil {
314318 return 0 , 0 , err
315319 }
316- return sumCounter (metrics ["spamoor_transactions_sent_total" ]),
317- sumCounter (metrics ["spamoor_transactions_failed_total" ]),
320+ return sumCounterWithPrefix (metrics ["spamoor_transactions_sent_total" ], namePrefix ),
321+ sumCounterWithPrefix (metrics ["spamoor_transactions_failed_total" ], namePrefix ),
318322 nil
319323}
320324
@@ -371,15 +375,32 @@ func getSpamoorHeight(api SpamoorClient) (uint64, error) {
371375 return clients [0 ].Height , nil
372376}
373377
374- func sumCounter (f * dto.MetricFamily ) float64 {
378+ func sumCounterWithPrefix (f * dto.MetricFamily , namePrefix string ) float64 {
375379 if f == nil || f .GetType () != dto .MetricType_COUNTER {
376380 return 0
377381 }
378382 var sum float64
379383 for _ , m := range f .GetMetric () {
380- if m .GetCounter () != nil && m .GetCounter ().Value != nil {
381- sum += m .GetCounter ().GetValue ()
384+ if m .GetCounter () == nil || m .GetCounter ().Value == nil {
385+ continue
386+ }
387+ if namePrefix != "" && ! hasLabelPrefix (m , "spammer_name" , namePrefix ) {
388+ continue
382389 }
390+ sum += m .GetCounter ().GetValue ()
383391 }
384392 return sum
385393}
394+
395+ func spammerPrefix (testName string ) string {
396+ return fmt .Sprintf ("bench-%s-" , testName )
397+ }
398+
399+ func hasLabelPrefix (m * dto.Metric , name , prefix string ) bool {
400+ for _ , lp := range m .GetLabel () {
401+ if lp .GetName () == name {
402+ return strings .HasPrefix (lp .GetValue (), prefix )
403+ }
404+ }
405+ return false
406+ }
0 commit comments