simplify json unmarshalling

This commit is contained in:
Sergey Dudoladov 2020-04-08 09:38:27 +02:00
parent 7a37693c4d
commit 5ae17aae5e
1 changed files with 10 additions and 32 deletions

View File

@ -3,6 +3,7 @@ package patroni
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net"
@ -28,30 +29,6 @@ type Interface interface {
GetNodeState(pod *v1.Pod) (string, error)
}
// HttpGetResponse contains data returned by Get to host/8008
type HttpGetResponse struct {
State string `json:"state,omitempty"`
PostmasterStartTime string `json:"posmaster_start_time,omitempty"`
Role string `json:"role,omitempty"`
ServerVersion int `json:"server_version,omitempty"`
ClusterUnlocked bool `json:"cluster_unlocked,omitempty"`
Timeline int `json:"timeline,omitempty"`
Xlog Xlog `json:"xlog"`
DatabaseSystemIdentifier string `json:"database_system_indetifier,omitempty"`
PatroniInfo Info `json:"patroni"`
}
// Xlog contains wal locaiton
type Xlog struct {
Location int `json:"location"`
}
// Info cotains Patroni version and cluser scope
type Info struct {
Version string `json:"version,omitempty"`
Scope string `json:"scope,omitempty"`
}
// Patroni API client
type Patroni struct {
httpClient *http.Client
@ -152,8 +129,6 @@ func (p *Patroni) SetPostgresParameters(server *v1.Pod, parameters map[string]st
//GetNodeState returns node state reported by Patroni API call.
func (p *Patroni) GetNodeState(server *v1.Pod) (string, error) {
var pResponse HttpGetResponse
apiURLString, err := apiURL(server)
if err != nil {
return "", err
@ -164,19 +139,22 @@ func (p *Patroni) GetNodeState(server *v1.Pod) (string, error) {
}
defer response.Body.Close()
p.logger.Infof("http get response: %+v", response)
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return "", fmt.Errorf("could not read response: %v", err)
}
err = json.Unmarshal(body, &pResponse)
data := make(map[string]interface{})
err = json.Unmarshal(body, &data)
if err != nil {
return "", fmt.Errorf("could not unmarshal response: %v", err)
return "", err
}
p.logger.Infof("parsed http get response: %+v", pResponse)
return pResponse.State, nil
state, ok := data["state"].(string)
if !ok {
return "", errors.New("Patroni Get call rerturned wrong type for 'state' field")
}
return state, nil
}