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/kindsys/kind.go

96 lines
2.2 KiB

package kindsys
import (
"fmt"
"github.com/grafana/thema"
)
// TODO docs
type Maturity string
const (
MaturityMerged Maturity = "merged"
MaturityExperimental Maturity = "experimental"
MaturityStable Maturity = "stable"
MaturityMature Maturity = "mature"
)
func maturityIdx(m Maturity) int {
// icky to do this globally, this is effectively setting a default
if string(m) == "" {
m = MaturityMerged
}
for i, ms := range maturityOrder {
if m == ms {
return i
}
}
panic(fmt.Sprintf("unknown maturity milestone %s", m))
}
var maturityOrder = []Maturity{
MaturityMerged,
MaturityExperimental,
MaturityStable,
MaturityMature,
}
func (m Maturity) Less(om Maturity) bool {
return maturityIdx(m) < maturityIdx(om)
}
func (m Maturity) String() string {
return string(m)
}
// Interface describes a Grafana kind object: a Go representation of the definition of
// one of Grafana's categories of kinds.
type Interface interface {
// Props returns a [kindsys.SomeKindProps], representing the properties
// of the kind as declared in the .cue source. The underlying type is
// determined by the category of kind.
//
// This method is largely for convenience, as all actual kind categories are
// expected to implement one of the other interfaces, each of which contain
// a Decl() method through which these same properties are accessible.
Props() SomeKindProperties
// TODO remove, unnecessary with Props()
Name() string
// TODO remove, unnecessary with Props()
MachineName() string
// TODO remove, unnecessary with Props()
Maturity() Maturity // TODO unclear if we want maturity for raw kinds
}
// TODO docs
type Raw interface {
Interface
// TODO docs
Decl() *Decl[RawProperties]
}
type Structured interface {
Interface
// TODO docs
Lineage() thema.Lineage
// TODO docs
Decl() *Decl[CoreStructuredProperties] // TODO figure out how to reconcile this interface with CustomStructuredProperties
}
// type Composable interface {
// Interface
//
// // TODO docs
// Lineage() thema.Lineage
//
// // TODO docs
// Properties() CoreStructuredProperties // TODO figure out how to reconcile this interface with CustomStructuredProperties
// }