forked from Layr-Labs/eigenda
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Cody Littley <[email protected]>
- Loading branch information
1 parent
8df796c
commit 8d4caf6
Showing
8 changed files
with
614 additions
and
188 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)...) | ||
} |
Oops, something went wrong.