The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/registry/apis/query
Todd Treece 9c6d3590a2
Chore: Fix apiserver circular dependencies (#89918)
11 months ago
..
client Chore: Remove legacydata package (#88790) 12 months ago
queryschema QueryTypes: Add feature toggle to show query types in datasource apiservers (#88213) 1 year ago
testdata QueryService: Return application/json and better errors (#84234) 1 year ago
README.md QueryService: Add feature toggles to better support testing (#86493) 1 year ago
client.go QueryService: Use types from sdk (#84029) 1 year ago
errors.go Chore: Move identity and errutil to apimachinery module (#89116) 11 months ago
errors_test.go Chore: Move identity and errutil to apimachinery module (#89116) 11 months ago
metrics.go Init dualwriter metrics (#89003) 11 months ago
parser.go QueryTypes: Add feature toggle to show query types in datasource apiservers (#88213) 1 year ago
parser_test.go QueryService: Return application/json and better errors (#84234) 1 year ago
plugins.go QueryService: Add feature toggles to better support testing (#86493) 1 year ago
query.go Chore: Fix apiserver circular dependencies (#89918) 11 months ago
register.go Chore: Fix apiserver circular dependencies (#89918) 11 months ago

README.md

Query service

This query service aims to replace the existing /api/ds/query.

The key differences are:

  1. This service has a stronger type system (not simplejson)
  2. Same workflow regardless if expressions exist
  3. Datasource settings+access is managed in each datasource, not at the beginning

Current /api/ds/query workflow

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)

sequenceDiagram
    autonumber
    actor User as User or Process
    participant api as /apis/query.grafana.app
    participant ds as Datasource<br/>Handler/Plugin
    participant db as Storage<br/>(SQL)
    participant expr as Expression<br/>Engine

    User->>api: POST Query
    api->>api: Parse queries
    api->>api: Calculate dependencies
    loop Each datasource (concurrently)
        api->>ds: QueryData
        ds->>ds: Verify user access
        ds->>db: Get settings <br> and secrets
    end
    loop Each expression
        api->>expr: Execute
    end
    api->>api: Verify ResultExpectations
    api->>User: return results