github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/providers/agent/mcorpc/golang/discovery/discovery.go (about) 1 // Copyright (c) 2020-2022, R.I. Pienaar and the Choria Project contributors 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 5 package discovery 6 7 import ( 8 "bytes" 9 "context" 10 "fmt" 11 12 "github.com/choria-io/go-choria/inter" 13 "github.com/choria-io/go-choria/internal/util" 14 "github.com/choria-io/go-choria/protocol" 15 "github.com/choria-io/go-choria/server" 16 "github.com/sirupsen/logrus" 17 18 "github.com/choria-io/go-choria/server/agents" 19 ) 20 21 type Agent struct { 22 meta *agents.Metadata 23 log *logrus.Entry 24 } 25 26 func New(mgr server.AgentManager) (*Agent, error) { 27 bi := util.BuildInfo() 28 29 a := &Agent{ 30 log: mgr.Logger().WithFields(logrus.Fields{"agent": "discovery"}), 31 meta: &agents.Metadata{ 32 Name: "discovery", 33 Description: "Discovery Agent", 34 Author: "R.I.Pienaar <rip@devco.net>", 35 Version: bi.Version(), 36 License: bi.License(), 37 Timeout: 2, 38 URL: "http://choria.io", 39 }, 40 } 41 42 return a, nil 43 } 44 45 func (da *Agent) SetServerInfo(agents.ServerInfoSource) {} 46 func (da *Agent) ServerInfo() agents.ServerInfoSource { return nil } 47 func (da *Agent) ShouldActivate() bool { return true } 48 49 func (da *Agent) Name() string { 50 return da.meta.Name 51 } 52 53 func (da *Agent) Metadata() *agents.Metadata { 54 return da.meta 55 } 56 57 func (da *Agent) HandleMessage(_ context.Context, msg inter.Message, request protocol.Request, _ inter.ConnectorInfo, result chan *agents.AgentReply) { 58 reply := &agents.AgentReply{ 59 Message: msg, 60 Request: request, 61 } 62 63 if bytes.Contains(msg.Payload(), []byte("ping")) { 64 da.log.Infof("Handling message %s for discovery#ping from %s", msg.RequestID(), request.CallerID()) 65 reply.Body = []byte("pong") 66 } else { 67 da.log.Errorf("Received unknown discovery message %s from %s", msg.RequestID(), request.CallerID()) 68 reply.Error = fmt.Errorf("unknown request: %s", msg.Payload()) 69 } 70 71 result <- reply 72 }