package api

func (c *Sys) Health() (*HealthResponse, error) {
	r := c.c.NewRequest("GET", "/v1/sys/health")
	// If the code is 400 or above it will automatically turn into an error,
	// but the sys/health API defaults to returning 5xx when not sealed or
	// inited, so we force this code to be something else so we parse correctly
	r.Params.Add("sealedcode", "299")
	r.Params.Add("uninitcode", "299")
	resp, err := c.c.RawRequest(r)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	var result HealthResponse
	err = resp.DecodeJSON(&result)
	return &result, err
}

type HealthResponse struct {
	Initialized         bool   `json:"initialized"`
	Sealed              bool   `json:"sealed"`
	Standby             bool   `json:"standby"`
	ReplicationPerfMode string `json:"replication_perf_mode"`
	ReplicationDRMode   string `json:"replication_dr_mode"`
	ServerTimeUTC       int64  `json:"server_time_utc"`
	Version             string `json:"version"`
	ClusterName         string `json:"cluster_name,omitempty"`
	ClusterID           string `json:"cluster_id,omitempty"`
}

package api

func (c *Sys) Health() (*HealthResponse, error) {
	r := c.c.NewRequest("GET", "/v1/sys/health")
	// If the code is 400 or above it will automatically turn into an error,
	// but the sys/health API defaults to returning 5xx when not sealed or
	// inited, so we force this code to be something else so we parse correctly
	r.Params.Add("uninitcode", "299")
	r.Params.Add("sealedcode", "299")
	r.Params.Add("standbycode", "299")
	r.Params.Add("drsecondarycode", "299")
	resp, err := c.c.RawRequest(r)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	var result HealthResponse
	err = resp.DecodeJSON(&result)
	return &result, err
}

type HealthResponse struct {
	Initialized         bool   `json:"initialized"`
	Sealed              bool   `json:"sealed"`
	Standby             bool   `json:"standby"`
	ReplicationPerfMode string `json:"replication_perf_mode"`
	ReplicationDRMode   string `json:"replication_dr_mode"`
	ServerTimeUTC       int64  `json:"server_time_utc"`
	Version             string `json:"version"`
	ClusterName         string `json:"cluster_name,omitempty"`
	ClusterID           string `json:"cluster_id,omitempty"`
}

Allow API to return health response when in a custom state
Allow API to return health response when in a custom state
