Welcome to the QueryEngineRust developer documentation! This directory contains guides for extending the system with new components.
QueryEngineRust is organized into clear, extensible layers:
┌─────────────────────────────────────────────────────────┐
│ Client Applications │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Protocol Servers (HTTP, etc.) │
│ - Parse protocol-specific requests │
│ - Route to appropriate adapter │
│ - Handle protocol-specific endpoints │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Protocol Adapters (Prometheus, etc.) │
│ - Parse query language (PromQL, SQL, etc.) │
│ - Format responses for protocol │
│ - Determine if query is supported │
└─────────────────────────────────────────────────────────┘
│
┌──────┴──────┐
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ Query Engine │ │ Fallback Client │
│ - Execute │ │ - Forward │
│ queries │ │ unsupported │
│ - Return │ │ queries │
│ results │ │ │
└────────┬────────┘ └──────────────────┘
│
▼
┌─────────────────┐
│ Store │
│ - Data storage │
│ - Sketches │
└─────────────────┘
▲
│
┌────────┴────────┐
│ Ingest Drivers │
│ - Kafka, etc. │
└─────────────────┘
src/drivers/
├── ingest/ # Data ingestion (Kafka, etc.)
├── query/
│ ├── adapters/ # Protocol adapters (Prometheus HTTP, etc.)
│ ├── fallback/ # Fallback backends (Prometheus, ClickHouse, etc.)
│ └── servers/ # Protocol servers (HTTP, Flight SQL, etc.)
- Adding a Protocol Adapter - Add support for new query protocols (e.g., ClickHouse HTTP API)
- Adding a Fallback Backend - Add new fallback query backends (e.g., DuckDB, Elasticsearch)
- Adding a Protocol Server - Add new protocol servers (e.g., Flight SQL, gRPC)
Handles protocol-specific request/response formatting and query parsing. Examples: Prometheus HTTP API, ClickHouse HTTP API.
External query system to forward unsupported queries to. Examples: Prometheus, ClickHouse, DuckDB.
Handles network communication for a specific protocol. Examples: HTTP server, Flight SQL server.
- Create
src/drivers/query/adapters/my_adapter.rs - Implement
HttpProtocolAdaptertrait - Add to factory in
factory.rs - Update
QueryProtocolenum
- Create
src/drivers/query/fallback/my_backend.rs - Implement
FallbackClienttrait - Export from
fallback/mod.rs
- Create
src/drivers/query/servers/my_server.rs - Implement server logic with appropriate adapter
- Export from
servers/mod.rs
Each component should include:
- Unit tests in the same file
- Integration tests in
src/tests/ - Example usage in documentation
When adding new components:
- Follow existing naming conventions
- Add comprehensive documentation
- Include tests
- Update this documentation
- Keep backward compatibility