Просмотр исходного кода

dummy backend uses the decorator pattern with two decorators: "debugger" and header parser

flashmob 8 лет назад
Родитель
Сommit
44ad353b08
4 измененных файлов с 34 добавлено и 10 удалено
  1. 8 0
      backends/backend.go
  2. 22 3
      backends/debugger.go
  3. 4 6
      backends/dummy.go
  4. 0 1
      backends/headers_parser.go

+ 8 - 0
backends/backend.go

@@ -31,6 +31,9 @@ type Worker interface {
 	// parse the configuration files
 	// parse the configuration files
 	loadConfig(BackendConfig) error
 	loadConfig(BackendConfig) error
 
 
+	AddConfigLoader(f ConfigLoaderFunc)
+	AddConfigTester(f ConfigTesterFunc)
+
 	Shutdown() error
 	Shutdown() error
 	Process(*envelope.Envelope) BackendResult
 	Process(*envelope.Envelope) BackendResult
 	Initialize(BackendConfig) error
 	Initialize(BackendConfig) error
@@ -38,6 +41,11 @@ type Worker interface {
 	SetProcessors(p ...Decorator)
 	SetProcessors(p ...Decorator)
 }
 }
 
 
+type DecoratorCallbacks struct {
+	loader ConfigLoaderFunc
+	tester ConfigTesterFunc
+}
+
 type BackendConfig map[string]interface{}
 type BackendConfig map[string]interface{}
 
 
 var backends = map[string]Worker{}
 var backends = map[string]Worker{}

+ 22 - 3
backends/debugger.go

@@ -4,11 +4,30 @@ import (
 	"github.com/flashmob/go-guerrilla/envelope"
 	"github.com/flashmob/go-guerrilla/envelope"
 )
 )
 
 
-func Debugger() Decorator {
+type debuggerConfig struct {
+	LogReceivedMails bool `json:"log_received_mails"`
+}
+
+func Debugger(dc *DecoratorCallbacks) Decorator {
+
+	var config *debuggerConfig
+	dc.loader = func(backendConfig BackendConfig) error {
+		configType := baseConfig(&debuggerConfig{})
+		bcfg, err := ab.extractConfig(backendConfig, configType)
+		if err != nil {
+			return err
+		}
+		config = bcfg.(*debuggerConfig)
+		return nil
+	}
+
 	return func(c Processor) Processor {
 	return func(c Processor) Processor {
 		return ProcessorFunc(func(e *envelope.Envelope) (BackendResult, error) {
 		return ProcessorFunc(func(e *envelope.Envelope) (BackendResult, error) {
-			mainlog.Infof("Mail from: %s / to: %v", e.MailFrom.String(), e.RcptTo)
-			mainlog.Info("So, Headers are: %s", e.Header)
+			if config.LogReceivedMails {
+				mainlog.Infof("Mail from: %s / to: %v", e.MailFrom.String(), e.RcptTo)
+				mainlog.Info("So, Headers are: %s", e.Header)
+			}
+			// continue to the next Processor in the decorator chain
 			return c.Process(e)
 			return c.Process(e)
 		})
 		})
 	}
 	}

+ 4 - 6
backends/dummy.go

@@ -1,12 +1,10 @@
 package backends
 package backends
 
 
 func init() {
 func init() {
-	backends["dummy"] = &AbstractBackend{
-		Extend: &DummyBackend{},
-	}
-
-	backends["dummy"].SetProcessors(Debugger(), HeadersParser())
-
+	backends["dummy"] = &AbstractBackend{}
+	cb := &DecoratorCallbacks{}
+	backends["dummy"].SetProcessors(Debugger(cb), HeadersParser())
+	backends["dummy"].AddConfigLoader(cb.loader)
 }
 }
 
 
 // custom configuration we will parse from the json
 // custom configuration we will parse from the json

+ 0 - 1
backends/headers_parser.go

@@ -7,7 +7,6 @@ import (
 func HeadersParser() Decorator {
 func HeadersParser() Decorator {
 	return func(c Processor) Processor {
 	return func(c Processor) Processor {
 		return ProcessorFunc(func(e *envelope.Envelope) (BackendResult, error) {
 		return ProcessorFunc(func(e *envelope.Envelope) (BackendResult, error) {
-			mainlog.Info("parse headers")
 			e.ParseHeaders()
 			e.ParseHeaders()
 			return c.Process(e)
 			return c.Process(e)
 		})
 		})