Files
herolib/lib/clients/qdrant/qdrant_client.v
2025-10-12 12:30:19 +03:00

99 lines
2.1 KiB
V

module qdrant
import incubaid.herolib.core.httpconnection
import json
// QDrant usage
pub struct QDrantUsage {
pub mut:
cpu int // CPU usage
io_read int // I/O read usage
io_write int // I/O write usage
}
// Top-level response structure
pub struct QDrantResponse[T] {
pub mut:
usage QDrantUsage // Usage information
result T // The result
status string // Response status
time f64 // Response time
}
pub struct QDrantErrorResponse {
pub mut:
status QDrantError // Response status
time f64 // Response time
}
// Qdrant error response
pub struct QDrantError {
pub mut:
error string // Error message
}
// Service information
pub struct ServiceInfo {
pub mut:
version string // Version of the Qdrant server
commit ?string // Git commit hash
}
// Health check response
pub struct HealthCheckResponse {
pub mut:
title string // Title of the health check
status string // Status of the health check
version string // Version of the Qdrant server
}
// Get service information
pub fn (mut self QDrantClient) get_service_info() !QDrantResponse[ServiceInfo] {
mut http_conn := self.httpclient()!
req := httpconnection.Request{
method: .get
prefix: '/telemetry'
}
mut response := http_conn.send(req)!
if response.code >= 400 {
error_ := json.decode(QDrantErrorResponse, response.data)!
return error('Error getting service info: ' + error_.status.error)
}
return json.decode(QDrantResponse[ServiceInfo], response.data)!
}
// Check health of the Qdrant server
pub fn (mut self QDrantClient) health_check() !bool {
mut http_conn := self.httpclient()!
req := httpconnection.Request{
method: .get
prefix: '/healthz'
}
mut response := http_conn.send(req)!
if response.code >= 400 {
return false
}
return true
}
// httpclient creates a new HTTP connection to the Qdrant API
fn (mut self QDrantClient) httpclient() !&httpconnection.HTTPConnection {
mut http_conn := httpconnection.new(
name: 'Qdrant_vclient'
url: self.url
)!
// Add authentication header if API key is provided
if self.secret.len > 0 {
http_conn.default_header.add_custom('api-key', self.secret)!
}
return http_conn
}