Documentation
¶
Index ¶
- Constants
- Variables
- type AssetRule
- func (r *AssetRule) ComputeHash() string
- func (r *AssetRule) GetID() string
- func (r *AssetRule) GetIsEnabled() bool
- func (r *AssetRule) GetMetadataField() *string
- func (r *AssetRule) GetPatternType() *string
- func (r *AssetRule) GetPatternValue() *string
- func (r *AssetRule) GetQueryExpression() *string
- func (r *AssetRule) GetRuleType() enrichment.RuleType
- func (r *AssetRule) RuleSource() string
- type CreateInput
- type EnrichedExternalLink
- type ExternalLink
- type ListResult
- type MembershipConfig
- type MembershipRepository
- type MembershipService
- func (s *MembershipService) EvaluateRule(ctx context.Context, ruleID string) error
- func (s *MembershipService) OnAssetCreated(ctx context.Context, ast *asset.Asset)
- func (s *MembershipService) OnAssetDeleted(ctx context.Context, assetID string) error
- func (s *MembershipService) OnRuleCreated(ctx context.Context, rule *AssetRule) error
- func (s *MembershipService) OnRuleDeleted(ctx context.Context, ruleID string) error
- func (s *MembershipService) OnRuleUpdated(ctx context.Context, rule *AssetRule) error
- func (s *MembershipService) ReconcileAll(ctx context.Context) error
- func (s *MembershipService) Start(ctx context.Context)
- func (s *MembershipService) Stop()
- type PostgresMembershipRepository
- func (r *PostgresMembershipRepository) CreateMemberships(ctx context.Context, ruleID string, assetIDs []string) error
- func (r *PostgresMembershipRepository) CreateTermMemberships(ctx context.Context, ruleID string, termIDs []string, assetIDs []string) error
- func (r *PostgresMembershipRepository) DeleteMembershipsBatch(ctx context.Context, ruleID string, assetIDs []string) error
- func (r *PostgresMembershipRepository) DeleteMembershipsByAsset(ctx context.Context, assetID string) error
- func (r *PostgresMembershipRepository) DeleteMembershipsByRule(ctx context.Context, ruleID string) error
- func (r *PostgresMembershipRepository) DeleteRuleTargets(ctx context.Context, ruleID string) error
- func (r *PostgresMembershipRepository) DeleteTermMembershipsBatch(ctx context.Context, ruleID string, assetIDs []string) error
- func (r *PostgresMembershipRepository) DeleteTermMembershipsByAsset(ctx context.Context, assetID string) error
- func (r *PostgresMembershipRepository) DeleteTermMembershipsByRule(ctx context.Context, ruleID string) error
- func (r *PostgresMembershipRepository) FindCandidateRules(ctx context.Context, sig enrichment.AssetSignature) ([]enrichment.CandidateRule, error)
- func (r *PostgresMembershipRepository) GetExistingMembershipAssetIDs(ctx context.Context, ruleID string) (map[string]struct{}, error)
- func (r *PostgresMembershipRepository) GetMembershipAssetIDs(ctx context.Context, ruleID string, limit, offset int) ([]string, int, error)
- func (r *PostgresMembershipRepository) SaveRuleTargets(ctx context.Context, ruleID string, targets []enrichment.RuleTarget) error
- func (r *PostgresMembershipRepository) UpdateMembershipStats(ctx context.Context, ruleID string) error
- type PostgresRepository
- func (r *PostgresRepository) Create(ctx context.Context, rule *AssetRule) error
- func (r *PostgresRepository) Delete(ctx context.Context, id string) error
- func (r *PostgresRepository) Get(ctx context.Context, id string) (*AssetRule, error)
- func (r *PostgresRepository) GetAllEnabled(ctx context.Context) ([]*AssetRule, error)
- func (r *PostgresRepository) GetRuleManagedLinks(ctx context.Context, assetID string) ([]EnrichedExternalLink, error)
- func (r *PostgresRepository) GetTermIDs(ctx context.Context, ruleID string) ([]string, error)
- func (r *PostgresRepository) List(ctx context.Context, offset, limit int) (*ListResult, error)
- func (r *PostgresRepository) Search(ctx context.Context, filter SearchFilter) (*ListResult, error)
- func (r *PostgresRepository) SetTerms(ctx context.Context, ruleID string, termIDs []string) error
- func (r *PostgresRepository) Update(ctx context.Context, rule *AssetRule) error
- func (r *PostgresRepository) UpdateReconciliationState(ctx context.Context, ruleID string, hash string) error
- type Reconciler
- type ReconcilerConfig
- type Repository
- type RulePreview
- type RulePreviewInput
- func (r *RulePreviewInput) GetID() string
- func (r *RulePreviewInput) GetIsEnabled() bool
- func (r *RulePreviewInput) GetMetadataField() *string
- func (r *RulePreviewInput) GetPatternType() *string
- func (r *RulePreviewInput) GetPatternValue() *string
- func (r *RulePreviewInput) GetQueryExpression() *string
- func (r *RulePreviewInput) GetRuleType() enrichment.RuleType
- type SearchFilter
- type Service
- type UpdateInput
Constants ¶
const ( DefaultLimit = 50 MaxLimit = 100 )
const DefaultReconcileInterval = 30 * time.Minute
Variables ¶
Functions ¶
This section is empty.
Types ¶
type AssetRule ¶
type AssetRule struct {
ID string `json:"id"`
Name string `json:"name"`
Description *string `json:"description,omitempty"`
Links []ExternalLink `json:"links"`
TermIDs []string `json:"term_ids"`
RuleType enrichment.RuleType `json:"rule_type"`
QueryExpression *string `json:"query_expression,omitempty"`
MetadataField *string `json:"metadata_field,omitempty"`
PatternType *string `json:"pattern_type,omitempty"`
PatternValue *string `json:"pattern_value,omitempty"`
Priority int `json:"priority"`
IsEnabled bool `json:"is_enabled"`
CreatedBy *string `json:"created_by,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
MembershipCount int `json:"membership_count"`
LastReconciledAt *time.Time `json:"last_reconciled_at,omitempty"`
ReconciliationHash *string `json:"reconciliation_hash,omitempty"`
}
AssetRule represents a governance rule that assigns external links and/or glossary terms to assets.
func (*AssetRule) ComputeHash ¶
ComputeHash computes a hash of the rule's config for differential reconciliation.
func (*AssetRule) GetIsEnabled ¶
func (*AssetRule) GetMetadataField ¶
func (*AssetRule) GetPatternType ¶
func (*AssetRule) GetPatternValue ¶
func (*AssetRule) GetQueryExpression ¶
func (*AssetRule) GetRuleType ¶
func (r *AssetRule) GetRuleType() enrichment.RuleType
func (*AssetRule) RuleSource ¶
RuleSource returns the source string for asset_terms rows.
type CreateInput ¶
type CreateInput struct {
Name string `json:"name" validate:"required,min=1,max=255"`
Description *string `json:"description,omitempty"`
Links []ExternalLink `json:"links,omitempty"`
TermIDs []string `json:"term_ids,omitempty"`
RuleType enrichment.RuleType `json:"rule_type" validate:"required,oneof=query metadata_match"`
QueryExpression *string `json:"query_expression,omitempty"`
MetadataField *string `json:"metadata_field,omitempty"`
PatternType *string `json:"pattern_type,omitempty" validate:"omitempty,oneof=exact wildcard regex prefix"`
PatternValue *string `json:"pattern_value,omitempty"`
Priority int `json:"priority"`
IsEnabled bool `json:"is_enabled"`
}
CreateInput is the input for creating an asset rule.
type EnrichedExternalLink ¶
type EnrichedExternalLink struct {
asset.ExternalLink
Source string `json:"source"`
RuleID *string `json:"rule_id,omitempty"`
RuleName *string `json:"rule_name,omitempty"`
}
EnrichedExternalLink is an external link with source information.
type ExternalLink ¶
type ExternalLink struct {
Name string `json:"name"`
Icon string `json:"icon"`
URL string `json:"url"`
}
ExternalLink represents a link that a rule assigns to matching assets.
type ListResult ¶
ListResult is the result of listing asset rules.
type MembershipConfig ¶
type MembershipRepository ¶
type MembershipRepository interface {
CreateMemberships(ctx context.Context, ruleID string, assetIDs []string) error
DeleteMembershipsByAsset(ctx context.Context, assetID string) error
DeleteMembershipsByRule(ctx context.Context, ruleID string) error
DeleteMembershipsBatch(ctx context.Context, ruleID string, assetIDs []string) error
GetMembershipAssetIDs(ctx context.Context, ruleID string, limit, offset int) ([]string, int, error)
GetExistingMembershipAssetIDs(ctx context.Context, ruleID string) (map[string]struct{}, error)
// Writes to asset_terms with source='rule:<id>'
CreateTermMemberships(ctx context.Context, ruleID string, termIDs []string, assetIDs []string) error
DeleteTermMembershipsByAsset(ctx context.Context, assetID string) error
DeleteTermMembershipsByRule(ctx context.Context, ruleID string) error
DeleteTermMembershipsBatch(ctx context.Context, ruleID string, assetIDs []string) error
SaveRuleTargets(ctx context.Context, ruleID string, targets []enrichment.RuleTarget) error
DeleteRuleTargets(ctx context.Context, ruleID string) error
FindCandidateRules(ctx context.Context, sig enrichment.AssetSignature) ([]enrichment.CandidateRule, error)
UpdateMembershipStats(ctx context.Context, ruleID string) error
}
type MembershipService ¶
type MembershipService struct {
// contains filtered or unexported fields
}
MembershipService evaluates asset rules and maintains rule-to-asset memberships.
func NewMembershipService ¶
func NewMembershipService( repo Repository, memberRepo MembershipRepository, evaluator *enrichment.Evaluator, config *MembershipConfig, ) *MembershipService
func (*MembershipService) EvaluateRule ¶
func (s *MembershipService) EvaluateRule(ctx context.Context, ruleID string) error
func (*MembershipService) OnAssetCreated ¶
func (s *MembershipService) OnAssetCreated(ctx context.Context, ast *asset.Asset)
func (*MembershipService) OnAssetDeleted ¶
func (s *MembershipService) OnAssetDeleted(ctx context.Context, assetID string) error
func (*MembershipService) OnRuleCreated ¶
func (s *MembershipService) OnRuleCreated(ctx context.Context, rule *AssetRule) error
func (*MembershipService) OnRuleDeleted ¶
func (s *MembershipService) OnRuleDeleted(ctx context.Context, ruleID string) error
func (*MembershipService) OnRuleUpdated ¶
func (s *MembershipService) OnRuleUpdated(ctx context.Context, rule *AssetRule) error
func (*MembershipService) ReconcileAll ¶
func (s *MembershipService) ReconcileAll(ctx context.Context) error
ReconcileAll re-evaluates all enabled rules using differential reconciliation, skipping rules whose config hash hasn't changed since the last run.
func (*MembershipService) Start ¶
func (s *MembershipService) Start(ctx context.Context)
func (*MembershipService) Stop ¶
func (s *MembershipService) Stop()
type PostgresMembershipRepository ¶
type PostgresMembershipRepository struct {
// contains filtered or unexported fields
}
PostgresMembershipRepository implements MembershipRepository for PostgreSQL.
func NewPostgresMembershipRepository ¶
func NewPostgresMembershipRepository(db *pgxpool.Pool, recorder metrics.Recorder) *PostgresMembershipRepository
NewPostgresMembershipRepository creates a new membership repository.
func (*PostgresMembershipRepository) CreateMemberships ¶
func (*PostgresMembershipRepository) CreateTermMemberships ¶
func (*PostgresMembershipRepository) DeleteMembershipsBatch ¶
func (*PostgresMembershipRepository) DeleteMembershipsByAsset ¶
func (r *PostgresMembershipRepository) DeleteMembershipsByAsset(ctx context.Context, assetID string) error
func (*PostgresMembershipRepository) DeleteMembershipsByRule ¶
func (r *PostgresMembershipRepository) DeleteMembershipsByRule(ctx context.Context, ruleID string) error
func (*PostgresMembershipRepository) DeleteRuleTargets ¶
func (r *PostgresMembershipRepository) DeleteRuleTargets(ctx context.Context, ruleID string) error
func (*PostgresMembershipRepository) DeleteTermMembershipsBatch ¶
func (*PostgresMembershipRepository) DeleteTermMembershipsByAsset ¶
func (r *PostgresMembershipRepository) DeleteTermMembershipsByAsset(ctx context.Context, assetID string) error
func (*PostgresMembershipRepository) DeleteTermMembershipsByRule ¶
func (r *PostgresMembershipRepository) DeleteTermMembershipsByRule(ctx context.Context, ruleID string) error
func (*PostgresMembershipRepository) FindCandidateRules ¶
func (r *PostgresMembershipRepository) FindCandidateRules(ctx context.Context, sig enrichment.AssetSignature) ([]enrichment.CandidateRule, error)
func (*PostgresMembershipRepository) GetExistingMembershipAssetIDs ¶
func (*PostgresMembershipRepository) GetMembershipAssetIDs ¶
func (*PostgresMembershipRepository) SaveRuleTargets ¶
func (r *PostgresMembershipRepository) SaveRuleTargets(ctx context.Context, ruleID string, targets []enrichment.RuleTarget) error
func (*PostgresMembershipRepository) UpdateMembershipStats ¶
func (r *PostgresMembershipRepository) UpdateMembershipStats(ctx context.Context, ruleID string) error
type PostgresRepository ¶
type PostgresRepository struct {
// contains filtered or unexported fields
}
PostgresRepository implements Repository for PostgreSQL.
func NewPostgresRepository ¶
func NewPostgresRepository(db *pgxpool.Pool, recorder metrics.Recorder) *PostgresRepository
NewPostgresRepository creates a new PostgreSQL repository.
func (*PostgresRepository) Create ¶
func (r *PostgresRepository) Create(ctx context.Context, rule *AssetRule) error
func (*PostgresRepository) Delete ¶
func (r *PostgresRepository) Delete(ctx context.Context, id string) error
func (*PostgresRepository) GetAllEnabled ¶
func (r *PostgresRepository) GetAllEnabled(ctx context.Context) ([]*AssetRule, error)
func (*PostgresRepository) GetRuleManagedLinks ¶
func (r *PostgresRepository) GetRuleManagedLinks(ctx context.Context, assetID string) ([]EnrichedExternalLink, error)
func (*PostgresRepository) GetTermIDs ¶
func (*PostgresRepository) List ¶
func (r *PostgresRepository) List(ctx context.Context, offset, limit int) (*ListResult, error)
func (*PostgresRepository) Search ¶
func (r *PostgresRepository) Search(ctx context.Context, filter SearchFilter) (*ListResult, error)
func (*PostgresRepository) Update ¶
func (r *PostgresRepository) Update(ctx context.Context, rule *AssetRule) error
func (*PostgresRepository) UpdateReconciliationState ¶
type Reconciler ¶
type Reconciler struct {
// contains filtered or unexported fields
}
Reconciler periodically re-evaluates all asset rules using differential reconciliation.
func NewReconciler ¶
func NewReconciler(membershipSvc *MembershipService, config *ReconcilerConfig) *Reconciler
NewReconciler creates a new reconciler.
func (*Reconciler) Start ¶
func (r *Reconciler) Start(ctx context.Context)
Start begins the periodic reconciliation loop.
type ReconcilerConfig ¶
ReconcilerConfig configures the reconciler.
type Repository ¶
type Repository interface {
Create(ctx context.Context, rule *AssetRule) error
Get(ctx context.Context, id string) (*AssetRule, error)
Update(ctx context.Context, rule *AssetRule) error
Delete(ctx context.Context, id string) error
List(ctx context.Context, offset, limit int) (*ListResult, error)
Search(ctx context.Context, filter SearchFilter) (*ListResult, error)
GetAllEnabled(ctx context.Context) ([]*AssetRule, error)
UpdateReconciliationState(ctx context.Context, ruleID string, hash string) error
SetTerms(ctx context.Context, ruleID string, termIDs []string) error
GetTermIDs(ctx context.Context, ruleID string) ([]string, error)
// For asset detail page: get rule-managed links for an asset
GetRuleManagedLinks(ctx context.Context, assetID string) ([]EnrichedExternalLink, error)
}
Repository handles database operations for asset rules.
type RulePreview ¶
type RulePreview struct {
AssetIDs []string `json:"asset_ids"`
AssetCount int `json:"asset_count"`
Errors []string `json:"errors,omitempty"`
}
RulePreview is the result of previewing a rule.
type RulePreviewInput ¶
type RulePreviewInput struct {
RuleType enrichment.RuleType `json:"rule_type" validate:"required,oneof=query metadata_match"`
QueryExpression *string `json:"query_expression,omitempty"`
MetadataField *string `json:"metadata_field,omitempty"`
PatternType *string `json:"pattern_type,omitempty"`
PatternValue *string `json:"pattern_value,omitempty"`
}
RulePreviewInput is the input for previewing a rule.
func (*RulePreviewInput) GetID ¶
func (r *RulePreviewInput) GetID() string
Implement enrichment.EnrichmentRule for RulePreviewInput.
func (*RulePreviewInput) GetIsEnabled ¶
func (r *RulePreviewInput) GetIsEnabled() bool
func (*RulePreviewInput) GetMetadataField ¶
func (r *RulePreviewInput) GetMetadataField() *string
func (*RulePreviewInput) GetPatternType ¶
func (r *RulePreviewInput) GetPatternType() *string
func (*RulePreviewInput) GetPatternValue ¶
func (r *RulePreviewInput) GetPatternValue() *string
func (*RulePreviewInput) GetQueryExpression ¶
func (r *RulePreviewInput) GetQueryExpression() *string
func (*RulePreviewInput) GetRuleType ¶
func (r *RulePreviewInput) GetRuleType() enrichment.RuleType
type SearchFilter ¶
type SearchFilter struct {
Query string `json:"query,omitempty"`
Limit int `json:"limit,omitempty"`
Offset int `json:"offset,omitempty"`
}
SearchFilter for searching asset rules.
type Service ¶
type Service interface {
Create(ctx context.Context, input CreateInput, createdBy *string) (*AssetRule, error)
Get(ctx context.Context, id string) (*AssetRule, error)
Update(ctx context.Context, id string, input UpdateInput) (*AssetRule, error)
Delete(ctx context.Context, id string) error
List(ctx context.Context, offset, limit int) (*ListResult, error)
Search(ctx context.Context, filter SearchFilter) (*ListResult, error)
PreviewRule(ctx context.Context, input RulePreviewInput, limit int) (*RulePreview, error)
GetRuleAssets(ctx context.Context, ruleID string, limit, offset int) ([]string, int, error)
GetEnrichedLinks(ctx context.Context, assetID string) ([]EnrichedExternalLink, error)
}
Service provides business logic for asset rules.
func NewService ¶
func NewService( repo Repository, memberRepo MembershipRepository, evaluator *enrichment.Evaluator, memberSvc *MembershipService, ) Service
NewService creates a new asset rule service.
type UpdateInput ¶
type UpdateInput struct {
Name *string `json:"name,omitempty" validate:"omitempty,min=1,max=255"`
Description *string `json:"description,omitempty"`
Links []ExternalLink `json:"links,omitempty"`
TermIDs []string `json:"term_ids,omitempty"`
RuleType *enrichment.RuleType `json:"rule_type,omitempty" validate:"omitempty,oneof=query metadata_match"`
QueryExpression *string `json:"query_expression,omitempty"`
MetadataField *string `json:"metadata_field,omitempty"`
PatternType *string `json:"pattern_type,omitempty" validate:"omitempty,oneof=exact wildcard regex prefix"`
PatternValue *string `json:"pattern_value,omitempty"`
Priority *int `json:"priority,omitempty"`
IsEnabled *bool `json:"is_enabled,omitempty"`
}
UpdateInput is the input for updating an asset rule.