Initial commit: IT Nexus Web-App
This commit is contained in:
50
nexus-scanner/internal/module/module.go
Normal file
50
nexus-scanner/internal/module/module.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package module
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Module is the interface every scanner module must implement.
|
||||
type Module interface {
|
||||
// Name returns the unique identifier for this module (e.g. "arp_discovery").
|
||||
Name() string
|
||||
|
||||
// Interval returns how often the scheduler should run this module.
|
||||
// A zero duration means the module runs once on startup only.
|
||||
Interval() time.Duration
|
||||
|
||||
// Run executes one scan cycle. It must respect ctx cancellation.
|
||||
Run(ctx context.Context) error
|
||||
}
|
||||
|
||||
// Registry holds all registered modules.
|
||||
type Registry struct {
|
||||
modules []Module
|
||||
}
|
||||
|
||||
// NewRegistry returns an empty module registry.
|
||||
func NewRegistry() *Registry {
|
||||
return &Registry{}
|
||||
}
|
||||
|
||||
// Register adds a module to the registry.
|
||||
func (r *Registry) Register(m Module) {
|
||||
r.modules = append(r.modules, m)
|
||||
}
|
||||
|
||||
// All returns all registered modules.
|
||||
func (r *Registry) All() []Module {
|
||||
return r.modules
|
||||
}
|
||||
|
||||
// Get returns the module with the given name.
|
||||
func (r *Registry) Get(name string) (Module, error) {
|
||||
for _, m := range r.modules {
|
||||
if m.Name() == name {
|
||||
return m, nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("module %q not registered", name)
|
||||
}
|
||||
Reference in New Issue
Block a user