95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
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
|
|
}
|