diff --git a/ceph/ceph.go b/ceph/ceph.go index d8ef5ea..e2bfa6e 100644 --- a/ceph/ceph.go +++ b/ceph/ceph.go @@ -1,29 +1,59 @@ package main import ( + "encoding/json" "fmt" "log" "github.com/ceph/go-ceph/rados" ) +func getPoolSize(cephConn *cephConnection, params string) Poolinfo { + monRawAnswer := makeMonQuery(cephConn, map[string]string{"prefix": "osd pool get", "pool": params, + "format": "json", "var": "size"}) + monAnswer := Poolinfo{} + if err := json.Unmarshal([]byte(monRawAnswer), &monAnswer); err != nil { + log.Fatalf("Can't parse monitor answer. Error: %v", err) + } + return monAnswer + +} + + + +func makeMonQuery(cephConn *cephConnection, query map[string]string) []byte { + monJson, err := json.Marshal(query) + if err != nil { + log.Fatalf("Can't marshal json mon query. Error: %v", err) + } + + monRawAnswer, _, err := cephConn.conn.MonCommand(monJson) + if err != nil { + log.Fatalf("Failed exec monCommand. Error: %v", err) + } + return monRawAnswer +} + func main() { + var connect cephConnection + var err error + fmt.Println("Creating connection object") - conn,err := rados.NewConn() + connect.conn,err = rados.NewConn() if err != nil { log.Fatal("Cannot create Connection object\n") } - conn.ReadConfigFile("/etc/ceph/ceph.conf") - conn.Connect() - defer conn.Shutdown() + connect.conn.ReadConfigFile("/etc/ceph/ceph.conf") + connect.conn.Connect() + defer connect.conn.Shutdown() - poolnames,err := conn.ListPools() - if err != nil { - log.Fatal("Cannot list pools") - } + // poolnames,err := connect.conn.ListPools() + // if err != nil { + // log.Fatal("Cannot list pools") + // } - for i,j := range poolnames { - fmt.Printf("%d %s\n",i,j) - } + // for i,j := range poolnames { + // fmt.Printf("%d %s\n",i,j) } + diff --git a/ceph/types.go b/ceph/types.go index 428f2ed..7ff640d 100644 --- a/ceph/types.go +++ b/ceph/types.go @@ -1,9 +1,23 @@ -// package main +package main + +import "github.com/ceph/go-ceph/rados" + + +type cephConnection struct { + conn *rados.Conn +} + +type Poolinfo struct { + Pool string `json:"pool,omitempty"` + PoolId uint64 `json:"pool_id,omitempty"` + Size uint64 `json:"size,omitempty"` +} + +type Device struct { + Class string `json:"class"` + ID int64 `json:"id"` + Name string `json:"name"` + Info OsdMetadata +} -// const config = "/etc/ceph/ceph.conf" -// type params struct { -// cluster string -// user string -// config string -// } diff --git a/headFirst/json/go.mod b/headFirst/json/go.mod new file mode 100644 index 0000000..2359d15 --- /dev/null +++ b/headFirst/json/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.24.6 diff --git a/headFirst/json/main.go b/headFirst/json/main.go new file mode 100644 index 0000000..47f2729 --- /dev/null +++ b/headFirst/json/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" +) +func main() { + input := `{ + "name": "John Doe", + "age": 15, + "hobbies": ["climbing", "cycling", "running"] + }` + + var target map[string]any + + err := json.Unmarshal([]byte(input), &target) + if err != nil { + log.Fatalf("Unable to marshal JSON due to %s", err) + } + + for k, v := range target { + fmt.Printf("k: %s, v: %v\n", k, v) + } +}