* parse via sse I need to figure out how to handle the pipeline.execute with our own client. I think this is important for MT reasons, just like using our own cache (via legacy) is important. parsing is done though! * WIP nonsense * horrible code but i think it works * Add support for sql expressions config settings * Cleanup: - remove spew from nodes.go - uncomment out plugin context and use in single tenant flow - make code more readable and add comments * Cleanup: - create separate file for mt ds client builder - ensure error handling is the same for both expressions and regular queries - other cleanup * not working but good thoughts * WIP, vector not working for non sse * super hacky but i think vectors work now * delete delete delete * Comments for future ref * break out query handling and start test * add prom debugger * clean up: remove comments and commented out bits * fix query_test * add prom debugger * create table-driven tests with testsdata files * Fix test * Add test * go mod?? * idk * Remove comment * go enterprise issue maybe * Fix codeowners * Delete * Remove test data * Clean up * logger * Remove go changes hopefully * idk go man * sad * idk i ran go mod tidy and this is what it wants * Fix readme, with much help from adam * some linting and testing errors * lint * fix lint * fix lint register.go * another lint * address lint in test * fix dead code and linters for query_test * Go mod? * Struggling with go mod * Fix test * Fix another test * Revert headers change * Its difficult to test this in OSS as it depends on functionality defined in enterprise, let's bring these tests back in some form in enterprise * Fix codeowners --------- Co-authored-by: Adam Simpson <adam@adamsimpson.net>
85 lines
2.1 KiB
Markdown
85 lines
2.1 KiB
Markdown
# Query service
|
|
|
|
This query service aims to replace the existing /api/ds/query, while preserving the same parsing and expression handling as `/api/ds/query`
|
|
|
|
|
|
|
|
### Current /api/ds/query workflow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
autonumber
|
|
actor User as User or Process
|
|
participant api as /api/ds/query
|
|
participant db as Storage<br/>(SQL)
|
|
participant ds as Datasource<br/>Plugin
|
|
participant expr as Expression<br/>Engine
|
|
|
|
User->>api: POST Query
|
|
loop Each query
|
|
api->>api: Parse query
|
|
api->>db: Get ds config<br>and secrets
|
|
db->>api:
|
|
end
|
|
alt No expressions
|
|
alt Single datasource
|
|
api->>ds: QueryData
|
|
else Multiple datasources
|
|
loop Each datasource (concurrently)
|
|
api->>ds: QueryData
|
|
end
|
|
api->>api: Wait for results
|
|
end
|
|
else Expressions exist
|
|
api->>expr: Calculate expressions graph
|
|
loop Each node (eg, refID)
|
|
alt Is query
|
|
expr->>ds: QueryData
|
|
else Is expression
|
|
expr->>expr: Process
|
|
end
|
|
end
|
|
end
|
|
api->>User: return results
|
|
```
|
|
|
|
|
|
|
|
### /apis/query.grafana.app (in single tenant grafana)
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
autonumber
|
|
actor User as User or Process
|
|
participant api as /apis/query.grafana.app
|
|
participant db as Storage<br/>(CloudConfig)
|
|
participant ds as Datasource<br/>Plugin
|
|
participant expr as Expression<br/>Engine
|
|
|
|
User->>api: POST Query
|
|
loop Each query
|
|
api->>api: Parse query
|
|
api->>db: Get ds config<br>and secrets
|
|
db->>api:
|
|
end
|
|
alt Expressions exist
|
|
api->>expr: Calculate expressions graph
|
|
loop Each node (eg, refID)
|
|
alt Is query
|
|
expr->>ds: QueryData
|
|
else Is expression
|
|
expr->>expr: Process
|
|
end
|
|
end
|
|
else No expressions
|
|
alt Single datasource
|
|
api->>ds: QueryData
|
|
else Multiple datasources
|
|
loop Each datasource (concurrently)
|
|
api->>ds: QueryData
|
|
end
|
|
api->>api: Wait for results
|
|
end
|
|
end
|
|
api->>User: return results
|
|
``` |