mirror of
https://github.com/grafana/grafana.git
synced 2025-02-11 16:15:42 -06:00
* coremodels: Convert plugin-metadata schema to a coremodel * Newer cuetsy; try quoting field name * Add slot definitions * Start sketching out pfs package * Rerun codegen with fixes, new cuetsy * Catch up dashboard with new cuetsy * Update to go1.18 * Use new vmuxers in thema * Add slot system in Go * Draft finished implementation of pfs * Collapse slot pkg into coremodel dir; add PluginInfo * Add the mux type on top of kernel * Refactor plugin generator for extensibility * Change models.cue package, numerous debugs * Bring new output to parity with old * Remove old plugin generation logic * Misc tweaking * Reintroduce generation of shared schemas * Drop back to go1.17 * Add globbing to tsconfig exclude * Introduce pfs test on existing testdata * Make most existing testdata tests pass with pfs * coremodels: Convert plugin-metadata schema to a coremodel * Newer cuetsy; try quoting field name * Add APIType control concept, regen pluginmeta * Use proper numeric types for schema fields * Make pluginmeta schema follow Go type breakdown * More decomposition into distinct types * Add test case for no plugin.json file * Fix missing ref to #Dependencies * Remove generated TS for pluginmeta * Update dependencies, rearrange go.mod * Regenerate without Model prefix * Use updated thema loader; this is now runnable * Skip app plugin with weird include * Make plugin tree extractor reusable * Split out slot lineage load/validate logic * Add myriad tests for new plugin validation failures * Add test for zip fixtures * One last run of codegen * Proper delinting * Ensure validation order is deterministic * Let there actually be sorting * Undo reliance on builtIn field (#54009) * undo builtIn reliance * fix tests Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
72 lines
2.8 KiB
CUE
72 lines
2.8 KiB
CUE
package coremodel
|
|
|
|
// The slots named and specified in this file are meta-schemas that act as a
|
|
// shared contract between Grafana plugins (producers) and coremodel types
|
|
// (consumers).
|
|
//
|
|
// On the consumer side, any coremodel Thema lineage can choose to define a
|
|
// standard Thema composition slot that specifies one of these named slots as
|
|
// its meta-schema. Such a specification entails that all schemas in any lineage
|
|
// placed into that composition slot must adhere to the meta-schema.
|
|
//
|
|
// On the producer side, Grafana's plugin system enforces that certain plugin
|
|
// types are expected to provide Thema lineages for these named slots which
|
|
// adhere to the slot meta-schema.
|
|
//
|
|
// For example, the Panel slot is consumed by the dashboard coremodel, and is
|
|
// expected to be produced by panel plugins.
|
|
//
|
|
// The name given to each slot in this file must be used as the name of the
|
|
// slot in the coremodel, and the name of the field under which the lineage
|
|
// is provided in a plugin's models.cue file.
|
|
//
|
|
// Conformance to meta-schema is achieved by Thema's native lineage joinSchema,
|
|
// which Thema internals automatically enforce across all schemas in a lineage.
|
|
|
|
// Meta-schema for the Panel slot, as implemented in Grafana panel plugins.
|
|
//
|
|
// This is a grouped meta-schema, intended solely for use in composition. Object
|
|
// literals conforming to it are not expected to exist.
|
|
slots: Panel: {
|
|
// Defines plugin-specific options for a panel that should be persisted. Required,
|
|
// though a panel without any options may specify an empty struct.
|
|
//
|
|
// Currently mapped to #Panel.options within the dashboard schema.
|
|
PanelOptions: {...}
|
|
// Plugin-specific custom field properties. Optional.
|
|
//
|
|
// Currently mapped to #Panel.fieldConfig.defaults.custom within the dashboard schema.
|
|
PanelFieldConfig?: {...}
|
|
}
|
|
|
|
// Meta-schema for the Query slot, as implemented in Grafana datasource plugins.
|
|
slots: Query: {...}
|
|
|
|
// Meta-schema for the DSOptions slot, as implemented in Grafana datasource plugins.
|
|
//
|
|
// This is a grouped meta-schema, intended solely for use in composition. Object
|
|
// literals conforming to it are not expected to exist.
|
|
slots: DSOptions: {
|
|
// Normal datasource configuration options.
|
|
Options: {...}
|
|
// Sensitive datasource configuration options that require encryption.
|
|
SecureOptions: {...}
|
|
}
|
|
|
|
// pluginTypeMetaSchema defines which plugin types should use which metaschemas
|
|
// as joinSchema for the lineages declared at which paths.
|
|
pluginTypeMetaSchema: [string]: {...}
|
|
pluginTypeMetaSchema: {
|
|
// Panel plugins are expected to provide a lineage at path Panel conforming to
|
|
// the Panel joinSchema.
|
|
panel: {
|
|
Panel: slots.Panel
|
|
}
|
|
// Datasource plugins are expected to provide lineages at paths Query and
|
|
// DSOptions, conforming to those joinSchemas respectively.
|
|
datasource: {
|
|
Query: slots.Query
|
|
DSOptions: slots.DSOptions
|
|
}
|
|
}
|