-
Notifications
You must be signed in to change notification settings - Fork 70
/
initiator.go
59 lines (53 loc) · 1.14 KB
/
initiator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package trafficGenerator
import (
"context"
"github.com/hyperledger-twgc/tape/pkg/infra"
"github.com/hyperledger-twgc/tape/pkg/infra/basic"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"golang.org/x/time/rate"
)
type Initiator struct {
Num int
Burst int
R float64
Config basic.Config
Crypto infra.Crypto
Logger *log.Logger
Raw chan *basic.TracingProposal
ErrorCh chan error
}
func (initiator *Initiator) Start() {
limit := rate.Inf
ctx := context.Background()
if initiator.R > 0 {
limit = rate.Limit(initiator.R)
}
limiter := rate.NewLimiter(limit, initiator.Burst)
i := 0
for {
if initiator.Num > 0 {
if i == initiator.Num {
return
}
i++
}
prop, err := CreateProposal(
initiator.Crypto,
initiator.Logger,
initiator.Config.Channel,
initiator.Config.Chaincode,
initiator.Config.Version,
initiator.Config.Args...,
)
if err != nil {
initiator.ErrorCh <- errors.Wrapf(err, "error creating proposal")
return
}
if err = limiter.Wait(ctx); err != nil {
initiator.ErrorCh <- errors.Wrapf(err, "error creating proposal")
return
}
initiator.Raw <- prop
}
}