plugin

package
v0.5.0-preview2 Latest Latest
Warning

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

Go to latest
Published: Jan 3, 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 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."`
	Filter         Filter         `json:"filter,omitempty" description:"Filter patterns for AWS resources"`
}

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"`
}

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 GenerateConfigSpec added in v0.5.0

func GenerateConfigSpec(configType interface{}) []ConfigField

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 enables fetching data from AsyncAPI specifications.
+marmot:name=AsyncAPI +marmot:description=This plugin enables fetching data from AsyncAPI specifications.
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.
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.
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.
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.
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.

Jump to

Keyboard shortcuts

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