package agents import ( "encoding/json" "fmt" "log" agent "system-trace/core/amqp/types" "github.com/wagslane/go-rabbitmq" ) var mainQueueName string = "SYSTEM_TRACE_MAIN" func CreateMainQueueConsumer(broker *rabbitmq.Conn) { consumer, err := rabbitmq.NewConsumer( broker, mainQueueName, rabbitmq.WithConsumerOptionsRoutingKey(""), rabbitmq.WithConsumerOptionsExchangeName("controller"), rabbitmq.WithConsumerOptionsExchangeDeclare, ) if err != nil { log.Fatal(err) } if err = consumer.Run(handleMessageFromMainQueue); err != nil { log.Fatal(err) } } func handleMessageFromMainQueue(message rabbitmq.Delivery) rabbitmq.Action { am := new(agent.AgentMessage) if err := json.Unmarshal(message.Body, &am); err != nil { // TODO error log return rabbitmq.NackDiscard } action := handleAgentMessage(am) return action } func handleAgentMessage(message *agent.AgentMessage) rabbitmq.Action { switch message.Message { case agent.AGENT_HELLO: { if message.Data == nil { fmt.Println("No data in received message hello") // TODO error log return rabbitmq.NackDiscard } if len(message.Data.Hostname) <= 0 { fmt.Println("Hostname field are not presented in received message hello") // TODO error log return rabbitmq.NackDiscard } if len(message.Data.Interfaces) <= 0 { fmt.Println("Interfaces field are not presented in received message hello") // TODO error log return rabbitmq.NackDiscard } if len(message.Data.Version) <= 0 { fmt.Println("Version field are not presented in received message hello") // TODO error log return rabbitmq.NackDiscard } // TODO create or update agent from hello message return rabbitmq.Ack } case agent.AGENT_ERROR: { if message.Data == nil { fmt.Println("No data in received message hello") // TODO error log return rabbitmq.NackDiscard } if len(message.Data.Error) <= 0 { fmt.Println("Error field are not presented in received message hello") // TODO error log return rabbitmq.NackDiscard } // TODO save log return rabbitmq.Ack } // case agent.AGENT_STATUS: // { // } // case agent.AGENT_PING: // { // } } return rabbitmq.NackDiscard }