Files
OpenViking/sdk/go/system.go
T
Qin Haojie a59fd048f1 feat(sdk): 支持 Go HTTP SDK (#2680)
* feat(sdk): add Go HTTP client

* docs(api): align Go SDK examples with API reference
2026-06-17 16:11:10 +08:00

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
}