mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-13 17:10:36 +00:00
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package eventbroker
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/bitechdev/ResolveSpec/pkg/config"
|
|
)
|
|
|
|
// NewProviderFromConfig creates a provider based on configuration
|
|
func NewProviderFromConfig(cfg config.EventBrokerConfig) (Provider, error) {
|
|
switch cfg.Provider {
|
|
case "memory":
|
|
cleanupInterval := 5 * time.Minute
|
|
if cfg.Database.PollInterval > 0 {
|
|
cleanupInterval = cfg.Database.PollInterval
|
|
}
|
|
|
|
return NewMemoryProvider(MemoryProviderOptions{
|
|
InstanceID: getInstanceID(cfg.InstanceID),
|
|
MaxEvents: 10000,
|
|
CleanupInterval: cleanupInterval,
|
|
}), nil
|
|
|
|
case "redis":
|
|
// Redis provider will be implemented in Phase 8
|
|
return nil, fmt.Errorf("redis provider not yet implemented")
|
|
|
|
case "nats":
|
|
// NATS provider will be implemented in Phase 9
|
|
return nil, fmt.Errorf("nats provider not yet implemented")
|
|
|
|
case "database":
|
|
// Database provider will be implemented in Phase 7
|
|
return nil, fmt.Errorf("database provider not yet implemented")
|
|
|
|
default:
|
|
return nil, fmt.Errorf("unknown provider: %s", cfg.Provider)
|
|
}
|
|
}
|
|
|
|
// getInstanceID returns the instance ID, defaulting to hostname if not specified
|
|
func getInstanceID(configID string) string {
|
|
if configID != "" {
|
|
return configID
|
|
}
|
|
|
|
// Try to get hostname
|
|
if hostname, err := os.Hostname(); err == nil {
|
|
return hostname
|
|
}
|
|
|
|
// Fallback to a default
|
|
return "resolvespec-instance"
|
|
}
|