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