diff --git a/api/admin/service.go b/api/admin/service.go index c947d90e7d1..f2b813a6b85 100644 --- a/api/admin/service.go +++ b/api/admin/service.go @@ -10,6 +10,7 @@ import ( "github.com/ava-labs/gecko/api" "github.com/ava-labs/gecko/chains" + "github.com/ava-labs/gecko/ids" "github.com/ava-labs/gecko/snow/engine/common" "github.com/ava-labs/gecko/utils/logging" @@ -18,6 +19,7 @@ import ( // Admin is the API service for node admin management type Admin struct { + nodeID ids.ShortID networkID uint32 log logging.Logger networking Networking @@ -27,12 +29,13 @@ type Admin struct { } // NewService returns a new admin API service -func NewService(networkID uint32, log logging.Logger, chainManager chains.Manager, peers Peerable, httpServer *api.Server) *common.HTTPHandler { +func NewService(nodeID ids.ShortID, networkID uint32, log logging.Logger, chainManager chains.Manager, peers Peerable, httpServer *api.Server) *common.HTTPHandler { newServer := rpc.NewServer() codec := cjson.NewCodec() newServer.RegisterCodec(codec, "application/json") newServer.RegisterCodec(codec, "application/json;charset=UTF-8") newServer.RegisterService(&Admin{ + nodeID: nodeID, networkID: networkID, log: log, chainManager: chainManager, @@ -44,6 +47,22 @@ func NewService(networkID uint32, log logging.Logger, chainManager chains.Manage return &common.HTTPHandler{Handler: newServer} } +// GetNodeIDArgs are the arguments for calling GetNodeID +type GetNodeIDArgs struct{} + +// GetNodeIDReply are the results from calling GetNodeID +type GetNodeIDReply struct { + NodeID ids.ShortID `json:"nodeID"` +} + +// GetNodeID returns the node ID of this node +func (service *Admin) GetNodeID(r *http.Request, args *GetNodeIDArgs, reply *GetNodeIDReply) error { + service.log.Debug("Admin: GetNodeID called") + + reply.NodeID = service.nodeID + return nil +} + // GetNetworkIDArgs are the arguments for calling GetNetworkID type GetNetworkIDArgs struct{} diff --git a/node/node.go b/node/node.go index 7a37690f53a..a6ce35d0be9 100644 --- a/node/node.go +++ b/node/node.go @@ -449,7 +449,7 @@ func (n *Node) initMetricsAPI() { func (n *Node) initAdminAPI() { if n.Config.AdminAPIEnabled { n.Log.Info("initializing Admin API") - service := admin.NewService(n.Config.NetworkID, n.Log, n.chainManager, n.ValidatorAPI.Connections(), &n.APIServer) + service := admin.NewService(n.ID, n.Config.NetworkID, n.Log, n.chainManager, n.ValidatorAPI.Connections(), &n.APIServer) n.APIServer.AddRoute(service, &sync.RWMutex{}, "admin", "", n.HTTPLog) } }