block-accounting/backend/cmd/load/main.go

87 lines
1.4 KiB
Go
Raw Normal View History

2024-05-24 17:44:24 +00:00
package main
import (
"bytes"
"encoding/json"
"log"
"net/http"
"sync"
"time"
"github.com/emochka2007/block-accounting/internal/interface/rest/domain"
"github.com/emochka2007/block-accounting/internal/pkg/bip39"
)
func main() {
sAt := time.Now()
wg := sync.WaitGroup{}
totalch := make(chan int, 5)
for i := 0; i < 10; i++ {
wg.Add(1)
go func(j int) {
defer wg.Done()
var reqc int
for {
e, err := bip39.NewEntropy(256)
if err != nil {
log.Println("ERROR: ", err)
break
}
m, err := bip39.NewMnemonic(e)
if err != nil {
log.Println("ERROR: ", err)
break
}
req, err := json.Marshal(&domain.JoinRequest{
Mnemonic: m,
})
if err != nil {
log.Println("ERROR: ", err)
break
}
_, err = http.Post("http://localhost:8080/join", "application/json", bytes.NewBuffer(req))
if err != nil {
log.Println("ERROR: ", err)
break
}
reqc++
log.Println("req ", j)
}
totalch <- reqc
}(i)
}
var reqtotoal int
mu := sync.Mutex{}
go func() {
for c := range totalch {
mu.Lock()
reqtotoal += c
mu.Unlock()
}
}()
wg.Wait()
eAt := time.Now()
rps := float64(reqtotoal) / eAt.Sub(sAt).Seconds()
log.Println("STARTED_AT: ", sAt, " END_AT: ", eAt)
log.Println("REQ TOTAL: ", reqtotoal, " RPS:", rps, " SECONDS: ", eAt.Sub(sAt).Seconds())
}