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  }