Checking in cmd files | first attempt at linking up item service
This commit is contained in:
27
services/item/cmd/item-cli/grpc.go
Normal file
27
services/item/cmd/item-cli/grpc.go
Normal file
@ -0,0 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
cli "crossnokaye-interview-assignment/services/item/gen/grpc/cli/item"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
goa "goa.design/goa/v3/pkg"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
)
|
||||
|
||||
func doGRPC(scheme, host string, timeout int, debug bool) (goa.Endpoint, any, error) {
|
||||
conn, err := grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "could not connect to gRPC server at %s: %v\n", host, err)
|
||||
}
|
||||
return cli.ParseEndpoint(conn)
|
||||
}
|
||||
|
||||
func grpcUsageCommands() string {
|
||||
return cli.UsageCommands()
|
||||
}
|
||||
|
||||
func grpcUsageExamples() string {
|
||||
return cli.UsageExamples()
|
||||
}
|
120
services/item/cmd/item-cli/main.go
Normal file
120
services/item/cmd/item-cli/main.go
Normal file
@ -0,0 +1,120 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
goa "goa.design/goa/v3/pkg"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var (
|
||||
hostF = flag.String("host", "localhost", "Server host (valid values: localhost)")
|
||||
addrF = flag.String("url", "", "URL to service host")
|
||||
|
||||
verboseF = flag.Bool("verbose", false, "Print request and response details")
|
||||
vF = flag.Bool("v", false, "Print request and response details")
|
||||
timeoutF = flag.Int("timeout", 30, "Maximum number of seconds to wait for response")
|
||||
)
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
var (
|
||||
addr string
|
||||
timeout int
|
||||
debug bool
|
||||
)
|
||||
{
|
||||
addr = *addrF
|
||||
if addr == "" {
|
||||
switch *hostF {
|
||||
case "localhost":
|
||||
addr = "grpc://localhost:8082"
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "invalid host argument: %q (valid hosts: localhost)\n", *hostF)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
timeout = *timeoutF
|
||||
debug = *verboseF || *vF
|
||||
}
|
||||
|
||||
var (
|
||||
scheme string
|
||||
host string
|
||||
)
|
||||
{
|
||||
u, err := url.Parse(addr)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "invalid URL %#v: %s\n", addr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
scheme = u.Scheme
|
||||
host = u.Host
|
||||
}
|
||||
var (
|
||||
endpoint goa.Endpoint
|
||||
payload any
|
||||
err error
|
||||
)
|
||||
{
|
||||
switch scheme {
|
||||
case "grpc", "grpcs":
|
||||
endpoint, payload, err = doGRPC(scheme, host, timeout, debug)
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "invalid scheme: %q (valid schemes: grpc)\n", scheme)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
if err == flag.ErrHelp {
|
||||
os.Exit(0)
|
||||
}
|
||||
fmt.Fprintln(os.Stderr, err.Error())
|
||||
fmt.Fprintln(os.Stderr, "run '"+os.Args[0]+" --help' for detailed usage.")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
data, err := endpoint(context.Background(), payload)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if data != nil {
|
||||
m, _ := json.MarshalIndent(data, "", " ")
|
||||
fmt.Println(string(m))
|
||||
}
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Fprintf(os.Stderr, `%s is a command line client for the item API.
|
||||
|
||||
Usage:
|
||||
%s [-host HOST][-url URL][-timeout SECONDS][-verbose|-v] SERVICE ENDPOINT [flags]
|
||||
|
||||
-host HOST: server host (localhost). valid values: localhost
|
||||
-url URL: specify service URL overriding host URL (http://localhost:8080)
|
||||
-timeout: maximum number of seconds to wait for response (30)
|
||||
-verbose|-v: print request and response details (false)
|
||||
|
||||
Commands:
|
||||
%s
|
||||
Additional help:
|
||||
%s SERVICE [ENDPOINT] --help
|
||||
|
||||
Example:
|
||||
%s
|
||||
`, os.Args[0], os.Args[0], indent(grpcUsageCommands()), os.Args[0], indent(grpcUsageExamples()))
|
||||
}
|
||||
|
||||
func indent(s string) string {
|
||||
if s == "" {
|
||||
return ""
|
||||
}
|
||||
return " " + strings.Replace(s, "\n", "\n ", -1)
|
||||
}
|
Reference in New Issue
Block a user