Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package clients | |
import ( | |
"context" | |
"encoding/json" | |
"io" | |
"net/http" | |
"net/url" | |
"path" | |
enterrors "github.com/weaviate/weaviate/entities/errors" | |
"github.com/weaviate/weaviate/entities/models" | |
) | |
type RemoteNode struct { | |
client *http.Client | |
} | |
func NewRemoteNode(httpClient *http.Client) *RemoteNode { | |
return &RemoteNode{client: httpClient} | |
} | |
func (c *RemoteNode) GetNodeStatus(ctx context.Context, hostName, className, output string) (*models.NodeStatus, error) { | |
p := "/nodes/status" | |
if className != "" { | |
p = path.Join(p, className) | |
} | |
method := http.MethodGet | |
params := url.Values{"output": []string{output}} | |
url := url.URL{Scheme: "http", Host: hostName, Path: p, RawQuery: params.Encode()} | |
req, err := http.NewRequestWithContext(ctx, method, url.String(), nil) | |
if err != nil { | |
return nil, enterrors.NewErrOpenHttpRequest(err) | |
} | |
res, err := c.client.Do(req) | |
if err != nil { | |
return nil, enterrors.NewErrSendHttpRequest(err) | |
} | |
defer res.Body.Close() | |
body, _ := io.ReadAll(res.Body) | |
if res.StatusCode != http.StatusOK { | |
return nil, enterrors.NewErrUnexpectedStatusCode(res.StatusCode, body) | |
} | |
var nodeStatus models.NodeStatus | |
err = json.Unmarshal(body, &nodeStatus) | |
if err != nil { | |
return nil, enterrors.NewErrUnmarshalBody(err) | |
} | |
return &nodeStatus, nil | |
} | |