mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-31 08:44:25 +00:00
75 lines
2.0 KiB
Go
75 lines
2.0 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":
|
|
return NewRedisProvider(RedisProviderConfig{
|
|
Host: cfg.Redis.Host,
|
|
Port: cfg.Redis.Port,
|
|
Password: cfg.Redis.Password,
|
|
DB: cfg.Redis.DB,
|
|
StreamName: cfg.Redis.StreamName,
|
|
ConsumerGroup: cfg.Redis.ConsumerGroup,
|
|
ConsumerName: getInstanceID(cfg.InstanceID),
|
|
InstanceID: getInstanceID(cfg.InstanceID),
|
|
MaxLen: cfg.Redis.MaxLen,
|
|
})
|
|
|
|
case "nats":
|
|
// NATS provider initialization
|
|
// Note: Requires github.com/nats-io/nats.go dependency
|
|
return NewNATSProvider(NATSProviderConfig{
|
|
URL: cfg.NATS.URL,
|
|
StreamName: cfg.NATS.StreamName,
|
|
SubjectPrefix: "events",
|
|
InstanceID: getInstanceID(cfg.InstanceID),
|
|
MaxAge: cfg.NATS.MaxAge,
|
|
Storage: cfg.NATS.Storage, // "file" or "memory"
|
|
})
|
|
|
|
case "database":
|
|
// Database provider requires a database connection
|
|
// This should be provided externally
|
|
return nil, fmt.Errorf("database provider requires a database connection to be configured separately")
|
|
|
|
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"
|
|
}
|