plugin

package
v0.7.0-preview1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2026 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const SensitiveMask = "********"

Variables

View Source
var ErrEndpointNotFound = fmt.Errorf("endpoint not found")

ErrEndpointNotFound is returned when an endpoint can't be resolved

Functions

func DecryptConfig added in v0.5.0

func DecryptConfig(config map[string]interface{}, configSpec []ConfigField, encryptor *crypto.Encryptor) error

DecryptConfig decrypts sensitive fields in a plugin config using the ConfigSpec

func DecryptConfigForPlugin added in v0.5.0

func DecryptConfigForPlugin(pluginID string, config map[string]interface{}, encryptor *crypto.Encryptor) error

DecryptConfigForPlugin decrypts sensitive fields for a specific plugin by ID

func EncryptConfig added in v0.5.0

func EncryptConfig(config map[string]interface{}, configSpec []ConfigField, encryptor *crypto.Encryptor) error

EncryptConfig encrypts sensitive fields in a plugin config using the ConfigSpec

func EncryptConfigForPlugin added in v0.5.0

func EncryptConfigForPlugin(pluginID string, config map[string]interface{}, encryptor *crypto.Encryptor) error

EncryptConfigForPlugin encrypts sensitive fields for a specific plugin by ID

func FilterDiscoveryResult added in v0.7.0

func FilterDiscoveryResult(result *DiscoveryResult, rawConfig RawPluginConfig)

FilterDiscoveryResult filters a DiscoveryResult based on the Filter in the config. It filters assets by name, then removes lineage, documentation, statistics, and run history entries that reference excluded assets.

func GetConfigType added in v0.3.1

func GetConfigType(raw RawPluginConfig, source Source) interface{}

GetConfigType attempts to extract the config type from a source by unmarshaling into an empty interface and using reflection

func GetSensitiveFields added in v0.5.0

func GetSensitiveFields(configSpec []ConfigField) map[string]bool

GetSensitiveFields returns a map of sensitive field names from ConfigSpec

func GetValidator added in v0.5.0

func GetValidator() *validator.Validate

GetValidator returns a configured validator instance

func InterpolateTags

func InterpolateTags(tags TagsConfig, metadata map[string]interface{}) []string

InterpolateTags processes tags and replaces variables with values from metadata

func MapToMetadata

func MapToMetadata(source interface{}) map[string]interface{}

MapToMetadata converts a struct with metadata tags to a metadata map

func ProcessAWSTags

func ProcessAWSTags(tagsToMetadata bool, includeTags []string, tags map[string]string) map[string]interface{}

func ShouldIncludeResource

func ShouldIncludeResource(name string, filter Filter) bool

func UnmarshalPluginConfig

func UnmarshalPluginConfig[T any](raw RawPluginConfig) (*T, error)

UnmarshalPluginConfig unmarshals raw config into a specific plugin config type

func ValidateStruct added in v0.5.0

func ValidateStruct(s interface{}) error

ValidateStruct validates a struct and returns user-friendly validation errors

Types

type AWSConfig

type AWSConfig struct {
	Credentials    AWSCredentials `json:"credentials" description:"AWS credentials configuration"`
	TagsToMetadata bool           `json:"tags_to_metadata,omitempty" description:"Convert AWS tags to Marmot metadata"`
	IncludeTags    []string       `json:"include_tags,omitempty" description:"List of AWS tags to include as metadata. By default, all tags are included."`
}

func ExtractAWSConfig added in v0.2.0

func ExtractAWSConfig(rawConfig map[string]interface{}) (*AWSConfig, error)

func (*AWSConfig) NewAWSConfig added in v0.2.0

func (a *AWSConfig) NewAWSConfig(ctx context.Context) (aws.Config, error)

func (*AWSConfig) Validate

func (a *AWSConfig) Validate() error

type AWSCredentialStatus added in v0.5.0

type AWSCredentialStatus struct {
	Available bool     `json:"available"`
	Sources   []string `json:"sources"`
	Error     string   `json:"error,omitempty"`
}

func DetectAWSCredentials added in v0.5.0

func DetectAWSCredentials(ctx context.Context) *AWSCredentialStatus

DetectAWSCredentials checks if AWS credentials are available from environment or config files

type AWSCredentials

type AWSCredentials struct {
	UseDefault     bool   `json:"use_default,omitempty" description:"Use AWS credentials from environment or default profile (recommended)"`
	ID             string `json:"id,omitempty" description:"AWS access key ID"`
	Secret         string `json:"secret,omitempty" description:"AWS secret access key" sensitive:"true"`
	Token          string `json:"token,omitempty" description:"AWS session token" sensitive:"true"`
	Profile        string `json:"profile,omitempty" description:"AWS profile to use from shared credentials file"`
	Role           string `json:"role,omitempty" description:"AWS IAM role ARN to assume"`
	RoleExternalID string `json:"role_external_id,omitempty" description:"External ID for cross-account role assumption"`
	Region         string `json:"region,omitempty" description:"AWS region for services"`
	Endpoint       string `json:"endpoint,omitempty" description:"Custom endpoint URL for AWS services" validate:"omitempty,url"`
}

type AWSPlugin

type AWSPlugin struct {
	AWSConfig  `json:",inline"`
	BaseConfig `json:",inline"`
}

type AssetRunHistory added in v0.5.0

type AssetRunHistory struct {
	AssetMRN string            `json:"asset_mrn"`
	Runs     []RunHistoryEvent `json:"runs"`
}

AssetRunHistory contains run history events for an asset

type BaseConfig

type BaseConfig struct {
	Tags          TagsConfig     `json:"tags,omitempty" description:"Tags to apply to discovered assets"`
	ExternalLinks []ExternalLink `json:"external_links,omitempty" description:"External links to show on all assets"`
	Filter        *Filter        `json:"filter,omitempty" description:"Filter discovered assets by name (regex)"`
}

type Config

type Config struct {
	Name string      `json:"name" yaml:"name"`
	Runs []SourceRun `json:"runs" yaml:"runs"`
}

type ConfigField added in v0.5.0

type ConfigField struct {
	Name        string        `json:"name"`
	Type        FieldType     `json:"type"`
	Label       string        `json:"label"`
	Description string        `json:"description"`
	Required    bool          `json:"required"`
	Default     interface{}   `json:"default,omitempty"`
	Options     []FieldOption `json:"options,omitempty"`
	Validation  *Validation   `json:"validation,omitempty"`
	Sensitive   bool          `json:"sensitive"`
	Placeholder string        `json:"placeholder,omitempty"`
	Fields      []ConfigField `json:"fields,omitempty"`
	IsArray     bool          `json:"is_array,omitempty"`
}

func ApplyConfigOverrides added in v0.7.0

func ApplyConfigOverrides(spec []ConfigField, overrides map[string]ConfigOverride) []ConfigField

ApplyConfigOverrides applies overrides to a config spec. Use dot notation for nested fields (e.g. "authentication.type").

func CloneConfigSpec added in v0.7.0

func CloneConfigSpec(spec []ConfigField) []ConfigField

CloneConfigSpec deep-copies a config spec.

func GenerateConfigSpec added in v0.5.0

func GenerateConfigSpec(configType interface{}) []ConfigField

func RemoveConfigFields added in v0.7.0

func RemoveConfigFields(spec []ConfigField, names []string) []ConfigField

RemoveConfigFields removes fields by name. Use dot notation for nested fields (e.g. "authentication.type").

type ConfigOverride added in v0.7.0

type ConfigOverride struct {
	Default     interface{}
	Description string
	Placeholder string
	Required    *bool
}

ConfigOverride defines overrides for individual config fields.

type DiscoveryResult

type DiscoveryResult struct {
	Assets        []asset.Asset             `json:"assets"`
	Lineage       []lineage.LineageEdge     `json:"lineage"`
	Documentation []assetdocs.Documentation `json:"documentation"`
	Statistics    []Statistic               `json:"statistics"`
	RunHistory    []AssetRunHistory         `json:"run_history,omitempty"`
}

DiscoveryResult contains all discovered assets, lineage, and documentation

type ExternalLink struct {
	Name string `json:"name" description:"Display name for the link" validate:"required"`
	Icon string `json:"icon,omitempty" description:"Icon identifier for the link"`
	URL  string `json:"url" description:"URL to the external resource" validate:"required,url"`
}

ExternalLink defines an external resource link

type FieldOption added in v0.5.0

type FieldOption struct {
	Label string `json:"label"`
	Value string `json:"value"`
}

type FieldType added in v0.5.0

type FieldType string
const (
	FieldTypeString      FieldType = "string"
	FieldTypeInt         FieldType = "int"
	FieldTypeBool        FieldType = "bool"
	FieldTypeSelect      FieldType = "select"
	FieldTypeMultiselect FieldType = "multiselect"
	FieldTypePassword    FieldType = "password"
	FieldTypeObject      FieldType = "object"
)

type Filter

type Filter struct {
	Include []string `json:"include,omitempty" description:"Include patterns for resource names (regex)"`
	Exclude []string `json:"exclude,omitempty" description:"Exclude patterns for resource names (regex)"`
}

type MetadataField

type MetadataField struct {
	Path        string
	Description string
	Type        string
	Required    bool
	Sensitive   bool
}

MetadataField defines a metadata field with documentation and validation

func GetMetadataFields

func GetMetadataFields(v interface{}) []MetadataField

GetMetadataFields extracts metadata field definitions from struct tags

type PluginConfig

type PluginConfig struct {
	BaseConfig `json:",inline"`
	Source     string `json:"source,omitempty"`
}

PluginConfig combines base config with plugin-specific fields

type PluginMeta added in v0.5.0

type PluginMeta struct {
	ID          string        `json:"id"`
	Name        string        `json:"name"`
	Description string        `json:"description"`
	Icon        string        `json:"icon"`
	Category    string        `json:"category"`
	ConfigSpec  []ConfigField `json:"config_spec"`
}

type RawPluginConfig

type RawPluginConfig map[string]interface{}

RawPluginConfig holds the raw JSON configuration for a plugin It uses a `map[string]interface{}` to unmarshal arbitrary JSON data for each plugin's specific config.

func MaskSensitiveFieldsFromSpec added in v0.5.0

func MaskSensitiveFieldsFromSpec(config RawPluginConfig, configSpec []ConfigField) RawPluginConfig

MaskSensitiveFieldsFromSpec masks sensitive fields in a config map using the ConfigSpec

func (RawPluginConfig) MaskSensitiveFields added in v0.3.0

func (r RawPluginConfig) MaskSensitiveFields(configStruct interface{}) RawPluginConfig

type Registry added in v0.5.0

type Registry struct {
	// contains filtered or unexported fields
}

func GetRegistry added in v0.5.0

func GetRegistry() *Registry

func (*Registry) Get added in v0.5.0

func (r *Registry) Get(id string) (*RegistryEntry, error)

func (*Registry) GetSource added in v0.5.0

func (r *Registry) GetSource(id string) (Source, error)

func (*Registry) List added in v0.5.0

func (r *Registry) List() []PluginMeta

func (*Registry) Register added in v0.5.0

func (r *Registry) Register(meta PluginMeta, source Source) error

type RegistryEntry added in v0.5.0

type RegistryEntry struct {
	Meta   PluginMeta
	Source Source
}

type Run added in v0.3.0

type Run struct {
	ID           string          `json:"id"`
	PipelineName string          `json:"pipeline_name"`
	SourceName   string          `json:"source_name"`
	RunID        string          `json:"run_id"`
	Status       RunStatus       `json:"status"`
	StartedAt    time.Time       `json:"started_at"`
	CompletedAt  *time.Time      `json:"completed_at,omitempty"`
	ErrorMessage string          `json:"error_message,omitempty"`
	Config       RawPluginConfig `json:"config,omitempty"`
	Summary      *RunSummary     `json:"summary,omitempty"`
	CreatedBy    string          `json:"created_by"`
}

Run represents a single run

type RunCheckpoint added in v0.3.0

type RunCheckpoint struct {
	ID           string    `json:"id"`
	RunID        string    `json:"run_id"`
	EntityType   string    `json:"entity_type"` // 'asset', 'lineage', 'documentation'
	EntityMRN    string    `json:"entity_mrn"`
	Operation    string    `json:"operation"`     // 'created', 'updated', 'deleted', 'skipped'
	SourceFields []string  `json:"source_fields"` // Which fields this source contributed
	CreatedAt    time.Time `json:"created_at"`
}

RunCheckpoint tracks what entities were processed in a run

type RunHistoryEvent added in v0.5.0

type RunHistoryEvent struct {
	RunID        string                 `json:"run_id"`
	JobNamespace string                 `json:"job_namespace"`
	JobName      string                 `json:"job_name"`
	EventType    string                 `json:"event_type"` // START, RUNNING, COMPLETE, FAIL, ABORT
	EventTime    time.Time              `json:"event_time"`
	RunFacets    map[string]interface{} `json:"run_facets,omitempty"`
	JobFacets    map[string]interface{} `json:"job_facets,omitempty"`
}

RunHistoryEvent represents a single run event (START, COMPLETE, FAIL, etc.)

type RunStatus added in v0.3.0

type RunStatus string
const (
	StatusRunning   RunStatus = "running"
	StatusCompleted RunStatus = "completed"
	StatusFailed    RunStatus = "failed"
	StatusCancelled RunStatus = "cancelled"
)

type RunSummary added in v0.3.0

type RunSummary struct {
	AssetsCreated      int `json:"assets_created"`
	AssetsUpdated      int `json:"assets_updated"`
	AssetsDeleted      int `json:"assets_deleted"`
	LineageCreated     int `json:"lineage_created"`
	LineageUpdated     int `json:"lineage_updated"`
	DocumentationAdded int `json:"documentation_added"`
	ErrorsCount        int `json:"errors_count"`
	TotalEntities      int `json:"total_entities"`
	DurationSeconds    int `json:"duration_seconds"`
}

RunSummary contains summary statistics for a run

type Source

type Source interface {
	Validate(config RawPluginConfig) (RawPluginConfig, error)
	Discover(ctx context.Context, config RawPluginConfig) (*DiscoveryResult, error)
}

type SourceRun

type SourceRun map[string]RawPluginConfig

SourceRun maps source names to their raw configurations

type StatefulRunContext added in v0.3.0

type StatefulRunContext struct {
	PipelineName       string
	SourceName         string
	LastRunCheckpoints map[string]*RunCheckpoint // entity_mrn -> checkpoint
	CurrentRunID       string
}

StatefulRunContext provides context for stateful operations

type StatefulSource added in v0.3.0

type StatefulSource interface {
	Source
	SupportsStatefulIngestion() bool
}

StatefulSource extends Source with stateful capabilities

type Statistic added in v0.3.1

type Statistic struct {
	AssetMRN   string  `json:"asset_mrn"`
	MetricName string  `json:"metric_name"`
	Value      float64 `json:"value"`
}

type TagsConfig

type TagsConfig []string

TagsConfig is just a string slice that supports interpolation

type Validation added in v0.5.0

type Validation struct {
	Pattern string `json:"pattern,omitempty"`
	Min     *int   `json:"min,omitempty"`
	Max     *int   `json:"max,omitempty"`
	MinLen  *int   `json:"min_len,omitempty"`
	MaxLen  *int   `json:"max_len,omitempty"`
}

type ValidationError added in v0.5.0

type ValidationError struct {
	Field   string `json:"field"`
	Message string `json:"message"`
}

ValidationError represents a field-level validation error

type ValidationErrors added in v0.5.0

type ValidationErrors struct {
	Errors []ValidationError `json:"errors"`
}

ValidationErrors is a collection of validation errors

func (ValidationErrors) Error added in v0.5.0

func (v ValidationErrors) Error() string

Directories

Path Synopsis
providers
airflow
+marmot:name=Airflow +marmot:description=Ingests metadata from Apache Airflow including DAGs, tasks, and dataset lineage.
+marmot:name=Airflow +marmot:description=Ingests metadata from Apache Airflow including DAGs, tasks, and dataset lineage.
asyncapi
+marmot:name=AsyncAPI +marmot:description=This plugin ingests metadata from AsyncAPI v3 specifications, discovering services, channels, and message schemas.
+marmot:name=AsyncAPI +marmot:description=This plugin ingests metadata from AsyncAPI v3 specifications, discovering services, channels, and message schemas.
azureblob
+marmot:name=Azure Blob Storage +marmot:description=Discovers containers and blobs from Azure Blob Storage accounts.
+marmot:name=Azure Blob Storage +marmot:description=Discovers containers and blobs from Azure Blob Storage accounts.
bigquery
+marmot:name=BigQuery +marmot:description=This plugin discovers datasets and tables from Google BigQuery projects.
+marmot:name=BigQuery +marmot:description=This plugin discovers datasets and tables from Google BigQuery projects.
clickhouse
+marmot:name=ClickHouse +marmot:description=Discovers databases, tables, and views from ClickHouse instances.
+marmot:name=ClickHouse +marmot:description=Discovers databases, tables, and views from ClickHouse instances.
confluent
+marmot:name=Confluent Cloud +marmot:description=Discover Kafka topics from Confluent Cloud clusters.
+marmot:name=Confluent Cloud +marmot:description=Discover Kafka topics from Confluent Cloud clusters.
dbt
+marmot:name=DBT +marmot:description=This plugin ingests metadata from DBT (Data Build Tool) projects, including models, tests, and lineage.
+marmot:name=DBT +marmot:description=This plugin ingests metadata from DBT (Data Build Tool) projects, including models, tests, and lineage.
gcs
+marmot:name=Google Cloud Storage +marmot:description=Discovers buckets from Google Cloud Storage.
+marmot:name=Google Cloud Storage +marmot:description=Discovers buckets from Google Cloud Storage.
kafka
+marmot:name=Kafka +marmot:description=This plugin discovers Kafka topics from Kafka clusters.
+marmot:name=Kafka +marmot:description=This plugin discovers Kafka topics from Kafka clusters.
mongodb
+marmot:name=MongoDB +marmot:description=This plugin discovers databases and collections from MongoDB instances.
+marmot:name=MongoDB +marmot:description=This plugin discovers databases and collections from MongoDB instances.
mysql
+marmot:name=MySQL +marmot:description=This plugin discovers databases and tables from MySQL instances.
+marmot:name=MySQL +marmot:description=This plugin discovers databases and tables from MySQL instances.
nats
+marmot:name=NATS +marmot:description=Discovers JetStream streams from NATS servers.
+marmot:name=NATS +marmot:description=Discovers JetStream streams from NATS servers.
openapi
+marmot:name=OpenAPI +marmot:description=This plugin discovers OpenAPI v3 specifications.
+marmot:name=OpenAPI +marmot:description=This plugin discovers OpenAPI v3 specifications.
postgresql
+marmot:name=PostgreSQL +marmot:description=This plugin discovers databases and tables from PostgreSQL instances.
+marmot:name=PostgreSQL +marmot:description=This plugin discovers databases and tables from PostgreSQL instances.
redis
+marmot:name=Redis +marmot:description=Discovers databases from Redis instances.
+marmot:name=Redis +marmot:description=Discovers databases from Redis instances.
redpanda
+marmot:name=Redpanda +marmot:description=Discover topics from Redpanda clusters.
+marmot:name=Redpanda +marmot:description=Discover topics from Redpanda clusters.
s3
+marmot:name=S3 +marmot:description=This plugin discovers S3 buckets from AWS accounts.
+marmot:name=S3 +marmot:description=This plugin discovers S3 buckets from AWS accounts.
sns
+marmot:name=SNS +marmot:description=This plugin discovers SNS topics from AWS accounts.
+marmot:name=SNS +marmot:description=This plugin discovers SNS topics from AWS accounts.
sqs
+marmot:name=SQS +marmot:description=This plugin discovers SQS queues from AWS accounts.
+marmot:name=SQS +marmot:description=This plugin discovers SQS queues from AWS accounts.
trino
+marmot:name=Trino +marmot:description=Discovers catalogs, schemas, tables, and views from Trino clusters with optional AI enrichment.
+marmot:name=Trino +marmot:description=Discovers catalogs, schemas, tables, and views from Trino clusters with optional AI enrichment.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL