Documentation
¶
Index ¶
- Constants
- func CenterBindingUID(pluginUID string, modelUID string) string
- func DecodeResource[T any](resource ResolvedResource) (T, error)
- func DefinitionHandler(provider Provider) http.Handler
- func DefinitionURL(upstream string) (string, error)
- func InputMany[T any](actionCtx ActionContext, name string) ([]T, error)
- func InputOne[T any](actionCtx ActionContext, name string) (T, error)
- func InputRootOne[T any](actionCtx ActionContext) (T, error)
- func MountWellKnown(mux interface{ ... }, provider Provider)
- func MustRegisterBuiltin(builtin Builtin)
- func MutateBindingGraphPath(graph *BindingGraph, path string, ...) bool
- func NormalizeModelUID(modelUID string) (string, error)
- func RegisterBuiltin(builtin Builtin) error
- func Relation(sourceModelUID, relationTypeUID, targetModelUID string) *relationItem
- func RootInputName(actionCtx ActionContext) (string, error)
- func ValidRelationType(relationType string) bool
- func ValidateResolveRequest(req ResolveRequest) error
- func ValidateResourceID(resourceID int64) error
- type ActionContext
- type ActionOption
- type ActionRuntimeSpec
- type ActionSpec
- type Attr
- type Attribute
- type AttributeBuilder
- func (b *AttributeBuilder) Build() Attribute
- func (b *AttributeBuilder) Builtin(builtin bool) *AttributeBuilder
- func (b *AttributeBuilder) Display() *AttributeBuilder
- func (b *AttributeBuilder) Index(index int64) *AttributeBuilder
- func (b *AttributeBuilder) Options(option any) *AttributeBuilder
- func (b *AttributeBuilder) Required() *AttributeBuilder
- func (b *AttributeBuilder) Secure() *AttributeBuilder
- type AttributeGroup
- type AttributeOption
- type Binding
- type BindingFactory
- type BindingGraph
- type BindingGraphEdge
- type BindingGraphNode
- type BindingOption
- type Builtin
- type Configurator
- type ContextResolver
- type Definition
- type FieldMapping
- type Filter
- type ModelBuilder
- type ModelGroupSpec
- type ModelOption
- type ModelRelation
- type ModelSpec
- type Option
- type Plugin
- type Provider
- type ProviderFunc
- type Registry
- type RelationType
- type ResolveRequest
- type ResolveResult
- type ResolvedInput
- type ResolvedResource
- type ResourceAction
- type ResourceActions
- type ResourceSpec
- type RuntimeOption
- type RuntimeSidebarResourceSpec
- type RuntimeSidebarSpec
- type RuntimeSpec
- type Schema
- type SchemaBuilder
- func (b *SchemaBuilder) Build() Schema
- func (b *SchemaBuilder) Model(model ModelSpec) *SchemaBuilder
- func (b *SchemaBuilder) ModelGroup(name string) *SchemaBuilder
- func (b *SchemaBuilder) ModelGroups(groups ...ModelGroupSpec) *SchemaBuilder
- func (b *SchemaBuilder) Models(models ...ModelSpec) *SchemaBuilder
- func (b *SchemaBuilder) Relation(sourceModelUID, relationTypeUID, targetModelUID, mapping string) *SchemaBuilder
- func (b *SchemaBuilder) RelationType(relationType RelationType) *SchemaBuilder
- func (b *SchemaBuilder) RelationTypes(relationTypes ...RelationType) *SchemaBuilder
- func (b *SchemaBuilder) Setup(items ...SetupItem) *SchemaBuilder
- type SetupItem
- type SpecOption
- type Store
Constants ¶
View Source
const ( PlacementResourceDetailActions = "resource.detail.actions" DirectionToSource = "source" DirectionToTarget = "target" RelationTypeDefault = "default" RelationTypeGroup = "group" RelationTypeBelong = "belong" RelationTypeRun = "run" MappingOneToOne = "one_to_one" MappingOneToMany = "one_to_many" MappingManyToMany = "many_to_many" CardinalityOne = "one" CardinalityMany = "many" )
View Source
const ( RuntimeModeBuiltin = "builtin" RuntimeModeExternalService = "external-service" MetaDescription = "description" MetaRuntime = "runtime" HeaderPluginID = "X-ECMDB-Plugin-ID" WellKnownPath = "/.well-known/ecmdb-plugin" DefinitionFetchTimeout = 3 * time.Second )
Variables ¶
This section is empty.
Functions ¶
func CenterBindingUID ¶
func DecodeResource ¶
func DecodeResource[T any](resource ResolvedResource) (T, error)
DecodeResource 将已解析资源按照 `plugin` tag 解码成强类型结构 T。
func DefinitionHandler ¶
func DefinitionURL ¶
func InputMany ¶
func InputMany[T any](actionCtx ActionContext, name string) ([]T, error)
InputMany 从动作上下文中读取多个输入,并逐个解码成调用方声明的强类型结构 T。
func InputOne ¶
func InputOne[T any](actionCtx ActionContext, name string) (T, error)
InputOne 从动作上下文中读取单个输入,并解码成调用方声明的强类型结构 T。
func InputRootOne ¶
func InputRootOne[T any](actionCtx ActionContext) (T, error)
func MountWellKnown ¶
func MustRegisterBuiltin ¶
func MustRegisterBuiltin(builtin Builtin)
func MutateBindingGraphPath ¶
func MutateBindingGraphPath( graph *BindingGraph, path string, fn func(node *BindingGraphNode, edge *BindingGraphEdge), ) bool
func NormalizeModelUID ¶
func RegisterBuiltin ¶
func RootInputName ¶
func RootInputName(actionCtx ActionContext) (string, error)
func ValidRelationType ¶
func ValidateResolveRequest ¶
func ValidateResolveRequest(req ResolveRequest) error
func ValidateResourceID ¶
Types ¶
type ActionContext ¶
type ActionContext struct {
Plugin Plugin `json:"plugin"`
Binding Binding `json:"binding"`
Action ActionSpec `json:"action"`
ResourceID int64 `json:"resource_id"`
Inputs map[string]ResolvedInput `json:"inputs"`
Params map[string]any `json:"params,omitempty"`
}
type ActionOption ¶
type ActionOption func(*ActionSpec)
func ActionRuntime ¶
func ActionRuntime(value ActionRuntimeSpec) ActionOption
func Icon ¶
func Icon(value string) ActionOption
func Meta ¶
func Meta(key string, value any) ActionOption
func Permission ¶
func Permission(value string) ActionOption
func Placement ¶
func Placement(value string) ActionOption
func UseBinding ¶
func UseBinding(uid string) ActionOption
type ActionRuntimeSpec ¶
type ActionRuntimeSpec struct {
Layout string `json:"layout,omitempty" bson:"layout,omitempty"`
Title string `json:"title,omitempty" bson:"title,omitempty"`
Props map[string]any `json:"props,omitempty" bson:"props,omitempty"`
Sidebar *RuntimeSidebarSpec `json:"sidebar,omitempty" bson:"sidebar,omitempty"`
}
type ActionSpec ¶
type ActionSpec struct {
Action string `json:"action" bson:"action"`
Name string `json:"name" bson:"name"`
Icon string `json:"icon" bson:"icon"`
Placement string `json:"placement" bson:"placement"`
Permission string `json:"permission,omitempty" bson:"permission,omitempty"`
BindingUID string `json:"binding_uid,omitempty" bson:"binding_uid,omitempty"`
Runtime *ActionRuntimeSpec `json:"runtime,omitempty" bson:"runtime,omitempty"`
Meta map[string]any `json:"meta,omitempty" bson:"meta,omitempty"`
}
type Attribute ¶
type Attribute struct {
UID string `json:"uid"`
Name string `json:"name"`
Type string `json:"type"`
Option any `json:"option,omitempty"`
Required bool `json:"required,omitempty"`
Display bool `json:"display,omitempty"`
Secure bool `json:"secure,omitempty"`
Builtin bool `json:"builtin,omitempty"`
Index int64 `json:"index,omitempty"`
}
type AttributeBuilder ¶
type AttributeBuilder struct {
// contains filtered or unexported fields
}
func List ¶
func List(uid string, name string, option any, opts ...AttributeOption) *AttributeBuilder
func Multiline ¶
func Multiline(uid string, name string, opts ...AttributeOption) *AttributeBuilder
func String ¶
func String(uid string, name string, opts ...AttributeOption) *AttributeBuilder
func (*AttributeBuilder) Build ¶
func (b *AttributeBuilder) Build() Attribute
func (*AttributeBuilder) Builtin ¶
func (b *AttributeBuilder) Builtin(builtin bool) *AttributeBuilder
func (*AttributeBuilder) Display ¶
func (b *AttributeBuilder) Display() *AttributeBuilder
func (*AttributeBuilder) Index ¶
func (b *AttributeBuilder) Index(index int64) *AttributeBuilder
func (*AttributeBuilder) Options ¶
func (b *AttributeBuilder) Options(option any) *AttributeBuilder
func (*AttributeBuilder) Required ¶
func (b *AttributeBuilder) Required() *AttributeBuilder
func (*AttributeBuilder) Secure ¶
func (b *AttributeBuilder) Secure() *AttributeBuilder
type AttributeGroup ¶
type AttributeOption ¶
type AttributeOption func(*Attribute)
func AttributeBuiltin ¶
func AttributeBuiltin(builtin bool) AttributeOption
type Binding ¶
type Binding struct {
ID int64 `json:"id"`
UID string `json:"uid"`
PluginID string `json:"plugin_id"`
ModelUID string `json:"model_uid"`
Enabled bool `json:"enabled"`
Graph *BindingGraph `json:"graph,omitempty"`
Ctime int64 `json:"ctime,omitempty"`
Utime int64 `json:"utime,omitempty"`
}
func PrepareBinding ¶
type BindingFactory ¶
func Center ¶
func Center[T any](modelUID string, opts ...BindingOption) BindingFactory
func CenterNamed ¶
func CenterNamed[T any](name string, modelUID string, opts ...BindingOption) BindingFactory
type BindingGraph ¶
type BindingGraph struct {
EntryNodeID string `json:"entry_node_id"`
Nodes []BindingGraphNode `json:"nodes"`
Edges []BindingGraphEdge `json:"edges,omitempty"`
}
func BuildCenterGraph ¶
func BuildCenterGraph[T any](name string, modelUID string) (*BindingGraph, error)
func GraphFromBindingSpecs ¶
func GraphFromBindingSpecs(modelUID string, specs []ResourceSpec) (*BindingGraph, error)
type BindingGraphEdge ¶
type BindingGraphNode ¶
type BindingGraphNode struct {
ID string `json:"id"`
Name string `json:"name"`
ModelUID string `json:"model_uid"`
Cardinality string `json:"cardinality"`
Required bool `json:"required"`
FieldMappings []FieldMapping `json:"field_mappings,omitempty"`
Filters []Filter `json:"filters,omitempty"`
}
func GraphEntryNode ¶
func GraphEntryNode(graph *BindingGraph) (BindingGraphNode, bool)
type BindingOption ¶
type BindingOption func(*Binding)
func At ¶
func At(path string, opts ...SpecOption) BindingOption
func BindingEnabled ¶
func BindingEnabled(value bool) BindingOption
func Node ¶
func Node(path string, fn func(node *BindingGraphNode, edge *BindingGraphEdge)) BindingOption
func Spec ¶
func Spec(path string, fn func(*ResourceSpec)) BindingOption
type Builtin ¶
type Builtin interface {
Definition() Definition
SchemaForBindings(bindings []Binding) (Schema, error)
}
func FindBuiltin ¶
func StaticBuiltin ¶
func StaticBuiltin(def Definition) Builtin
type Configurator ¶
type Configurator struct {
// contains filtered or unexported fields
}
Configurator 用于链式配置和修饰 ResourceSpec 节点树
func (*Configurator) ForPath ¶
func (c *Configurator) ForPath(path string, fn func(spec *ResourceSpec)) *Configurator
ForPath 通过点路径(例如 "target.gateways.sub_gateways")定位具体的 ResourceSpec 节点进行微调
type ContextResolver ¶
type ContextResolver interface {
ResolveActionContext(ctx context.Context, req ResolveRequest) (ActionContext, error)
}
ContextResolver 描述 ECMDB Core 暴露给插件后端的资源上下文解析能力。
插件后端只传 plugin_id、action、resource_id 和必要参数,敏感字段由 ECMDB 后端解析, 避免 password/private_key 等内容经过浏览器。
type Definition ¶
type Definition struct {
Plugin Plugin `json:"plugin"`
Schema Schema `json:"schema"`
Bindings []Binding `json:"bindings"`
}
func FetchDefinition ¶
func FetchDefinition(ctx context.Context, upstream string) (Definition, error)
type FieldMapping ¶
type ModelBuilder ¶
type ModelBuilder struct {
// contains filtered or unexported fields
}
func Model ¶
func Model(uid string, name string, opts ...ModelOption) *ModelBuilder
func (*ModelBuilder) AttrGroup ¶
func (b *ModelBuilder) AttrGroup(name string, index int64, attrs ...Attr) *ModelBuilder
func (*ModelBuilder) Build ¶
func (b *ModelBuilder) Build() ModelSpec
type ModelGroupSpec ¶
type ModelGroupSpec struct {
Name string `json:"name"`
}
type ModelOption ¶
type ModelOption func(*ModelSpec)
func ModelBuiltin ¶
func ModelBuiltin(builtin bool) ModelOption
func ModelGroupName ¶
func ModelGroupName(groupName string) ModelOption
func ModelIcon ¶
func ModelIcon(icon string) ModelOption
type ModelRelation ¶
type Option ¶
type Option func(*Plugin)
func BuiltinRuntime ¶
func BuiltinRuntime() Option
func Description ¶
func ExternalServiceRuntime ¶
func ExternalServiceRuntime(upstream string, opts ...RuntimeOption) Option
func Runtime ¶
func Runtime(spec RuntimeSpec) Option
type Plugin ¶
type Plugin struct {
ID int64 `json:"id" bson:"id"`
UID string `json:"uid" bson:"uid"`
Name string `json:"name" bson:"name"`
Type string `json:"type" bson:"type"`
Version string `json:"version" bson:"version"`
Actions []ActionSpec `json:"actions" bson:"actions"`
Meta map[string]any `json:"meta,omitempty" bson:"meta,omitempty"`
Ctime int64 `json:"ctime,omitempty" bson:"ctime,omitempty"`
Utime int64 `json:"utime,omitempty" bson:"utime,omitempty"`
}
func (Plugin) FindAction ¶
func (p Plugin) FindAction(name string) (ActionSpec, bool)
func (Plugin) ResourceActions ¶
func (p Plugin) ResourceActions() []ResourceAction
func (Plugin) Runtime ¶
func (p Plugin) Runtime() (RuntimeSpec, bool)
func (*Plugin) SetRuntime ¶
func (p *Plugin) SetRuntime(spec RuntimeSpec)
type Provider ¶
type Provider interface {
Definition() (Definition, error)
}
Provider 是插件实现方需要提供的最小契约。
type ProviderFunc ¶
type ProviderFunc func() (Definition, error)
func (ProviderFunc) Definition ¶
func (fn ProviderFunc) Definition() (Definition, error)
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
func (*Registry) Action ¶
func (r *Registry) Action(action string, name string, opts ...ActionOption) *Registry
func (*Registry) Bind ¶
func (r *Registry) Bind(factory BindingFactory) *Registry
func (*Registry) Definition ¶
func (r *Registry) Definition() (Definition, error)
func (*Registry) MustDefinition ¶
func (r *Registry) MustDefinition() Definition
type RelationType ¶
type RelationType struct {
UID string `json:"uid"`
Name string `json:"name"`
SourceDescribe string `json:"source_describe,omitempty"`
TargetDescribe string `json:"target_describe,omitempty"`
}
func BasicRelationTypes ¶
func BasicRelationTypes() []RelationType
type ResolveRequest ¶
type ResolveResult ¶
type ResolveResult struct {
PluginID string `json:"plugin_id"`
PluginName string `json:"plugin_name"`
PluginVersion string `json:"plugin_version,omitempty"`
ActionName string `json:"action_name"`
Action string `json:"action"`
Permission string `json:"permission,omitempty"`
BindingUID string `json:"binding_uid,omitempty"`
ModelUID string `json:"model_uid,omitempty"`
ResourceID int64 `json:"resource_id"`
Inputs map[string]ResolvedInput `json:"inputs"`
Params map[string]any `json:"params,omitempty"`
Runtime *ActionRuntimeSpec `json:"runtime,omitempty"`
Meta map[string]any `json:"meta,omitempty"`
}
type ResolvedInput ¶
type ResolvedInput struct {
Name string `json:"name"`
Cardinality string `json:"cardinality"`
Resources []ResolvedResource `json:"resources"`
}
type ResolvedResource ¶
type ResourceAction ¶
type ResourceAction struct {
PluginID string `json:"plugin_id"`
Action string `json:"action"`
Name string `json:"name"`
Icon string `json:"icon"`
Placement string `json:"placement"`
Permission string `json:"permission,omitempty"`
BindingUID string `json:"binding_uid,omitempty"`
Runtime *ActionRuntimeSpec `json:"runtime,omitempty"`
Meta map[string]any `json:"meta,omitempty"`
}
type ResourceActions ¶
type ResourceActions struct {
ResourceID int64 `json:"resource_id"`
Actions []ResourceAction `json:"actions"`
}
type ResourceSpec ¶
type ResourceSpec struct {
Name string `json:"name"` // 资源名称 (Go struct 中的字段名)
ModelUID string `json:"model_uid"` // CMDB 模型 UID
RelationType string `json:"relation_type,omitempty"` // 关联类型 UID
Direction string `json:"direction,omitempty"` // 关联查询方向:auto / source / target
Cardinality string `json:"cardinality"` // 数量基数:one / many
Required bool `json:"required"` // 是否必填/必存在
Fields map[string]string `json:"fields"` // 字段映射 [Go 属性字段名]CMDB 属性字段 UID
RequiredFields []string `json:"required_fields,omitempty"` // 必填/非空属性字段列表
Filters []Filter `json:"filters,omitempty"` // 过滤条件
Children []ResourceSpec `json:"children,omitempty"` // 子级关联资源列表
}
ResourceSpec 描述插件依赖的 CMDB 资源拓扑树节点定义
func BuildCenterSpec ¶
func BuildCenterSpec[T any](name string, modelUID string) (ResourceSpec, error)
func BuildSpecs ¶
func BuildSpecs[T any]() ([]ResourceSpec, error)
BuildSpecs 基于顶层输入容器 T 反射解析出 plugin.ResourceSpec 列表。
func CompileBindingGraph ¶
func CompileBindingGraph(graph *BindingGraph) ([]ResourceSpec, error)
type RuntimeOption ¶
type RuntimeOption func(*RuntimeSpec)
func RuntimeHealthPath ¶
func RuntimeHealthPath(path string) RuntimeOption
type RuntimeSidebarResourceSpec ¶
type RuntimeSidebarResourceSpec struct {
ModelUID string `json:"model_uid,omitempty" bson:"model_uid,omitempty"`
TitleField string `json:"title_field,omitempty" bson:"title_field,omitempty"`
SubtitleField string `json:"subtitle_field,omitempty" bson:"subtitle_field,omitempty"`
SearchFields []string `json:"search_fields,omitempty" bson:"search_fields,omitempty"`
Limit int `json:"limit,omitempty" bson:"limit,omitempty"`
}
type RuntimeSidebarSpec ¶
type RuntimeSidebarSpec struct {
Enabled *bool `json:"enabled,omitempty" bson:"enabled,omitempty"`
Mode string `json:"mode,omitempty" bson:"mode,omitempty"`
Title string `json:"title,omitempty" bson:"title,omitempty"`
SearchPlaceholder string `json:"search_placeholder,omitempty" bson:"search_placeholder,omitempty"`
EmptyText string `json:"empty_text,omitempty" bson:"empty_text,omitempty"`
Collapsible *bool `json:"collapsible,omitempty" bson:"collapsible,omitempty"`
Resource *RuntimeSidebarResourceSpec `json:"resource,omitempty" bson:"resource,omitempty"`
}
type RuntimeSpec ¶
type Schema ¶
type Schema struct {
ModelGroups []ModelGroupSpec `json:"model_groups,omitempty"`
Models []ModelSpec `json:"models,omitempty"`
RelationTypes []RelationType `json:"relation_types,omitempty"`
ModelRelations []ModelRelation `json:"model_relations,omitempty"`
}
type SchemaBuilder ¶
type SchemaBuilder struct {
// contains filtered or unexported fields
}
func (*SchemaBuilder) Build ¶
func (b *SchemaBuilder) Build() Schema
func (*SchemaBuilder) Model ¶
func (b *SchemaBuilder) Model(model ModelSpec) *SchemaBuilder
func (*SchemaBuilder) ModelGroup ¶
func (b *SchemaBuilder) ModelGroup(name string) *SchemaBuilder
func (*SchemaBuilder) ModelGroups ¶
func (b *SchemaBuilder) ModelGroups(groups ...ModelGroupSpec) *SchemaBuilder
func (*SchemaBuilder) Models ¶
func (b *SchemaBuilder) Models(models ...ModelSpec) *SchemaBuilder
func (*SchemaBuilder) Relation ¶
func (b *SchemaBuilder) Relation(sourceModelUID, relationTypeUID, targetModelUID, mapping string) *SchemaBuilder
func (*SchemaBuilder) RelationType ¶
func (b *SchemaBuilder) RelationType(relationType RelationType) *SchemaBuilder
func (*SchemaBuilder) RelationTypes ¶
func (b *SchemaBuilder) RelationTypes(relationTypes ...RelationType) *SchemaBuilder
func (*SchemaBuilder) Setup ¶
func (b *SchemaBuilder) Setup(items ...SetupItem) *SchemaBuilder
type SetupItem ¶
type SetupItem interface {
// contains filtered or unexported methods
}
func ModelGroup ¶
func RelationTypes ¶
func RelationTypes(relationTypes ...RelationType) SetupItem
type SpecOption ¶
type SpecOption func(*BindingGraphNode, *BindingGraphEdge)
func In ¶
func In(relationType string) SpecOption
func Out ¶
func Out(relationType string) SpecOption
func Required ¶
func Required(value bool) SpecOption
Click to show internal directories.
Click to hide internal directories.