Skip to main content

Module Lifecycle Hooks

Initialize resources and clean up gracefully.

Lifecycle Phases​

Registration → Initialize → Configure → Execute → Cleanup

Initialize()​

One-time setup called before any scans.

Use cases:

  • Open persistent connections
  • Load data files
  • Allocate resources

Example:

func (m *Module) Initialize() error {
// Open database connection
db, err := sql.Open("postgres", m.dsn)
if err != nil {
return err
}
m.db = db

// Load signatures
m.signatures, err = loadSignatures("signatures.yaml")
return err
}

Configure()​

Apply scan-specific configuration.

Example:

func (m *Module) Configure(config Config) error {
m.timeout = config.GetDuration("timeout")
m.concurrency = config.GetInt("concurrency")

if m.concurrency < 1 {
return errors.New("concurrency must be >= 1")
}

return nil
}

Execute()​

Perform module work (called per scan).

Example:

func (m *Module) Execute(ctx context.Context, data DataContext) error {
// Main module logic
return nil
}

Cleanup()​

Release resources when module unloads.

Example:

func (m *Module) Cleanup() error {
if m.db != nil {
return m.db.Close()
}
return nil
}

See Custom Modules for development guide.