daemon

package
v1.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 5, 2025 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Daemon

type Daemon struct {
	// contains filtered or unexported fields
}

Daemon manages multiple spammer instances with database persistence and graceful shutdown. It orchestrates the lifecycle of spammers including restoration from database, global configuration management, and coordinated shutdown with a 10-second timeout.

func NewDaemon

func NewDaemon(parentCtx context.Context, logger logrus.FieldLogger, clientPool *spamoor.ClientPool, rootWallet *spamoor.RootWallet, txpool *spamoor.TxPool, db *db.Database) *Daemon

NewDaemon creates a new daemon instance with the provided components. It initializes a cancellable context, spammer map, and global configuration map. The daemon manages spammer instances and handles their lifecycle.

func (*Daemon) AddStartupSpammers added in v1.1.1

func (d *Daemon) AddStartupSpammers(spammers []StartupSpammerConfig) error

AddStartupSpammers creates and starts spammers from the startup configuration. For each spammer config, it merges default scenario options with default wallet config and custom overrides, then creates the spammer with auto-start enabled. Default names and descriptions are generated if not provided.

func (*Daemon) DeleteSpammer

func (d *Daemon) DeleteSpammer(id int64) error

DeleteSpammer removes a spammer from both the daemon and database. If the spammer is running, it will be paused first before deletion. Returns an error if the spammer is not found or if database deletion fails.

func (*Daemon) GetAllSpammers

func (d *Daemon) GetAllSpammers() []*Spammer

GetAllSpammers returns all spammer instances sorted by ID in descending order. This provides a snapshot of all active spammer instances managed by the daemon. The returned slice is safe to modify as it's a copy.

func (*Daemon) GetClientPool

func (d *Daemon) GetClientPool() *spamoor.ClientPool

GetClientPool returns the RPC client pool used by all spammers. This provides access to the Ethereum client connections for transaction submission.

func (*Daemon) GetGlobalCfg added in v1.1.3

func (d *Daemon) GetGlobalCfg() map[string]interface{}

GetGlobalCfg returns the global configuration map that contains shared configuration values accessible to all spammer instances.

func (*Daemon) GetRootWallet

func (d *Daemon) GetRootWallet() *spamoor.RootWallet

GetRootWallet returns the root wallet used for funding spammer wallets. This provides access to the main wallet that distributes funds to child wallets.

func (*Daemon) GetSpammer

func (d *Daemon) GetSpammer(id int64) *Spammer

GetSpammer retrieves a spammer instance by ID from the internal map. Returns nil if the spammer with the given ID does not exist. This method is thread-safe using read locks.

func (*Daemon) LoadStartupSpammers added in v1.1.1

func (d *Daemon) LoadStartupSpammers(configFile string, logger logrus.FieldLogger) ([]StartupSpammerConfig, error)

LoadStartupSpammers loads the startup spammers configuration from a YAML file. Returns nil if no config file is specified. The file should contain an array of StartupSpammerConfig objects that define spammers to create on daemon startup.

func (*Daemon) NewSpammer

func (d *Daemon) NewSpammer(scenarioName string, config string, name string, description string, startImmediately bool) (*Spammer, error)

NewSpammer creates a new spammer instance with the specified configuration. It validates the config, generates a unique ID (starting from 100), persists to database, and optionally starts execution immediately. The ID counter is stored in database state.

func (*Daemon) ReclaimSpammer added in v1.1.4

func (d *Daemon) ReclaimSpammer(id int64) error

ReclaimSpammer reclaims funds from all wallets in the spammer's wallet pool. This transfers remaining ETH back to the root wallet for reuse. Returns an error if the spammer is not found or if fund reclamation fails.

func (*Daemon) Run

func (d *Daemon) Run() (bool, error)

Run initializes the daemon by restoring spammers from the database. Returns true if this is the first launch, false if spammers were restored. Marks the first launch state in the database to track initialization status.

func (*Daemon) SetGlobalCfg added in v1.1.3

func (d *Daemon) SetGlobalCfg(name string, value interface{})

SetGlobalCfg sets a global configuration value that can be accessed by all spammers. This allows sharing configuration data across multiple spammer instances.

func (*Daemon) Shutdown

func (d *Daemon) Shutdown()

Shutdown performs a graceful shutdown of the daemon and all running spammers. It cancels the context to stop all spammers, waits up to 10 seconds for them to finish, and closes the database connection. This ensures clean resource cleanup.

func (*Daemon) UpdateSpammer

func (d *Daemon) UpdateSpammer(id int64, name string, description string, config string) error

UpdateSpammer modifies the name, description, and configuration of an existing spammer. The configuration is validated by attempting to unmarshal it into SpammerConfig. Returns an error if the spammer is not found, config is invalid, or database update fails.

type Spammer

type Spammer struct {
	// contains filtered or unexported fields
}

Spammer represents a single scenario execution instance with database persistence. It manages the lifecycle of a scenario including wallet pool creation, configuration loading, and execution monitoring with panic recovery.

func (*Spammer) GetConfig

func (s *Spammer) GetConfig() string

GetConfig returns the YAML configuration string used by this spammer.

func (*Spammer) GetCreatedAt

func (s *Spammer) GetCreatedAt() int64

GetCreatedAt returns the Unix timestamp when this spammer was created.

func (*Spammer) GetDescription

func (s *Spammer) GetDescription() string

GetDescription returns the description text of the spammer instance.

func (*Spammer) GetID

func (s *Spammer) GetID() int64

GetID returns the unique identifier of the spammer instance.

func (*Spammer) GetLogScope

func (s *Spammer) GetLogScope() *logscope.LogScope

GetLogScope returns the buffered log scope for this spammer. This provides access to captured log messages for debugging and monitoring.

func (*Spammer) GetName

func (s *Spammer) GetName() string

GetName returns the human-readable name of the spammer instance.

func (*Spammer) GetScenario

func (s *Spammer) GetScenario() string

GetScenario returns the name of the scenario being executed by this spammer.

func (*Spammer) GetStatus

func (s *Spammer) GetStatus() int

GetStatus returns the current execution status of the spammer as an integer. Use SpammerStatus constants to interpret the returned value.

func (*Spammer) GetWalletPool

func (s *Spammer) GetWalletPool() *spamoor.WalletPool

GetWalletPool returns the wallet pool used by this spammer for transaction submission. Returns nil if the spammer has not been started or the wallet pool is not initialized.

func (*Spammer) Pause

func (s *Spammer) Pause() error

Pause stops the running scenario by canceling its context. It waits up to 10 seconds for the scenario to stop gracefully. Returns an error if the scenario is not running or fails to stop within the timeout.

func (*Spammer) Start

func (s *Spammer) Start() error

Start begins execution of the spammer's scenario in a separate goroutine. It updates the status to running in the database and launches the scenario runner. Returns an error if the database update fails.

type SpammerConfig

type SpammerConfig struct {
	Seed           string       `yaml:"seed"`
	RefillAmount   *uint256.Int `yaml:"refill_amount"`
	RefillBalance  *uint256.Int `yaml:"refill_balance"`
	RefillInterval uint64       `yaml:"refill_interval"`
	WalletCount    int          `yaml:"wallet_count"`
}

SpammerConfig defines the wallet configuration for a spammer instance. This includes the seed for deterministic wallet generation and funding parameters.

type SpammerStatus

type SpammerStatus int

SpammerStatus represents the execution state of a spammer instance. It tracks whether the spammer is paused, running, finished, or failed.

const (
	// SpammerStatusPaused indicates the spammer is stopped and can be resumed
	SpammerStatusPaused SpammerStatus = iota
	// SpammerStatusRunning indicates the spammer is actively executing its scenario
	SpammerStatusRunning
	// SpammerStatusFinished indicates the spammer completed its scenario successfully
	SpammerStatusFinished
	// SpammerStatusFailed indicates the spammer encountered an error and stopped
	SpammerStatusFailed
)

type StartupSpammerConfig added in v1.1.1

type StartupSpammerConfig struct {
	Scenario    string                 `yaml:"scenario"`
	Name        string                 `yaml:"name"`
	Description string                 `yaml:"description"`
	Config      map[string]interface{} `yaml:"config"`
}

StartupSpammerConfig represents a single spammer configuration in the startup config file. It defines the scenario to run, display information, and custom configuration overrides that will be merged with default scenario and wallet configurations.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL