2022-11-04 20:06:50 +01:00
|
|
|
package builder
|
|
|
|
|
|
|
|
import (
|
|
|
|
"beelzebub/parser"
|
|
|
|
"beelzebub/tracer"
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
2023-03-31 20:03:42 +02:00
|
|
|
|
2022-11-04 20:06:50 +01:00
|
|
|
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
|
2023-03-31 20:03:42 +02:00
|
|
|
d.builder.beelzebubCoreConfigurations = beelzebubCoreConfigurations
|
2022-11-04 20:06:50 +01:00
|
|
|
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())
|
|
|
|
}
|
|
|
|
}
|