mirror of
https://github.com/volcengine/OpenViking.git
synced 2026-09-29 04:02:57 +08:00
* feat(sdk): add Go HTTP client * docs(api): align Go SDK examples with API reference
85 lines
2.6 KiB
Go
85 lines
2.6 KiB
Go
package openviking
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
)
|
|
|
|
// WaitProcessed waits until all queued processing completes.
|
|
func (c *Client) WaitProcessed(ctx context.Context, opts *WaitProcessedOptions) (map[string]any, error) {
|
|
payload := map[string]any{}
|
|
if opts != nil && opts.Timeout != nil {
|
|
payload["timeout"] = *opts.Timeout
|
|
}
|
|
var result map[string]any
|
|
err := c.doJSON(ctx, http.MethodPost, "/api/v1/system/wait", nil, payload, &result)
|
|
return result, err
|
|
}
|
|
|
|
// CheckConsistency checks filesystem/vector-index consistency for a URI subtree.
|
|
func (c *Client) CheckConsistency(ctx context.Context, uri string) (map[string]any, error) {
|
|
var result map[string]any
|
|
err := c.doJSON(ctx, http.MethodPost, "/api/v1/system/consistency", nil, map[string]any{"uri": NormalizeURI(uri)}, &result)
|
|
return result, err
|
|
}
|
|
|
|
// Health checks whether the server health endpoint reports ok.
|
|
func (c *Client) Health(ctx context.Context) (bool, error) {
|
|
req, err := c.newRequest(ctx, http.MethodGet, "/health", nil, nil)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
resp, err := c.httpClient.Do(req)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
|
return false, nil
|
|
}
|
|
var payload struct {
|
|
Status string `json:"status"`
|
|
}
|
|
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
|
|
return false, err
|
|
}
|
|
return payload.Status == "ok", nil
|
|
}
|
|
|
|
// QueueStatus returns queue observer status.
|
|
func (c *Client) QueueStatus(ctx context.Context) (map[string]any, error) {
|
|
return c.observerStatus(ctx, "/api/v1/observer/queue")
|
|
}
|
|
|
|
// VikingDBStatus returns vector DB observer status.
|
|
func (c *Client) VikingDBStatus(ctx context.Context) (map[string]any, error) {
|
|
return c.observerStatus(ctx, "/api/v1/observer/vikingdb")
|
|
}
|
|
|
|
// ModelsStatus returns model observer status.
|
|
func (c *Client) ModelsStatus(ctx context.Context) (map[string]any, error) {
|
|
return c.observerStatus(ctx, "/api/v1/observer/models")
|
|
}
|
|
|
|
// GetStatus returns overall observer status.
|
|
func (c *Client) GetStatus(ctx context.Context) (map[string]any, error) {
|
|
return c.observerStatus(ctx, "/api/v1/observer/system")
|
|
}
|
|
|
|
func (c *Client) observerStatus(ctx context.Context, path string) (map[string]any, error) {
|
|
var result map[string]any
|
|
err := c.doJSON(ctx, http.MethodGet, path, nil, nil, &result)
|
|
return result, err
|
|
}
|
|
|
|
// IsHealthy checks the observer system status.
|
|
func (c *Client) IsHealthy(ctx context.Context) (bool, error) {
|
|
status, err := c.GetStatus(ctx)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
healthy, _ := status["is_healthy"].(bool)
|
|
return healthy, nil
|
|
}
|