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
Jean-Philippe Quéméner 283280f329
fix(querier): use most specific timerange available (#90540)
1 year ago
..
client K8s: Match status codes from single tenant (#90153) 2 years ago
queryschema QueryTypes: Add feature toggle to show query types in datasource apiservers (#88213) 2 years ago
testdata QueryService: Return application/json and better errors (#84234) 2 years ago
README.md QueryService: Add feature toggles to better support testing (#86493) 2 years ago
client.go QueryService: Use types from sdk (#84029) 2 years ago
errors.go Chore: Move identity and errutil to apimachinery module (#89116) 2 years ago
errors_test.go Chore: Move identity and errutil to apimachinery module (#89116) 2 years ago
metrics.go Init dualwriter metrics (#89003) 2 years ago
parser.go fix(querier): use most specific timerange available (#90540) 1 year ago
parser_test.go fix(querier): use most specific timerange available (#90540) 1 year ago
plugins.go QueryService: Add feature toggles to better support testing (#86493) 2 years ago
query.go K8s: handle queries being an empty slice (#89928) 2 years ago
register.go DualWrite: Cleanup and centralize the dual write creation (#90013) 2 years 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