Files
beelzebub/builder/Director.go
Mario Candela 5bfdff7097 Refactored initialization Beelzebub core with Builder Pattern (#14)
* Fixed deprecated function

* Coded builder pattern

* coded the first version builder

* coded rabbitmq into Builder.go

* Refactored builder, and configured director

* refactoring rabbitmq eventtracing

* Refactoring builder, managed close connections

* Fixed typos

Co-authored-by: mariocandela <mario.candela@nttdata.com>
2022-11-04 20:06:50 +01:00

68 lines
1.7 KiB
Go

package builder
import (
"beelzebub/parser"
"beelzebub/tracer"
"context"
"encoding/json"
amqp "github.com/rabbitmq/amqp091-go"
log "github.com/sirupsen/logrus"
)
type Director struct {
builder *Builder
}
func NewDirector(builder *Builder) *Director {
return &Director{
builder: builder,
}
}
func (d *Director) BuildBeelzebub(beelzebubCoreConfigurations *parser.BeelzebubCoreConfigurations, beelzebubServicesConfiguration []parser.BeelzebubServiceConfiguration) (*Builder, error) {
d.builder.beelzebubServicesConfiguration = beelzebubServicesConfiguration
if err := d.builder.buildLogger(beelzebubCoreConfigurations.Core.Logging); err != nil {
return nil, err
}
d.builder.setTraceStrategy(d.standardOutStrategy)
if beelzebubCoreConfigurations.Core.Tracing.RabbitMQEnabled {
d.builder.setTraceStrategy(d.rabbitMQTraceStrategy)
err := d.builder.buildRabbitMQ(beelzebubCoreConfigurations.Core.Tracing.RabbitMQURI)
if err != nil {
return nil, err
}
}
return d.builder.build(), nil
}
func (d *Director) standardOutStrategy(event tracer.Event) {
log.WithFields(log.Fields{
"status": event.Status,
"event": event,
}).Info("New Event")
}
func (d *Director) rabbitMQTraceStrategy(event tracer.Event) {
log.WithFields(log.Fields{
"status": event.Status,
"event": event,
}).Info("New Event")
log.Debug("Push Event on queue")
eventJSON, err := json.Marshal(event)
if err != nil {
log.Error(err.Error())
return
}
publishing := amqp.Publishing{ContentType: "application/json", Body: eventJSON}
if err = d.builder.rabbitMQChannel.PublishWithContext(context.TODO(), "", RabbitmqQueueName, false, false, publishing); err != nil {
log.Error(err.Error())
}
}