xref: /spdk/examples/go/hello_gorpc/hello_gorpc.go (revision 150b302cdcf4f8d2a7ea2bbe0341e0fc49848cce)
1*fa79ecf8SEmilia Haligowska/*   SPDX-License-Identifier: BSD-3-Clause
2*fa79ecf8SEmilia Haligowska *   Copyright (C) 2023 Intel Corporation.
3*fa79ecf8SEmilia Haligowska *   All rights reserved.
4*fa79ecf8SEmilia Haligowska */
5*fa79ecf8SEmilia Haligowska
6*fa79ecf8SEmilia Haligowskapackage main
7*fa79ecf8SEmilia Haligowska
8*fa79ecf8SEmilia Haligowskaimport (
9*fa79ecf8SEmilia Haligowska	"encoding/json"
10*fa79ecf8SEmilia Haligowska	"flag"
11*fa79ecf8SEmilia Haligowska	"fmt"
12*fa79ecf8SEmilia Haligowska	"github.com/spdk/spdk/go/rpc/client"
13*fa79ecf8SEmilia Haligowska	"log"
14*fa79ecf8SEmilia Haligowska	"os"
15*fa79ecf8SEmilia Haligowska)
16*fa79ecf8SEmilia Haligowska
17*fa79ecf8SEmilia Haligowskaconst (
18*fa79ecf8SEmilia Haligowska	socketAddress   = "/var/tmp/spdk.sock"
19*fa79ecf8SEmilia Haligowska	bDevGetBDevs    = "bdev_get_bdevs"
20*fa79ecf8SEmilia Haligowska	defaultBdevName = ""
21*fa79ecf8SEmilia Haligowska	defaultTimeout  = 0
22*fa79ecf8SEmilia Haligowska)
23*fa79ecf8SEmilia Haligowska
24*fa79ecf8SEmilia Haligowskafunc main() {
25*fa79ecf8SEmilia Haligowska
26*fa79ecf8SEmilia Haligowska	//create client
27*fa79ecf8SEmilia Haligowska	rpcClient, err := client.CreateClientWithJsonCodec(client.Unix, socketAddress)
28*fa79ecf8SEmilia Haligowska	if err != nil {
29*fa79ecf8SEmilia Haligowska		log.Fatalf("error on client creation, err: %s", err.Error())
30*fa79ecf8SEmilia Haligowska	}
31*fa79ecf8SEmilia Haligowska	defer rpcClient.Close()
32*fa79ecf8SEmilia Haligowska
33*fa79ecf8SEmilia Haligowska	//sends a JSON-RPC 2.0 request with "bdev_get_bdevs" method and provided params
34*fa79ecf8SEmilia Haligowska	resp, err := rpcClient.Call(bDevGetBDevs, getBDevParams())
35*fa79ecf8SEmilia Haligowska	if err != nil {
36*fa79ecf8SEmilia Haligowska		log.Fatalf("error on JSON-RPC call, method: %s err: %s", bDevGetBDevs, err.Error())
37*fa79ecf8SEmilia Haligowska	}
38*fa79ecf8SEmilia Haligowska
39*fa79ecf8SEmilia Haligowska	result, err := json.Marshal(resp.Result)
40*fa79ecf8SEmilia Haligowska	if err != nil {
41*fa79ecf8SEmilia Haligowska		log.Print(fmt.Errorf("error when creating json string representation: %w", err).Error())
42*fa79ecf8SEmilia Haligowska	}
43*fa79ecf8SEmilia Haligowska
44*fa79ecf8SEmilia Haligowska	fmt.Printf("%s\n", string(result))
45*fa79ecf8SEmilia Haligowska}
46*fa79ecf8SEmilia Haligowska
47*fa79ecf8SEmilia Haligowskafunc getBDevParams() map[string]any {
48*fa79ecf8SEmilia Haligowska	fs := flag.NewFlagSet("set", flag.ContinueOnError)
49*fa79ecf8SEmilia Haligowska	fs.String("name", defaultBdevName, "Name of the Blockdev")
50*fa79ecf8SEmilia Haligowska	fs.Int("timeout", defaultTimeout, "Time in ms to wait for the bdev to appear")
51*fa79ecf8SEmilia Haligowska
52*fa79ecf8SEmilia Haligowska	err := fs.Parse(os.Args[1:])
53*fa79ecf8SEmilia Haligowska	if err != nil {
54*fa79ecf8SEmilia Haligowska		log.Fatalf("%s\n", err.Error())
55*fa79ecf8SEmilia Haligowska	}
56*fa79ecf8SEmilia Haligowska
57*fa79ecf8SEmilia Haligowska	paramsMap := make(map[string]any)
58*fa79ecf8SEmilia Haligowska	fs.Visit(func(f *flag.Flag) {
59*fa79ecf8SEmilia Haligowska		paramsMap[f.Name] = f.Value
60*fa79ecf8SEmilia Haligowska	})
61*fa79ecf8SEmilia Haligowska
62*fa79ecf8SEmilia Haligowska	return paramsMap
63*fa79ecf8SEmilia Haligowska}
64