Skip to content

Commit

Permalink
Don't remove old generator yet.
Browse files Browse the repository at this point in the history
Signed-off-by: Cody Littley <[email protected]>
  • Loading branch information
cody-littley committed Oct 3, 2024
1 parent 8df796c commit 8d4caf6
Show file tree
Hide file tree
Showing 8 changed files with 614 additions and 188 deletions.
17 changes: 16 additions & 1 deletion tools/traffic/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ build: clean
go build -o ./bin/server ./cmd

run: build
TRAFFIC_GENERATOR_HOSTNAME=localhost \
TRAFFIC_GENERATOR_GRPC_PORT=32001 \
TRAFFIC_GENERATOR_TIMEOUT=10s \
TRAFFIC_GENERATOR_NUM_INSTANCES=1 \
TRAFFIC_GENERATOR_REQUEST_INTERVAL=1s \
TRAFFIC_GENERATOR_DATA_SIZE=1000 \
TRAFFIC_GENERATOR_RANDOMIZE_BLOBS=true \
./bin/server

build2: clean
# cd ../.. && make protoc
go mod tidy
go build -o ./bin/server2 ./cmd2

run2: build2
TRAFFIC_GENERATOR_LOG_FORMAT=text \
TRAFFIC_GENERATOR_DISPERSER_HOSTNAME=localhost \
TRAFFIC_GENERATOR_DISPERSER_PORT=32003 \
Expand All @@ -33,4 +48,4 @@ run: build
TRAFFIC_GENERATOR_NUM_WORKERS=4 \
TRAFFIC_GENERATOR_CHAIN_RPC=http://localhost:8545 \
TRAFFIC_GENERATOR_NUM_RETRIES=2 \
./bin/server
./bin/server2
20 changes: 14 additions & 6 deletions tools/traffic/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import (
"log"
"os"

"github.com/Layr-Labs/eigenda/core"
"github.com/Layr-Labs/eigenda/core/auth"
"github.com/Layr-Labs/eigenda/tools/traffic"
"github.com/Layr-Labs/eigenda/tools/traffic/config"
"github.com/Layr-Labs/eigenda/tools/traffic/flags"
"github.com/urfave/cli"
)

Expand All @@ -22,23 +24,29 @@ func main() {
app.Name = "da-traffic-generator"
app.Usage = "EigenDA Traffic Generator"
app.Description = "Service for generating traffic to EigenDA disperser"
app.Flags = config.Flags
app.Flags = flags.Flags
app.Action = trafficGeneratorMain
if err := app.Run(os.Args); err != nil {
log.Fatalf("application failed: %v", err)
}
}

func trafficGeneratorMain(ctx *cli.Context) error {
generatorConfig, err := config.NewConfig(ctx)
config, err := traffic.NewConfig(ctx)
if err != nil {
return err
}

generator, err := traffic.NewTrafficGenerator(generatorConfig)
var signer core.BlobRequestSigner
if config.SignerPrivateKey != "" {
log.Println("Using signer private key")
signer = auth.NewLocalBlobRequestSigner(config.SignerPrivateKey)
}

generator, err := traffic.NewTrafficGenerator(config, signer)
if err != nil {
panic(fmt.Sprintf("failed to create new traffic generator\n%s", err))
panic("failed to create new traffic generator")
}

return generator.Start()
return generator.Run()
}
44 changes: 44 additions & 0 deletions tools/traffic/cmd2/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package main

import (
"fmt"
"log"
"os"

"github.com/Layr-Labs/eigenda/tools/traffic"
"github.com/Layr-Labs/eigenda/tools/traffic/config"
"github.com/urfave/cli"
)

var (
version = ""
gitCommit = ""
gitDate = ""
)

func main() {
app := cli.NewApp()
app.Version = fmt.Sprintf("%s-%s-%s", version, gitCommit, gitDate)
app.Name = "da-traffic-generator"
app.Usage = "EigenDA Traffic Generator"
app.Description = "Service for generating traffic to EigenDA disperser"
app.Flags = config.Flags
app.Action = trafficGeneratorMain
if err := app.Run(os.Args); err != nil {
log.Fatalf("application failed: %v", err)
}
}

func trafficGeneratorMain(ctx *cli.Context) error {
generatorConfig, err := config.NewConfig(ctx)
if err != nil {
return err
}

generator, err := traffic.NewTrafficGenerator(generatorConfig)
if err != nil {
panic(fmt.Sprintf("failed to create new traffic generator\n%s", err))
}

return generator.Start()
}
56 changes: 56 additions & 0 deletions tools/traffic/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package traffic

import (
"errors"
"time"

"github.com/Layr-Labs/eigenda/api/clients"
"github.com/Layr-Labs/eigenda/common"
"github.com/Layr-Labs/eigenda/tools/traffic/flags"
"github.com/urfave/cli"
)

type Config struct {
clients.Config

NumInstances uint
RequestInterval time.Duration
DataSize uint64
LoggingConfig common.LoggerConfig
RandomizeBlobs bool
InstanceLaunchInterval time.Duration

SignerPrivateKey string
CustomQuorums []uint8
}

func NewConfig(ctx *cli.Context) (*Config, error) {
loggerConfig, err := common.ReadLoggerCLIConfig(ctx, flags.FlagPrefix)
if err != nil {
return nil, err
}
customQuorums := ctx.GlobalIntSlice(flags.CustomQuorumNumbersFlag.Name)
customQuorumsUint8 := make([]uint8, len(customQuorums))
for i, q := range customQuorums {
if q < 0 || q > 255 {
return nil, errors.New("invalid custom quorum number")
}
customQuorumsUint8[i] = uint8(q)
}
return &Config{
Config: *clients.NewConfig(
ctx.GlobalString(flags.HostnameFlag.Name),
ctx.GlobalString(flags.GrpcPortFlag.Name),
ctx.Duration(flags.TimeoutFlag.Name),
ctx.GlobalBool(flags.UseSecureGrpcFlag.Name),
),
NumInstances: ctx.GlobalUint(flags.NumInstancesFlag.Name),
RequestInterval: ctx.Duration(flags.RequestIntervalFlag.Name),
DataSize: ctx.GlobalUint64(flags.DataSizeFlag.Name),
LoggingConfig: *loggerConfig,
RandomizeBlobs: ctx.GlobalBool(flags.RandomizeBlobsFlag.Name),
InstanceLaunchInterval: ctx.Duration(flags.InstanceLaunchIntervalFlag.Name),
SignerPrivateKey: ctx.String(flags.SignerPrivateKeyFlag.Name),
CustomQuorums: customQuorumsUint8,
}, nil
}
112 changes: 112 additions & 0 deletions tools/traffic/flags/flags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package flags

import (
"time"

"github.com/Layr-Labs/eigenda/common"
"github.com/urfave/cli"
)

const (
FlagPrefix = "traffic-generator"
envPrefix = "TRAFFIC_GENERATOR"
)

var (
/* Required Flags */

HostnameFlag = cli.StringFlag{
Name: common.PrefixFlag(FlagPrefix, "disperser-hostname"),
Usage: "Hostname at which disperser service is available",
Required: true,
EnvVar: common.PrefixEnvVar(envPrefix, "HOSTNAME"),
}
GrpcPortFlag = cli.StringFlag{
Name: common.PrefixFlag(FlagPrefix, "disperser-port"),
Usage: "Port at which a disperser listens for grpc calls",
Required: true,
EnvVar: common.PrefixEnvVar(envPrefix, "GRPC_PORT"),
}
TimeoutFlag = cli.DurationFlag{
Name: common.PrefixFlag(FlagPrefix, "timeout"),
Usage: "Amount of time to wait for GPRC",
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "TIMEOUT"),
Value: 10 * time.Second,
}
NumInstancesFlag = cli.UintFlag{
Name: common.PrefixFlag(FlagPrefix, "num-instances"),
Usage: "Number of generator instances to run in parallel",
Required: true,
EnvVar: common.PrefixEnvVar(envPrefix, "NUM_INSTANCES"),
}
RequestIntervalFlag = cli.DurationFlag{
Name: common.PrefixFlag(FlagPrefix, "request-interval"),
Usage: "Duration between requests",
Required: true,
EnvVar: common.PrefixEnvVar(envPrefix, "REQUEST_INTERVAL"),
Value: 30 * time.Second,
}
DataSizeFlag = cli.Uint64Flag{
Name: common.PrefixFlag(FlagPrefix, "data-size"),
Usage: "Size of the data blob",
Required: true,
EnvVar: common.PrefixEnvVar(envPrefix, "DATA_SIZE"),
}
RandomizeBlobsFlag = cli.BoolFlag{
Name: common.PrefixFlag(FlagPrefix, "randomize-blobs"),
Usage: "Whether to randomzie blob data",
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "RANDOMIZE_BLOBS"),
}
InstanceLaunchIntervalFlag = cli.DurationFlag{
Name: common.PrefixFlag(FlagPrefix, "instance-launch-interva"),
Usage: "Duration between generator instance launches",
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "INSTANCE_LAUNCH_INTERVAL"),
Value: 1 * time.Second,
}
UseSecureGrpcFlag = cli.BoolFlag{
Name: common.PrefixFlag(FlagPrefix, "use-secure-grpc"),
Usage: "Whether to use secure grpc",
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "USE_SECURE_GRPC"),
}
SignerPrivateKeyFlag = cli.StringFlag{
Name: common.PrefixFlag(FlagPrefix, "signer-private-key-hex"),
Usage: "Private key to use for signing requests",
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "SIGNER_PRIVATE_KEY_HEX"),
}
CustomQuorumNumbersFlag = cli.IntSliceFlag{
Name: common.PrefixFlag(FlagPrefix, "custom-quorum-numbers"),
Usage: "Custom quorum numbers to use for the traffic generator",
Required: false,
EnvVar: common.PrefixEnvVar(envPrefix, "CUSTOM_QUORUM_NUMBERS"),
}
)

var requiredFlags = []cli.Flag{
HostnameFlag,
GrpcPortFlag,
NumInstancesFlag,
RequestIntervalFlag,
DataSizeFlag,
}

var optionalFlags = []cli.Flag{
TimeoutFlag,
RandomizeBlobsFlag,
InstanceLaunchIntervalFlag,
UseSecureGrpcFlag,
SignerPrivateKeyFlag,
CustomQuorumNumbersFlag,
}

// Flags contains the list of configuration options available to the binary.
var Flags []cli.Flag

func init() {
Flags = append(requiredFlags, optionalFlags...)
Flags = append(Flags, common.LoggerCLIFlags(envPrefix, FlagPrefix)...)
}
Loading

0 comments on commit 8d4caf6

Please sign in to comment.