85 lines
3.2 KiB
Go
85 lines
3.2 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package discovery
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/hyperledger/fabric/cmd/common"
|
|
discovery "github.com/hyperledger/fabric/discovery/client"
|
|
"gopkg.in/alecthomas/kingpin.v2"
|
|
)
|
|
|
|
const (
|
|
PeersCommand = "peers"
|
|
ConfigCommand = "config"
|
|
EndorsersCommand = "endorsers"
|
|
)
|
|
|
|
// responseParserWriter defines the stdout
|
|
var responseParserWriter = os.Stdout
|
|
|
|
const (
|
|
defaultTimeout = time.Second * 10
|
|
)
|
|
|
|
//go:generate mockery -dir . -name Stub -case underscore -output mocks/
|
|
|
|
// Stub represents the remote discovery service
|
|
type Stub interface {
|
|
// Send sends the request, and receives a response
|
|
Send(server string, conf common.Config, req *discovery.Request) (ServiceResponse, error)
|
|
}
|
|
|
|
//go:generate mockery -dir . -name ResponseParser -case underscore -output mocks/
|
|
|
|
// ResponseParser parses responses sent from the server
|
|
type ResponseParser interface {
|
|
// ParseResponse parses the response and uses the given output when emitting data
|
|
ParseResponse(channel string, response ServiceResponse) error
|
|
}
|
|
|
|
//go:generate mockery -dir . -name CommandRegistrar -case underscore -output mocks/
|
|
|
|
// CommandRegistrar registers commands
|
|
type CommandRegistrar interface {
|
|
// Command adds a new top-level command to the CLI
|
|
Command(name, help string, onCommand common.CLICommand) *kingpin.CmdClause
|
|
}
|
|
|
|
// AddCommands registers the discovery commands to the given CommandRegistrar
|
|
func AddCommands(cli CommandRegistrar) {
|
|
peerCmd := NewPeerCmd(&ClientStub{}, &PeerResponseParser{Writer: responseParserWriter})
|
|
peers := cli.Command(PeersCommand, "Discover peers", peerCmd.Execute)
|
|
server := peers.Flag("server", "Sets the endpoint of the server to connect").String()
|
|
channel := peers.Flag("channel", "Sets the channel the query is intended to").String()
|
|
peerCmd.SetServer(server)
|
|
peerCmd.SetChannel(channel)
|
|
|
|
configCmd := NewConfigCmd(&ClientStub{}, &ConfigResponseParser{Writer: responseParserWriter})
|
|
config := cli.Command(ConfigCommand, "Discover channel config", configCmd.Execute)
|
|
server = config.Flag("server", "Sets the endpoint of the server to connect").String()
|
|
channel = config.Flag("channel", "Sets the channel the query is intended to").String()
|
|
configCmd.SetServer(server)
|
|
configCmd.SetChannel(channel)
|
|
|
|
endorserCmd := NewEndorsersCmd(&RawStub{}, &EndorserResponseParser{Writer: responseParserWriter})
|
|
endorsers := cli.Command(EndorsersCommand, "Discover chaincode endorsers", endorserCmd.Execute)
|
|
chaincodes := endorsers.Flag("chaincode", "Specifies the chaincode name(s)").Strings()
|
|
collections := endorsers.Flag("collection", "Specifies the collection name(s) as a mapping from chaincode to a comma separated list of collections").PlaceHolder("CC:C1,C2").StringMap()
|
|
noPrivReads := endorsers.Flag("noPrivateReads", "Specifies chaincodes that are not expected to be have private data read").PlaceHolder("CHAINCODE").Strings()
|
|
|
|
server = endorsers.Flag("server", "Sets the endpoint of the server to connect").String()
|
|
channel = endorsers.Flag("channel", "Sets the channel the query is intended to").String()
|
|
endorserCmd.SetChannel(channel)
|
|
endorserCmd.SetServer(server)
|
|
endorserCmd.SetChaincodes(chaincodes)
|
|
endorserCmd.SetCollections(collections)
|
|
endorserCmd.SetNoPrivateReads(noPrivReads)
|
|
}
|